## Example

In many application it is necessary to compute the function of two or more arguments.

Traditionally, we use `for`

-loops. For example, if we need to calculate the `f = exp(-x^2-y^2)`

(do not use this if you need **fast simulations**):

```
% code1
x = -1.2:0.2:1.4;
y = -2:0.25:3;
for nx=1:lenght(x)
for ny=1:lenght(y)
f(nx,ny) = exp(-x(nx)^2-y(ny)^2);
end
end
```

But vectorized version is more elegant and faster:

```
% code2
[x,y] = ndgrid(-1.2:0.2:1.4, -2:0.25:3);
f = exp(-x.^2-y.^2);
```

than we can visualize it:

```
surf(x,y,f)
```

**Note1** - Grids: Usually, the matrix storage is organized *row-by-row*. But in the MATLAB, it is the *column-by-column* storage as in FORTRAN. Thus, there are two simular functions `ndgrid`

and `meshgrid`

in MATLAB to implement the two aforementioned models. To visualise the function in the case of `meshgrid`

, we can use:

```
surf(y,x,f)
```

**Note2** - Memory consumption: Let size of `x`

or `y`

is 1000. Thus, we need to store `1000*1000+2*1000 ~ 1e6`

elements for non-vectorized *code1*.
But we need `3*(1000*1000) = 3e6`

elements in the case of vectorized *code2*.
In the 3D case (let `z`

has the same size as`x`

or `y`

), memory consumption increases dramatically: `4*(1000*1000*1000)`

(~32GB for doubles) in the case of the vectorized *code2* vs `~1000*1000*1000`

(just ~8GB) in the case of *code1*. Thus, we have to choose either the memory or speed.