質問: ニュートン法で解が収束しない こんにちは。 差分式で表した非線形方程式をニュートン法で解いています。が収束しな解あります。ニュートン法は初期値に依存しているため、初期値を可変的にしてみましたがダメでした。何かいい方法はないでしょうか? 参考になるか分かりませんが、使っているプログラムのニュートン法の計算の一部は以下のようです。 call g(x,f,df) h=f/df x=x-h if(dabs(h/x)<1.d-14) then return endif
回答: 解いている非線形方程式を書いていただけると一発で答えられます。 まずはno.2の方がおっしゃってるように解があるかどうかを確認しましょう。そういう時には、収束は遅いですが(最近の計算機は十分速いのでよほど時間のかかる計算を走らせるのではない限り十分だと思いますが)、二分法を使えば便利です。 あるいは解が x=0 だったら収束しないですよ。 その時は、 if ((dabs(x)>=1.d0.and.dabs(h/x)<1.d-14).or. (dabs(x)<1.d0.and.dabs(h)<1.d-14)) then return endif とでもしましょう。