3

Matlabのlevenberg-Marquardt最小二乗法を使用して、4つの未知のパラメーターを持つ巨大な関数をデータに適合させようとしています。私はこのコマンドを使用しました:

[x, resnorm]=lsqcurvefit(@myfun1,[-100:100], xdata, ydata, ...
                         [-inf, -inf, -1.5, -inf], [inf, inf, 1.5, inf], options)

つまり、3番目のパラメーターを制約することに関心があります。しかし、私はこの問題に直面しています:

??? Error using ==> lsqncommon at 102
Levenberg-Marquardt and Gauss-Newton algorithms do not handle bound constraints and trust-region-reflective algorithm
requires at least as many equations as variables; aborting.

Error in ==> lsqcurvefit at 258
[xCurrent,Resnorm,FVAL,EXITFLAG,OUTPUT,LAMBDA,JACOB] = ...

このエラーは、36ポイントであるか、不明なパラメーターが多すぎるため、データが小さいことを示していると思いますが、フィッティング用の4つの不明なパラメーターは問題ないと思います。

では、MATLABが私の関数をこの36ポイントのデータに適合させることができないということですか?

コメントをいただければ幸いです。

4

1 に答える 1

4

このhttp://www.mathworks.co.uk/help/toolbox/optim/ug/lsqcurvefit.htmlによると、2 番目の引数は、最適化するパラメーターの開始値です。あなたは通り過ぎています

 [-100:100]

これは(最後に使用してからmatlabが大幅に変更されていない限り)201個のパラメーターのベクトルであるため、201個を超えるパラメーターを最適化するようにmatlabに依頼しているように見えます。以下のコメントで @Dan が指摘しているように、36 個のデータ ポイントしかないため、あなたが求めていることは不合理です。4 つのパラメータだけを最適化したいので、4 つの開始値だけを入力する必要があります。limit オプションに長さ 4 のベクトルを渡しているため、ここに矛盾があります。

パラメータの 4 つの開始値のベクトルを 2 番目の引数として入力し、期待する結果が生成されるかどうかを確認することをお勧めします。

于 2012-08-22T09:33:22.190 に答える