2

オプションをに設定しました

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を使用しなかったことを意味しますか?

しかし、私は自分のオプションをlevenbergMarquardtアルゴリズムに設定しました!!!

助けていただければ幸いです。

4

2 に答える 2

2

特定のアルゴリズムが、最適化問題の特定の構成に適していない場合があります。これらの場合、Matlab はデフォルトの最適化アルゴリズムに「フォールバック」します。
特定の問題/構成で、Matlab が Levenberg-Marquardt アルゴリズムを使用できない場合があります。

ドキュメントを注意深く読んで、これが当てはまるかどうかを確認してください。

于 2013-02-20T10:00:21.737 に答える
1

確かなことは言えませんが、制約 ( [-inf -inf], [inf inf]) が問題になる可能性があります。lsqcurvefit のドキュメントには、制約付きの問題には LMA を使用できないと厳密に記載されています。制約が含まれている場合は、trust-region にフォールバックします。

はい、制約は数学的に「制約なし」と同等ですが、MATLAB 関数自体がそれらをどのように解釈するかわかりません。私は自分の側で問題を再現しようとしましたが、optimset('LevenbergMarquardt', 'on')推奨されておらず、エラーが発生します (比較的古いバージョンを使用していることを意味します)。新しい構文 ( optimset('Algorithm', 'levenberg-marquardt')) を使用している場合でも、私の側では正しく動作します (2011b を使用)。制約を持たないようにするための正しいアプローチは、空行列 (つまり[]) を使用することです。

はい、質問は 1 か月前のものですが、他の誰かが回答を役に立つと思うかもしれません。

于 2013-03-25T21:49:26.433 に答える