繁体   English   中英

MATLAB 优化拟合 function 调用

[英]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。 请注意, arrayfunfor循环相似,并且具有相当的性能。

由于您的 function 基本上使用fit ,因此您似乎无法矢量化,因为fit一次需要组输入并产生相应的 output。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM