獲取兩個或多個引數的函式的值
在許多應用程式中,有必要計算兩個或多個引數的函式。
傳統上,我們使用 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 中有兩個類似的函式 ndgrid
和 meshgrid
來實現上述兩個模型。為了在 meshgrid
的情況下視覺化功能,我們可以使用:
surf(y,x,f)
注 2 - 記憶體消耗:讓 x
或 y
的大小為 1000.因此,我們需要為非向量化程式碼 1 儲存 1000*1000+2*1000 ~ 1e6
元素。但是在向量化程式碼 2 的情況下我們需要 3*(1000*1000) = 3e6
元素。在 3D 情況下(讓 z
具有相同的大小 asx
或 y
),記憶體消耗顯著增加:在程式碼 1 的情況下,在向量化程式碼 2 與~1000*1000*1000
(僅約 8GB)的情況下, 4*(1000*1000*1000)
(對於雙精度為~32GB)。因此,我們必須選擇記憶體或速度。