• ベストアンサー

ニュートン法で解が収束しない

こんにちは。 差分式で表した非線形方程式をニュートン法で解いています。が収束しな解あります。ニュートン法は初期値に依存しているため、初期値を可変的にしてみましたがダメでした。何かいい方法はないでしょうか? 参考になるか分かりませんが、使っているプログラムのニュートン法の計算の一部は以下のようです。 call g(x,f,df) h=f/df x=x-h if(dabs(h/x)<1.d-14) then  return endif

質問者が選んだベストアンサー

  • ベストアンサー
回答No.7

z の値がないのですが、x → y, y → z と考えてよろしいですよね。 ニュートン法で計算してみると確かに収束しないですね。 与えられたパラメータを入れてグラフを書いてみると解はx = B の近傍にありました。これは図を描かなくても f の両辺を C で割ると分かります。 f/C=A/C*x - y*((cos(x)-cos(B))/(x-B))/C-z*((sin(x)-sin(B))/(x-B))/C + 1 右辺の第二項と第三項はいずれも x = B の近くでゼロに近い値となりますし、A/C * B はほとんど -1です。 で、この関数を見てみると x = B を境にして心電図の波形のように一旦跳ね上がってから潜り込み再び跳ね上がるような形をしています。ちょうど解が存在する辺りに変極点を複数持っています。この場合残念ながらニュートン法ではうまく収束しません。 また、(cos(x)-cos(B))/(x-B) や (sin(x)-sin(B))/(x-B) は式の上ではx → B の極限で -sin(B) と cos(B) に収束するのですが、数値計算上はゼロで割ることになるので値が不定となります。 解の近くに変極点が複数あること、解の近くで関数の計算自体が困難であることから、この関数に対してニュートン法は適していないと思います。 これだけではあまり前向きのアドバイスにならないので、一言付け加えるとすると、もし解が x = B の近くにあることが前もって分かっているならば、x=Bの近傍で展開した式 f = A*x + y * sin(B) - z * cos(B) + C を使うという手があります。この場合は手計算で解けちゃいますね。

YuKelly
質問者

お礼

ご回答ありがとうございます。 ご指摘のとおり、x→y、y→zです。失礼しました。 今回の多くのアドバイスによりニュートン法の性質を理解することができました。 今後の勉強に役立てて行きたいと思います。 長い間本当にありがとうございました。

その他の回答 (6)

回答No.6

関数の情報ありがとうございます。試しにこちらでも計算してみますから、収束しない場合の A, B, y, z の具体的な値を一組教えてください。

YuKelly
質問者

補足

お忙しいところ何度もありがとうございます。 関数を少しだけ訂正させていただきます。 f=A*x-y*((cos(x)-cos(B))/(x-B))-z*((sin(x)-sin(B))/(x-B))+C で、第1項のxに係数をつけただけです。パラメータが、 A=100.0、B=1.22995195D-08、C=-1.24229252D-06 x=1.0、y=7.87169249D-09 の場合収束しませんでした。ですがパラメータが、 A=100.0、B=1.00699949D-08、C=-1.01710309D-06 x=1.0、y=6.44479672D-09 のときは収束しました。 手間をおかけして申し訳ないですが、よろしくお願いいたします。

回答No.5

>二分法で出した解を初期値としてニュートン法を適応してみましたが、やはり収束しませんでした。 それはなかなか大変ですねぇ。他にやるとしたら単純にx=x-hとせずにx=x-alpha*hとでもして0<alpha<=1の範囲でfの絶対値が小さくなるようなalphaの一次元探索をしてxを決めていく手があります。 >もともとこの関数はニュートン法では収束しない性質があるのでしょうか?もしまだ解決策がありましたらよろしくお願いいたします。 方程式g(x,f,df)を見てみないことには関数の性質がどうであるとか解決策があるのかどうかは言えません。よろしければここに式を書いてください。

YuKelly
質問者

補足

