[英]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.