📏ニュートン法の仕様
ニュートン法(またはニュートン-ラフソン法)は、非線形方程式を数値的に解くための反復法です。
ニュートン法は特に効率的であり、適切な初期値から始めると、通常は速く収束します。
ということは、線形的な解法を非線形方程式に対して繰り返すことで、近似解を求められると理解していいですか?
以下に、一般的なニュートン法の疑似コードを示します。
この疑似コードでは、f(x) が解きたい方程式で、f′(x) はその導関数です。目的は、f(x)=0 となる x の値を見つけることです。
入力: f(x), f'(x) // 解きたい方程式とその導関数
x0 // 初期推測値
ε // 許容誤差(収束条件)
最大反復回数 N
手順:
1: 初期化: x = x0
2: for i = 1 to N do
3: y = f(x) // 現在の点での関数の値
4: y' = f'(x) // 現在の点での導関数の値
5: if |y'| == 0 then
6: 出力: "導関数が0になるため失敗"
7: 終了
8: end if
9: x_new = x - y / y' // 次の推測値を計算
10: if |x_new - x| < ε then // 収束判定
11: 出力: x_new // 解が見つかった
12: 終了
13: end if
14: x = x_new // 更新
15: end for
16: 出力: "収束しなかった"
とりあえず9のルートは3だな、それを割り算でやってみよう
https://editor.p5js.org/setapolo/sketches/loq0nqFmh
きゅ、求根すか
こ、これならできる気がする
なんとなくテイラー展開ぽい展開を見せている。石板はこー
とりあえずエクセルで割り出してみた、ソースも簡単に作れそうだ。
とりあえず平文で式を書くと
(1+2)/2=1.5
2/1.5 =1.3333..
(1.5+1.3333..)/2 = 1.41666...
こうやって見てみると除算を逆にするあたりベイズと関係がある気もしてくる。なんにせよこれであっているならループで求められるし、ループなら変数に値が保存できるプログラムのほうが便利で、これを道具化したくなる人の気持ちもわかる。
そのまま答えをみんな知っている9とかだとどうなるか
(1+9)/2=5
9/5=1.8
(1.8+5)/2 = 3.4
だんだんと3に近づいてくるので安心する。式はカッコイイ物をどこかで見つけてくるとして、手ごろなのでp5.jsで実装する。
よくわからないことが多いのでまだ配列を使わず変数もなるべくだぶらないようにして書いてみる
ニュートン法を簡単に試すことができるライブラリやツールはいくつか存在します。以下はその例です:
SciPy (Python):
SciPyの`optimize`モジュールには、ニュートン法を実装した`newton`関数が含まれています。
MATLAB:
MATLABでは、Optimization Toolboxを使用して`fzero`関数を使うことでニュートン法を試すことができます。ただし、`fzero`はニュートン法を含む複数の方法で根を見つける機能を持っています。
Julia:
Juliaの`Roots`パッケージには、ニュートン法を実装した`newton`関数が含まれています。
ニュートン法(またはニュートン・ラフソン法)は級数展開そのものではありませんが、テイラー級数の考え方を利用して非線形方程式を解くための数値的な方法です。
ニュートン法の基本的なアイディアは、関数f(x) の任意の点 x0 での接線を利用して、その関数が0となる点(つまり f(x)=0 となる点)を求めることです。接線とx軸との交点は、次の近似値 x1 として利用され、このプロセスが繰り返されることで、解に収束していきます。
この更新式の導出には、テイラー級数の最初の1つまたは2つの項を使用することで、関数 f(x) を近似することが関与しています。しかし、ニュートン法そのものは級数展開全体を使っているわけではありません。
要点としては、ニュートン法はテイラー級数の考え方を背景に持ちつつ、関数のゼロ点(根)を効率的に見つけるための数値的手法として開発されたものです。
お願い致します