[英]MATLAB optimizing fitting function calls
我有一個 3D 維度數組(行 x 列 x 8)。 對於前兩個維度中的每個元素,我沿着第三個維度有 8 個值,我必須擬合一個方程,例如指數、多項式等。我已經為此 function 編寫了代碼,我目前正在通過循環生成我的 output前兩個維度,如下:
for i=1:rows
for j=1:cols
outputArray(i,j) = functionHandle(inputArray(i,j,1:8));
end
end
我可以以某種方式使用 bsxfun、arrayfun 或其他一些矢量化方法來擺脫 for 循環,以便使用類似的東西生成我的 output 嗎?
outputArray = bsxfun(@functionHandle,inputArray)
添加函數句柄
function output = functionHandle(xData,yData)
ft = fittype( 'a*exp(-b*x)+c','independent', 'x','dependent','y' );
opts = fitoptions( 'Method', 'NonlinearLeastSquares' );
opts.Algorithm = 'Trust-Region';
opts.Display = 'Off';
opts.MaxFunEvals = 100;
opts.MaxIter = 100;
opts.Robust = 'LAR';
opts.Lower = [-Inf 0 -Inf];
opts.StartPoint = [0.35 0.05 0.90];
% Fit model to data.
[FitResult,~] = fit(xData,yData,ft,opts);
output = FitResult.a;
end
答案完全取決於您的 function 是否已矢量化。 What you should do is write that function so that it allows R
× C
× 8
input and produces R
× C
× N
output, where N
is the number of fit parameters.
也就是說,向量化必須在 function內完成; 它不能在外面完成。 從外部您只能在循環中使用 function。 請注意, arrayfun
與for
循環相似,並且具有相當的性能。
由於您的 function 基本上使用fit
,因此您似乎無法矢量化,因為fit
一次需要一組輸入並產生相應的 output。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.