三度ご回答ありがとうございます。 関数g(x、f、df)は一般的に表すと、 f=x-y*((cos(x)-cos(A))/(x-A))-z*((sin(x)-sin(A))/(x-A))+B で、少し簡略化しました。 A、Bは定数、ニュートン法で求めたいのはxです。yとzも本来は変数ですが、ここでは定数扱いです。 何度も何度も申し訳ありません。

回答No.4

>二分法で確認したところ、解くことができました。 >今後の応用も考えてニュートン法でも解けるようにし>たいと思っているので、何かいい方法ありましたらア>ドバイスお願いいたします。 具体的な関数の形が分からないと原因に関してやはり正確なことは言えないのですが、私ならば二分法を何回か用いて出したラフな精度の解をニュートン法の初期値として用いて精度を上げます。経験上ほぼ間違いなく収束します。

YuKelly
質問者

補足

再度ご回答ありがとうございます。 二分法で出した解を初期値としてニュートン法を適応してみましたが、やはり収束しませんでした。 もともとこの関数はニュートン法では収束しない性質があるのでしょうか?もしまだ解決策がありましたらよろしくお願いいたします。

回答No.3

解いている非線形方程式を書いていただけると一発で答えられます。 まずは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 とでもしましょう。

YuKelly
質問者

補足

ご回答ありがとうございます。 解いている方程式はとても複雑で、実は連立非線形方程式を差分法を使って解いています。しかし今求めようとしている方程式g(x,f,df)の解が求まれば、他の方程式の解も求まってくる連立方程式になっています。(意味が分からなかったらすみません)そのため連立のニュートン法は使っていません。正確には使いましたがやはり収束しない所がありました。 二分法で確認したところ、解くことができました。 今後の応用も考えてニュートン法でも解けるようにしたいと思っているので、何かいい方法ありましたらアドバイスお願いいたします。

noname#108554
noname#108554
回答No.2

解が存在するのはまちがいないんですか? x^2+1=0をニュートン法で解くと、いつまでもふらつきますよね。

YuKelly
質問者

補足

ご回答ありがとうございます。 解が存在することはエクセルで確認したので、間違いなくあると思います。

  • First_Noel
  • ベストアンサー率31% (508/1597)
回答No.1

これを見ると-14乗以下で収束ですよね, 変数は倍精度で宣言されていますか?

YuKelly
質問者

補足

さっそくのご回答ありがとうございます。 変数は全て暗黙の倍精度で定義しています。 収束条件を-6乗程度にしても収束しない場合がありした。

