2013-02-20 43 views
2

使用選項設置我的選項在lsqcurvefit

options=optimset('LevenbergMarquardt', 'on') 

,然後採用lsqcurvefit像下面,

[x,resnorm,residual,exitflag,output] = lsqcurvefit(@myfun, [0.01 0.3], xdata, ydata, [-inf -inf], [inf inf], options) 

但問題是,我不知道現在爲什麼我會得到輸出:

輸出=

firstorderopt: 3.4390e-07 
    iterations: 4 
    funcCount: 15 
cgiterations: 0 
    algorithm: 'large-scale: trust-region reflective Newton' 
     message: [1x425 char] 

這是否意味着Matlab沒有使用算法Levenberg Marquardt?

但我確實將我的選項設置爲levenberg Marquardt算法!

我很感激任何幫助。

回答

2

有時一個特定的算法不適用於優化問題的特定配置。在這些情況下,Matlab「回退」到它的默認優化算法。
可能出現這種情況,對於您的特定問題/配置,Matlab無法使用Levenberg-Marquardt算法。

仔細閱讀文檔以查看是否屬於這種情況。

1

我不能肯定地說,但是,constaints([-inf -inf], [inf inf])可能是你的問題。 lsqcurvefit的文檔嚴格規定LMA不能用於受限制的問題。如果包含約束,它將回退到信任區域。

是的,你的約束在數學上等同於'沒有約束',但我不知道MATLAB函數本身如何解釋這些約束。我試圖在我的結尾重新創建問題,但optimset('LevenbergMarquardt', 'on')已被棄用,並生成一個錯誤(意味着您有一個相對較舊的版本)。即使在使用新的語法(optimset('Algorithm', 'levenberg-marquardt'))時,它在我的最後(使用2011b)也表現正確。爲了不存在約束,正確的方法是使用空矩陣(即[])。

是的,問題是一個月大,但別人可能會找到有用的答案。

相關問題