Newton-Krylovが適切なソルバーではないのはいつですか?


16

最近、私はscipyのさまざまな非線形ソルバーを比較しており、Scipy CookbookNewton-Krylovの例に特に感銘を受けました。約20行のコードで非線形反応項を持つ2階微分方程式方程式を解きます。

半導体ヘテロ構造の非線形ポアソン方程式(ポアソン-ボルツマン方程式とも呼ばれ、これらのノートの17ページを参照)を解くためにサンプルコードを修正しました。

d2ϕdバツ2kバツpバツϕnバツϕ+N+バツ=0

(これはソルバーに渡される残差関数です。)

これは、静電気の問題である及びP X φはフォームの非線形関数であり、N IX E - E IX φ - E 、F。ここでの詳細は重要ではありませんが、ポイントは非線形関数がϕで指数関数的に変化するため、残差関数は巨大な範囲(10 610 16にわたって変化する可能性があることです。nバツϕpバツϕnバツeEバツϕEfϕ1061016わずかな変化でϕ

私はこの式をscipyのNewton-Krylovで数値的に解きましたが、収束することはありませんでした(実際、ヤコビアンの計算で常にエラーを報告します)。Newton-Krylovソルバーからfsolve(MINPACK hybrdに基づいています)に切り替えて、初めて動作しました!

ニュートン・クリロフが特定の問題にうまく適合しない一般的な理由はありますか?入力方程式を何らかの形で条件付けする必要がありますか?

コメントするにはもっと情報が必要なのかもしれませんが、なぜこの場合fsolveが機能したと思いますか?


Newton-Krylovがヤコビアンで失敗するのと同じ問題があり、メソッドを "lgmres"から単に "gmres"(sol = newton_krylov(func, guess, method='gmres'))に変更すると問題が修正されることがわかりました。正確な理由はわかりませんが、この問題を抱えている他の人が同じことを検討するかもしれません。
アーサーデント

回答:


18

あなたが遭遇する可能性が高い2つの問題があります。

病気の状態

まず、問題は悪条件ですが、残差のみを提供すると、Newton-Krylovは残差を有限差分することで有効桁の半分を捨ててヤコビアンのアクションを取得します。

J[バツ]yFバツ+ϵyFバツϵ

1016

有限差分はありませんが、同じ問題が準ニュートン法にも当てはまることに注意してください。非コンパクト演算子(微分方程式など)の問題に対するスケーラブルな方法はすべて、事前調整にヤコビアン情報を使用する必要があります。

fsolveヤコビアン情報を使用していないか、ドッグレッグ法またはシフトを使用して、「勾配降下」法を使用して進行している可能性があります。有限精度演算)。これはスケーラブルではなくfsolve、問題のサイズを大きくすると遅くなる可能性があります。

グローバリゼーション

線形問題が正確に解かれれば、線形問題(クリロフ)に関連する問題を除外し、非線形性に起因する問題に焦点を合わせることができます。極小および非平滑機能は収束を遅くするか停滞を引き起こします。Poisson-Boltzmannは滑らかなモデルであるため、十分な初期推定値から始めると、Newtonは二次的に収束します。ほとんどのグローバリゼーション戦略では、最終的な反復に対して高品質の初期推測を生成するために、何らかの継続が必要です。例には、グリッドの継続(例:フルマルチグリッド)、パラメーターの継続、および疑似過渡の継続が含まれます。後者は一般に定常状態の問題に適用可能であり、いくつかのグローバル収束理論を提供します。Coffey、Kelley、およびKeyes(2003)を参照してください。検索すると、この論文が表示されます。Shestakov、Milovich、and Noy(2002)擬似過渡継続と有限要素法を使用した非線形ポアソン-ボルツマン方程式の解。疑似過渡継続は、Levenberg-Marquardtアルゴリズムと密接に関連しています。

参考文献

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.