獲取兩個或多個引數的函式的值

在許多應用程式中,有必要計算兩個或多個引數的函式。

傳統上,我們使用 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)。因此,我們必須選擇記憶體或速度。