簡體   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