MATLAB 优化拟合函数调用

MATLAB optimizing fitting function calls

我有一个 3D 维度数组(行 x 列 x 8)。对于前两个维度中的每个元素,我在第三个维度上有 8 个值,我必须将它们拟合到一个方程式中,例如指数、多项式等。我已经为这个函数编写了代码,我目前正在通过循环生成我的输出前两个维度,如下:

for i=1:rows
    for j=1:cols
        outputArray(i,j) = functionHandle(inputArray(i,j,1:8));
    end
end

我能否以某种方式使用 bsxfun、arrayfun 或其他一些矢量化方法来摆脱 for 循环,以便我使用类似的方法生成我的输出?

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

答案完全取决于您的函数是否矢量化。你应该做的是编写该函数,使其允许 R×C×8 输入并产生 R×C×N 输出,其中 N 是拟合参数的数量。

也就是说,矢量化必须在函数内完成;它不能在外面完成。从外部您只能在循环中使用该函数。注意 arrayfun is similar, and has comparable performance, to a for 循环。

因为你的函数基本上使用fit,看来你不能矢量化,因为fit一次接受一个组输入并产生相应的输出。