4

MATLAB の関数を使用しており、オプションをlsqnonlin使用してユーザー定義の JacboianパターンJacobPatternを設定しようとしています。trust-region-reflective使用するアルゴリズムの設定を行いました。from は、これが実際にソルバーによって使用されるアルゴリズムであることを示しています (outputオプションの使用に必要)。lsqnonlinJacobPattern

私が見つけた問題は、 myJacobPatternがまばらすぎる場合 (たとえば、500x500 のヤコビアンで 1 が数行しかない場合)、ソルバーによって無視され、代わりに完全なヤコビアンが計算されることです。

この動作は文書化されていません。誰かがそれにさらに光を当てることができますか? JacobPattern私は、ソルバーがどれほど途方もなくまばらであっても、または勾配がどれほど浅くても、それを使用するようにソルバーに強制できるようにしたいと考えています。


アップデート:

さらにいくつかの実験を行ったところ、ヤコビ パターンにすべてゼロの行がある場合にのみ、ヤコビアンが再計算されるようです。各行に少なくとも 1 つの「1」がある限り、すべてがゼロの列はいくつあっても問題ありません。これは問題を回避するのに役立ちますが、疑問が残ります --- ソルバーが各従属変数に勾配を関連付ける必要があるのはなぜですか? いずれにせよ、ユーザー定義オプションを無視することは、少なくとも警告に値すると思います...

4

1 に答える 1

0

私の推測は次のとおりです。

ヤコビアンが実際に何を意味するかを見ると、すべてゼロの行は、対応する関数 (定義されたベクトル関数の一部) がどの変数からも独立していることを意味することがわかります。したがって、それを最適化に追加してもまったく意味がありません。

意図的に間違ったヤコビアンをアルゴリズムに渡すことに関しては、なぜそれをしたいのでしょうか?

于 2012-11-09T18:46:44.943 に答える