もう一度(これでだめな時は更新してください。) : 新しいNと場所で描き直します。
極値を求めるニュートン法の図(2010年2月7日公開、2010年06月03日08:16:04第1回の改訂)
●注意
上はJAVAで作られています。メモリを大量に使ったり、重くなるかもしれません。その時は、ごめんなさい。
実行後に画面をスクロールしたり、アプレット全体が画面に入ってないと、間違った画面になるかもしれないので、気をつけてください。画面の大きさを決めてから”もう一度”をクリックするか、更新(reload)してください。
ニュートン法は
x_(i+1)=x_i-f(x_i)/f'(x_i)
の式を利用した反復法です。x_0の値によって収束の仕方が変わるようです。
ここでは、Newton法を用いてf'(x)=0となる解x*を求めるときの収束の仕方を図示しています。反復法の式は、
x_(i+1)=x_i-f'(x_i)/f''(x_i)
初期値x0は適当に設定されています。f'(x*)が0になっていれば収束していることをあらわします。
ニュートン法を使うときには、f'(x), f''(x)の計算をしなくてはいけませんが、厳密な値を計算するのは面倒なので、ここでは、とても小さいhを使って、
f'(x)={f(x+h)-f(x)}/h
f''(x)={f'(x+h)-f'(x)}/h={f(x+2*h)-2*f(x+h)+f(x)}/(h^2)
としています。(本来の微分の定義からすると、f'(x)=lim_{h→0}{f(x+h)-f(x)}/h なので、hを思いっきり小さくしたくなるのですが、コンピュータの計算では桁落ちの問題などのために、やたらに小さくすると、収束しなくなってしまうことがあるようです。ここでは、h=10^(-6)としていますが、適当にチューニングした結果そうなりました。10^(-8)とか10^(-10)では収束しずらくなってしまうのだから、面白いですねぇ。。。)
最大反復回数は10000にしています。f(x)の大きさがepsより小さくなると反復をやめるようになっています。
もう説明の順番がめちゃくちゃなのですが、白い線はf(x)、緑の線はf'(x)をあらわします。ときどきf(x)の内容によっては、緑の線が白線に上書きされてしまいます。
x0は初期値、f(x0)はx0でのf(x)の値、f(x*)は求めたあるいは最後に決まったx*でのf(x*)の値。収束している場合には、f(x*)が極小値、または極大値になります。f(x0)と値を比較すれば、どの程度改善したか、変化したかが評価できます。
●参考文献
有本卓著、コロナ社、数値解析(1)
川上一郎著、岩波書店、数値計算
●プログラムのダウンロード
○Java(newtonm2.java)
ご意見、ご感想、お問い合わせ、お願い等がございましたら、お気軽に、
メール送信フォームからメールを送るか、
●掲示板に書き込むか、
どちらかお好きな方法で、ご連絡お願いいたします。
●大山崇のホームページの利用について
●大山崇のホームページ