こんにちは。
前回はニュートン法について学んだので今回はPythonを使って簡単な実装をしましょう。
今回は

をニュートン法によって求めます。よって非線形方程式は
![Rendered by QuickLaTeX.com \[x^2 - 2 = 0\]](https://research.miidas.jp/wp-content/ql-cache/quicklatex.com-c73d2a294571b8fe67ca2d43d81e083f_l3.png)
となります。必要なのは微分なので

とすると
![Rendered by QuickLaTeX.com \[f'(x) =2x\]](https://research.miidas.jp/wp-content/ql-cache/quicklatex.com-3499040b9aa5e1c0f1a1389f0e7a8276_l3.png)
となります。
区間
![Rendered by QuickLaTeX.com [1,4]](https://research.miidas.jp/wp-content/ql-cache/quicklatex.com-88d9faa52fd0fd953570d1884be6c9ba_l3.png)
を考えるとこれは仮定を満たすので

から始めていきましょう。実行結果は以下です。

見にくいですねすいません。plotの技量を上げておきます(涙)。
ピンクの曲線が

です。黒線が

の直線です。そして

からニュートン法を始め、接線を順番に引いています。
最適解の更新の様子は次の通りです。
<
p style=”text-align: center;”>初期値 4
只今 2.25
只今 1.5694444444444444
只今 1.4218903638151426
只今 1.4142342859400734
収束 1.4142135625249321
「ひとよひとよにひとみごろ」でしたっけ?ちゃんと近づいてますね。ニュートン法がうまくいっているようです。
また、上の収束とはあらかじめこちらで設定していた範囲にxの更新幅が収まった時に表示させてます。(ループブレイクの条件です)
今回は簡単すぎましたが、ニュートン法は勿論、多次元にも使えます。僕の知ってる応用ではSVM(サポートベクターマシーン)の最適解を探す際にニュートン法を使った例があります。
ところで「微分」について少し考えてみましょう。今回、扱った関数は単純だったので幸い微分は容易でした。しかし、めちゃくちゃ複雑な関数を微分する必要が生じた時に自分の微分計算に自信をもてますか?また、微分自体どうすれば良いんや。。となった時困りますよね。実際僕はあまり計算が得意でないので微分が間違っていてもおかしくありません。。。次回はそんな問題の解決方法について紹介します。
指摘&アドバイスお願いします。