私はfsolve
MATLABのエネルギー関数を最小化するために使用しています。私が使用しているアルゴリズムは、グリッドをノイズの多い格子データに適合させますが、各データポイントからのグリッドの距離にコストがかかります。
目的関数は、ガウス・ニュートンアルゴリズムを使用できるように、二乗誤差項で定式化されます。ただし、プログラムはLevenberg-Marquardtに戻ります。
Warning: Trust-region-dogleg algorithm of FSOLVE cannot handle non-square systems;
using Levenberg-Marquardt algorithm instead.
これはおそらく、コストに二乗誤差がある一方で、各データポイントに最も近いグリッド中心を選択する目的(コスト)関数のステージがあり、アルゴリズムが非二乗になるためであることに気付きました。
私がやりたいのは、コスト関数のJacobianの評価とは別に、最も近いグリッド中心のこの割り当ての更新を実行することです。これにより、ガウス・ニュートン法を使用できるようになり、アルゴリズムの速度が大幅に向上すると思います。
現在、私はこのようなことが起こっていると信じています:
while i < options.MaxIter && threshold has not been met
Compute Jacobian of cost function (which includes assignment routine)
Move down the slope in the direction of highest gradient
end
代わりに私がしたいこと:
while i < options.MaxIter && threshold has not been met
Perform assignment routine
Compute Jacobian of cost function (which is now square, as no assignment occurs)
Move down the slope
end
fsolve
アルゴリズム全体を分解せずに、このような関数を反復に挿入する方法はありますか?fsolveを手動で編集した場合でも、ガウス-ニュートンアルゴリズムの性質により、この追加の手順を追加できますか?
ありがとう