関連するQ&A

  • ニュートン法

    excelVBAを使っています。 ニュートン法を使って3次方程式を解こうとしています。 例題)x^3-6x^2+11x-6=0    x=1,2,3 初期値x0によって、解がx=1,2,3のどれかに収束します。 ここで、全ての実数解を求める考え方をご教授下さい。 f(x)=x^3-6x^2+11x-6=0の解x1が求まった後、 f(x)=(x-x1)g(x)なるg(x)を求めるといったことが、あるサイトに書かれてあったのですが、なぜそうなるのか理解できません・・・

  • ニュートン法

    こんにちは。 aを解とするある非線形方程式に,aの近傍の値x0を初期値としてニュートン法を一反復だけ適用したところ、誤差は |x0-a|=10^-4から|x1-a|=10^-7に減少した。このとき、ニュートン法をもう一反復適用したら誤差|x2-a|はどの程度になると推定されるのでしょうか?

  • ニュートン法の1次収束

    y=(x+10)(x-1)^3 に初期点を3にしてニュートン法をすると1に収束するものの 1次収束性しか出ないという事でしたがこれは y=(x+10)(x-1)^2 の場合でもおなじ事でしょうか?

  • ニュートン法の収束性について

    http://maya.phys.kyushu-u.ac.jp/~knomura/education/numerical-physics/text1/node5.html ニュートン法は2次収束すると習ったのですが これはどんな関数でも2次収束すると言って 良いのでしょうか? 実際にプログラムを組んでみて y=X^4+7X^3-27X^2+29X-10 の収束性について調べてみました。 この関数は1で重解をもつので初期点を3にして 試してみた所1次収束性は確認できたのですが 2次収束性は確認できませんでした。 これはプログラム上のミスでしょうか? それともニュートン法の2次収束性は全ての関数には いえないものなのでしょうか?

  • ニュートン法の問題がどうしてもわからないので教えてください。

    非線形方程式の解を求めるアルゴリズムのひとつに、ニュートン法と呼ばれる方式がある。この方法ではf(x)=0の解の近似値を次の漸化式から求める。 x_(i+1) =x_i - f(x_i)/f'(x_i) なぜこのアルゴリズムで解を得られるのかをf(x)=x^2 - e^x -2 =0 を例に説明せよ。 という問題です。 どなたかわかる方がいたらお願いします。

  • ニュートン法の計算について

    3次方程式 X^3+3X^2-3X-4=0 は区間(-4,-3),(-1,0),(1,2)にそれぞれ1つの実数解をもつ。ニュートン法により、3つの実数解を小数点以下8桁まで正確に求めよ。 上の問題をニュートン法で解きたいのですが、初期値はどうすればいいのでしょうか? -4、-1、1 でいいのでしょうか? 初期値を決めれば、あとは3つの初期値を使って普通にニュートン法で計算すれば解けますよね?? 数学が苦手で困っています。 回答お願いします。

  • ごく限られた条件においてニュートン法で収束しません

    未知数が3つの非線形連立方程式をニュートン・ラフソン法で解いています。しかし、ごく限られた条件において、添付図の赤プロットように誤差が減っては増えるを繰り返し、収束しきい値に及びません。すぐ隣の条件では青プロットのように問題なく収束します。 本問題の解決策として、識者の方より、非線形方程式が不連続にならないように弱いばねを与えることを教わり、それによって収束しない範囲は激減しましたが、それでもごく一部残っている状況です。 なお、連立3元1次方程式の解法は掃き出し法で行っています(ピボット操作しています)。 解決策をご存じの方、また同様なご経験をお持ちの方がおられましたら、お知恵をお借りしたく、よろしくお願いいたします。

  • ニュートン法でのプログラミング

    ニュートン法を用いてf(x)=X^2-2の正の解を求めなさい。 また、反復回数が増えるにしたがって解が収束していく様子を表示しなさい。 という問題なのですが、いくら反復回数を増やしても誤差がでてしまい、うまくいきません。このプログラミング解いていただきたいです。よろしくお願いします。

  • ニュートン法、2分法について

    ニュートン法、2分法について質問があります。 この二つの長所と短所はなんですか? ニュートン法はf'が0のとき解に収束しないのがわかりましたがほかにもありますか こういう場合はこっちのほうがすぐれているなどがありましたらお願いします。

  • 反応拡散方程式の定常解について

    反応拡散方程式 dU/dt = f(U,V)+ΔU dV/dt = g(U,V)+ΔV (fとgは非線形な関数でΔは空間1次元のラプラシアン) には、条件が整えば空間的に非一様な定常解(時間変化しない解) が存在します。 このような空間非一様性を満たす定常解 0 = f(U,V)+ΔU 0 = g(U,V)+ΔV をノイマン境界条件のもとで数値的に求めようとして、 ラプラシアン(Δ)を離散化した次の連立方程式 0 = f( U<i>, V<i> ) + [U<i+1>-2U<i>+U<i-1>]/h^2 0 = g( U<i>, V<i> ) + [V<i+1>-2V<i>+V<i-1>]/h^2 (i=0~N) をニュートン法で解いてみました。 結果、 初期値(u(x)とv(x)の形)によってはまぐれで空間非一様な定常解らしき状態に収束することがあるのですが、ほとんどの場合発散してしまうか、一様な解(u(x)=0,v(x)=0)に収束してしまいます。1000回ほどランダムに初期値を変えて試行したところ空間非一様<らしき>解に収束したのはたった数回でした。また、離散格子点を多くとった場合(例えばN=200)には、まったく収束しなくなりました。直感では、初期値さえうまくとれば収束しそうな気がしたのですが、、 質問:  上の反応拡散方程式のような非線形連立偏微分方程式の定常解を、数値的に求める手段というのはあるのでしょうか? アドバイスよろしくお願いします。