• 締切済み

二分法、定点法、ニュートン法の比較

KappNetsの回答

  • KappNets
  • ベストアンサー率27% (1557/5688)
回答No.1

私はしばしばこの手の計算で悩んだ経験があります。悩んだのは簡単なn次式と指数関数をたし合わせ、さらに全体のルートを取ったような関数です。xの途中で関数の傾きが大きく変化するのです。 ニュートン法の欠点は (1) 収束しないで振動することがある。 (2) 大体求まった後で最後の詰めのところでなかなか収束しない。 (3) 微分が面倒。 などでしょうか。どろくさい方法で逃げたりもしましたが、結局はうまくやればニュートン法は非常によい方法という結論でした。対策の主なものは (1) Excelのように出来るだけ有効数字の大きいソフトを用いる。Excelの場合有効数字は15桁ですね。 (2) 最初の出発(仮定)値をしっかり決める。場合によっては近似解をベースに最初の値を条件によって変える。 (3) 微分の解析式はMathematicaを使うと簡単に求まります。学校以外では高価なソフトですが。 (4) ルートを取るか取らないかでも計算時間・精度は変わる。f^0.5=0とf=0は等価ですから、ルートをとらないでも済むなら取らない。 (泥臭い方法:微分がどうしても面倒なときはとりあえず f'= (f(x+0.001)-f(x))/0.001 で計算する。0.001 のままでは精度が足りない時は適宜小さくする。) (もっと泥臭い方法:xとx+0.001でfを計算して、そこから次はどうするか比例計算で推定する。ただし決してxを大きく変化させない) ニュートン法ではどうもダメだという時は一時的に他の方法もよいかと思います。ただ論文の値打ちとしては計算速度も早い必要があり、私の場合ニュートン法で何とかn<10(?)で収束するよう出来るだけ粘りました。関数のクセに習熟すると何とかなるものです。

参考URL:
http://akita-nct.jp/yamamoto/lecture/2004/5E/test_2/summarize/html/node6.html
ryujin_aug
質問者

お礼

回答ありがとうございます。 ニュートン法はやはり速く収束するのですね。微分さえ手計算で早く出ればずいぶん楽なのですが・・・。 一つ加えて質問なのですが、複数解あるときには定点法、二分法、ニュートン法ともどの解に収束するか分からないと思うのですが、複数解を求める場合のコツ、あるいはどの方法がBestなどあるのでしょうか。 よろしくお願いします。

関連するQ&A

  • ニュートンラフソン法について

    ニュートンラフソン法についての質問です。ニュートンラフソン法を利用するプログラム課題は理解できるのですが、別の問題の一つである次の問題をどう考えていけばよいのかわからないです。 「次の連立方程式f(x,y)=0、g(x,y)=0に対するニュートンラフソン法の反復公式を誘導せよ。」  参考書を調べますと一般のニュートンラフソン法はテーラー展開を用いて証明しているので、これも何らかの形でテーラー展開を利用するのではないかと思いますが、そこから先へ進めなくて困っています。よろしければどなたかコメントお願いいたします。

  • 多次元のニュートン・ラフソン法について

    質問させてもらいます。 二次元のニュートン・ラフソン法は理解したつもりなのですが。 f(x,y,z)=2x^2+y^2+z^2 の式が与えられた時、 この場合ニュートンラフソン法はどのように式として示し、証明にいたればいいのでしょうか? ニュートンラフソン法の考え方を踏襲するのであれば、 x成分、y成分、z成分の各成分について考えればいいのでしょうか? 多くの例題では二変数の連立方程式で…… とかかれてますが、 適用できない気がするのですが……?

  • ニュートン・ラプソン法?

    数値解析の授業で 平方根Aの近似式 r1=(A/r0+r0)/2.0 A=3,誤差0.0000001とする という数式を与えられました。 これをC言語でプログラムして実行結果を表示させて 理論をかかなきゃいけないのですが、 先生がちらっとこの式はニュートン・ラプソン法を応用したら出てくると言ったんです。 それで本を調べてみたのですがどういう風にしたらこの式が出てくるのかわかりません。 これはニュートン・ラプソン法をどのように応用したら出てくる式なのでしょうか?

  • ニュートン法に関して

    数値計算初心者です。数値計算で分からないことがあるので質問します。よろしくお願いします。 y=f(x,a)という関数があってパラメータaを非線形最小2乗法のニュートン法やマルカート法を使って求めたいのですが、計算過程でf(x)を各パラメータで偏微分してヤコビ行列を求める必要があると思われます。 例えばf(x)が複雑な関数で偏微分するのに困難な関数であった場合、 偏微分をしなくてΔxを決定するにはどのような方法があるのでしょうか?

  • ニュートン法について

    ニュートン法について 3次方程式x^3-30x^2+200x=0は0,10,20を根とする。 このことを使って、ニュートン法を1回用いることにより、x^3-30x^2+200x+1=0の根で10に近いものの近似値を求めよ。 ちなみにニュートン法は「aがf(a)=0の根に十分近ければ、a-f(a)/f’(a)は更に精密な近似値となる」です。 数学に詳しい方に答えていただけると幸いです。 宜しくお願いいたします。

  • ニュートン法

    ニュートン法の問題です。 全平面で正則な複素関数f(z)=u(x,y)+i*v(x,y)(z=x+iy) の零点を求めるニュートン法は z(k+1)=z(k)-f(z(k))/f'(z(k)) ですが、 これは2元連立方程式 u(x,y)=0 v(x,y)=0 を解くニュートン法と等価であることを示せ という問題です。 とっかかりからわからないのですが、複素関数の微分の表現の仕方がわからないのと、u(x,y)=0のように2変数でしかも、抽象的に書かれるとニュートン法がわかりにくくなっているという点で困っています。 分かる方、解説よろしくお願いします。

  • ニュートンラフソン法のプログラミングの問題……

    今年、工学基礎という新しくできた講義の中でC言語でのプログラミングを学ぶ事になったんですが… 普通高校出身の自分は専門の勉強についていけず落ちこぼれてます。 自学自習を重ねていますが毎回出される課題にギリギリついていける状態でした。 が、ついにきてしまいましたね………。 『それでは、今回の課題は……、実根をニュートンラフソン法で求めるプログラミングを作ってきてください。』 今までは、テキストに参考になるヒントが載っていたのですが、今回は天から見放された感が(涙) しかも明後日の朝一での課題提出。 自分でも必死に参考書かき集めて探してますが、全く参考書になる資料がなく困ってます。 そこでお手数ですがプログラミングを教えてくれませんか? あと、参考になるテキストとかも教えてもらえれば幸いです。 誠に勝手ながらお願いしますm(_ _)m       次のf(x)=0の実根をニュートン・ラフソン法で求めるCプログラムを作成せよ。 f(x)=x^3-x-6 初期値や収束判定に必要な定数などは#defineを使ってプログラム中で設定し、それらの値を答と共にわかりやすく出力すること。 したがって、プログラム中に入力用関数scanfなどを含めないこと。 なおf'(x)の値はf(x)を手で微分した導関数にxを代入して関数値として求める。 すなわち、当レポートでは数値微分を使う必要はない。

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

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

  • 差分法とオイラー法の違いについて

    最近微分方程式の数値解析について学びだした者です。 微分方程式の数値解法として差分法とオイラー法があると思うのですが、この2つの違いや互いの位置づけはどうなっているのでしょうか? また、差分法には風上法などがありますが、これらとオイラー法の位置づけについても教えていただきたいです。 できればこれら近辺の全体的な体系について教えていただけるとうれしいです。よろしくお願いします。

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

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