获取两个或多个参数的函数的值

在许多应用程序中,有必要计算两个或多个参数的函数。

传统上,我们使用 for-loops。例如,如果我们需要计算 f = exp(-x^2-y^2)(如果你需要**快速模拟,**请不要使用它 ):

% 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

但矢量化版本更优雅,更快捷:

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

我们可以想象它:

surf(x,y,f)

注 1 - 网格:通常,矩阵存储是逐行组织的。但是在 MATLAB 中,它是 FORTRAN 中的逐列存储。因此,在 MATLAB 中有两个类似的函数 ndgridmeshgrid 来实现上述两个模型。为了在 meshgrid 的情况下可视化功能,我们可以使用:

surf(y,x,f)

注 2 - 内存消耗:让 xy 的大小为 1000.因此,我们需要为非向量化代码 1 存储 1000*1000+2*1000 ~ 1e6 元素。但是在矢量化代码 2 的情况下我们需要 3*(1000*1000) = 3e6 元素。在 3D 情况下(让 z 具有相同的大小 asxy),内存消耗显着增加:在代码 1 的情况下,在矢量化代码 2~1000*1000*1000(仅约 8GB)的情况下, 4*(1000*1000*1000) (对于双精度为~32GB)。因此,我们必须选择内存或速度。