← 戻る ライブラリ › 応用数学と計算数学 › 数値解析学 応用数学と計算数学
方程式の近似解法 二分法やニュートン法のように、コンピュータが1ステップずつ計算できる根を求める数値解法。
直観 直感:根の近くを拡大する 方程式 f ( x ) = 0 f(x)=0 f ( x ) = 0 の根 r r r を求めたいが、r r r を厳密に与える代数的な公式が存在しない場合を考える。数値解法は、一歩ごとに r r r へとますます近づく推測の列 x 0 , x 1 , x 2 , … x_0, x_1, x_2,\dots x 0 , x 1 , x 2 , … を構成する。これは f f f のグラフを、横軸と交わる点に向かって繰り返し拡大することで、正しい小数桁をどんどん読み取れるようになるのとよく似ている。以下の3つの方法は、現在の推測値 x n x_n x n を次のより良い推測値 x n + 1 x_{n+1} x n + 1 に変える巧妙さの点だけが異なる。
割線の刻み幅 h h h を0に近づけると、それが x 0 x_0 x 0 における傾き f ′ ( x 0 ) f'(x_0) f ′ ( x 0 ) の接線に一致していく様子が見られる:これはニュートン法が次の推測値 x 1 = x 0 − f ( x 0 ) f ′ ( x 0 ) x_1 = x_0 - \dfrac{f(x_0)}{f'(x_0)} x 1 = x 0 − f ′ ( x 0 ) f ( x 0 ) へと下っていく際にたどる接線そのものであり、より粗い割線の傾き f ( x 0 + h ) − f ( x 0 ) h \dfrac{f(x_0+h)-f(x_0)}{h} h f ( x 0 + h ) − f ( x 0 ) ではない。 大学 定義:3つの求根法 定義: 二分法
連続関数 f f f が区間 [ a , b ] [a,b] [ a , b ] 上で f ( a ) f ( b ) < 0 f(a)f(b)<0 f ( a ) f ( b ) < 0 を満たすなら、中間値の定理により内部に根の存在が保証される。二分法は各ステップでこの区間を半分にする:中点 c = a + b 2 c=\dfrac{a+b}{2} c = 2 a + b を計算し、f ( c ) f(c) f ( c ) を評価し、符号が変わっている方の半分を残して繰り返す。
∣ x n − r ∣ ≤ b − a 2 n + 1 |x_n - r| \le \dfrac{b-a}{2^{n+1}} ∣ x n − r ∣ ≤ 2 n + 1 b − a ∣ x n − r ∣ ≤ b − a 2 n + 1 |x_n - r| \le \dfrac{b-a}{2^{n+1}} ∣ x n − r ∣ ≤ 2 n + 1 b − a は第 n n n 番目の中点 x n x_n x n が真の根 r r r からどれだけ離れうるかを示す。区間の幅 L = b − a L=b-a L = b − a は各ステップで半分になるため、最悪の誤差も半分になり、わずか n = 4 n=4 n = 4 回のステップの後には不確かさは L / 32 L/32 L /32 まで縮む。この保証された予測可能な縮小率こそが二分法の魅力である——遅いものの、収束に失敗することは決してない。
定義: ニュートン法
ニュートン法は x n x_n x n 付近の曲線をその接線 y = f ( x n ) + f ′ ( x n ) ( x − x n ) y=f(x_n)+f'(x_n)(x-x_n) y = f ( x n ) + f ′ ( x n ) ( x − x n ) で置き換え、その接線が0と交わる点を次の推測値 x n + 1 x_{n+1} x n + 1 とすることで、反復式 x n + 1 = x n − f ( x n ) f ′ ( x n ) x_{n+1} = x_n - \dfrac{f(x_n)}{f'(x_n)} x n + 1 = x n − f ′ ( x n ) f ( x n ) を得る。各ステップで導関数 f ′ f' f ′ が必要だが、うまく機能すれば二分法よりはるかに速く収束する。
x n + 1 = x n − f ( x n ) f ′ ( x n ) x_{n+1} = x_n - \dfrac{f(x_n)}{f'(x_n)} x n + 1 = x n − f ′ ( x n ) f ( x n ) 第三の視点は両者を統一する:方程式を、ある関数 g g g についての不動点問題 x = g ( x ) x=g(x) x = g ( x ) として書き直し、f f f の根が g g g の不動点になるようにして、任意の x 0 x_0 x 0 から反復 x n + 1 = g ( x n ) x_{n+1} = g(x_n) x n + 1 = g ( x n ) を行う。二分法もニュートン法も、g g g の選び方が異なるだけの、この考え方の特別な場合である。
3つの求根法の比較 方法 反復式 収束の位数 必要条件 二分法 c = a + b 2 c=\dfrac{a+b}{2} c = 2 a + b 線形(1 1 1 ) f f f が連続、f ( a ) f ( b ) < 0 f(a)f(b)<0 f ( a ) f ( b ) < 0 ニュートン x n + 1 = x n − f ( x n ) f ′ ( x n ) x_{n+1} = x_n - \dfrac{f(x_n)}{f'(x_n)} x n + 1 = x n − f ′ ( x n ) f ( x n ) 2次(2 2 2 ) f f f が2回微分可能、f ′ ( r ) ≠ 0 f'(r) \ne 0 f ′ ( r ) = 0 、x 0 x_0 x 0 が r r r に近い不動点反復法 x n + 1 = g ( x n ) x_{n+1} = g(x_n) x n + 1 = g ( x n ) 一般に線形(1 1 1 ) r r r の近くで ∣ g ′ ( x ) ∣ ≤ L < 1 |g'(x)| \le L < 1 ∣ g ′ ( x ) ∣ ≤ L < 1
大学 重要な定理 f f f が [ a , b ] [a,b] [ a , b ] 上で連続で f ( a ) f ( b ) < 0 f(a)f(b)<0 f ( a ) f ( b ) < 0 を満たすとする。このとき二分法は中点 x n = a n + b n 2 x_n=\dfrac{a_n+b_n}{2} x n = 2 a n + b n を生成し、[ a , b ] [a,b] [ a , b ] 内のある根 r r r に対して x n → r x_n \to r x n → r が成り立ち、n n n 回目の誤差は ∣ x n − r ∣ ≤ b − a 2 n + 1 |x_n - r| \le \dfrac{b-a}{2^{n+1}} ∣ x n − r ∣ ≤ 2 n + 1 b − a を満たす。
なぜ正しいのか? 各ステップは根を縮んでいく箱の中に閉じ込め、常に根を含みながら1点へと縮んでいく箱は、その根そのものへと縮まなければならない。
証明 ステップ1(不変量)。a 0 = a a_0=a a 0 = a 、b 0 = b b_0=b b 0 = b とする。ステップ n n n において、不変量 f ( a n ) f ( b n ) < 0 f(a_n)f(b_n)<0 f ( a n ) f ( b n ) < 0 、すなわち根が [ a n , b n ] [a_n,b_n] [ a n , b n ] のどこかに閉じ込められていることを維持する。これは仮定により最初は成り立つ。[ a n , b n ] [a_n,b_n] [ a n , b n ] から中点 x n = a n + b n 2 x_n=\dfrac{a_n+b_n}{2} x n = 2 a n + b n を計算し f ( x n ) f(x_n) f ( x n ) を評価する:それが f ( a n ) f(a_n) f ( a n ) と反対の符号なら a n + 1 = a n , b n + 1 = x n a_{n+1}=a_n,\ b_{n+1}=x_n a n + 1 = a n , b n + 1 = x n とし、そうでなければ a n + 1 = x n , b n + 1 = b n a_{n+1}=x_n,\ b_{n+1}=b_n a n + 1 = x n , b n + 1 = b n とする(f ( x n ) = 0 f(x_n)=0 f ( x n ) = 0 がちょうど成り立てば x n x_n x n が根そのものであり、処理は終了する)。いずれにせよ再び f ( a n + 1 ) f ( b n + 1 ) < 0 f(a_{n+1})f(b_{n+1})<0 f ( a n + 1 ) f ( b n + 1 ) < 0 となるので、不変量は帰納法により保たれる。
ステップ2(幅の縮小)。構成により新しい各区間は前の区間のちょうど半分なので、すべての n ≥ 0 n \ge 0 n ≥ 0 について b n − a n = b − a 2 n b_n-a_n = \dfrac{b-a}{2^n} b n − a n = 2 n b − a が成り立つ。根 r r r は各ステップで [ a n , b n ] [a_n,b_n] [ a n , b n ] の中にあり(ステップ1より)、中点 x n x_n x n も [ a n , b n ] [a_n,b_n] [ a n , b n ] の中にあるので、両者は幅 b − a 2 n \dfrac{b-a}{2^n} 2 n b − a の同じ区間内にあり、これだけで ∣ x n − r ∣ ≤ b − a 2 n |x_n - r| \le \dfrac{b-a}{2^n} ∣ x n − r ∣ ≤ 2 n b − a が成り立つ;もう少し精密に数える(中点からどちらかの端点までを測る)と述べられた限界 ∣ x n − r ∣ ≤ b − a 2 n + 1 |x_n - r| \le \dfrac{b-a}{2^{n+1}} ∣ x n − r ∣ ≤ 2 n + 1 b − a が得られる。
ステップ3(収束)。n → ∞ n\to\infty n → ∞ のとき b − a 2 n + 1 → 0 \dfrac{b-a}{2^{n+1}} \to 0 2 n + 1 b − a → 0 なので、ステップ2による挟み込みにより x n → r x_n \to r x n → r が強制される。この部分では、最初の符号条件を超える f f f の連続性すら不要である——それが必要なのは、そもそも [ a , b ] [a,b] [ a , b ] の内部に根が存在することを保証するため、すなわちステップ0で適用される中間値の定理のためだけである。
r r r の近くで f f f が2回連続微分可能で f ′ ( r ) ≠ 0 f'(r) \ne 0 f ′ ( r ) = 0 を満たすとする。このとき r r r のある近傍が存在し、ニュートン反復がその内部から始まれば、反復列は r r r に収束し、ある定数 C = max ∣ f ′ ′ ∣ 2 min ∣ f ′ ∣ C=\dfrac{\max|f''|}{2\min|f'|} C = 2 min ∣ f ′ ∣ max ∣ f ′′ ∣ (最大値と最小値はその近傍上でとる)に対して ∣ x n + 1 − r ∣ ≤ C ∣ x n − r ∣ 2 |x_{n+1}-r| \le C\,|x_n-r|^2 ∣ x n + 1 − r ∣ ≤ C ∣ x n − r ∣ 2 を満たす。
なぜ正しいのか? 接線は滑らかな曲線に対して非常に良い近似であるため、その誤差はすでに進んだ距離の2乗に比例し、正しい桁数は次のステップでほぼ倍になる。
証明 ステップ1(現在の推測値のまわりでテイラー展開する)。f f f が2回微分可能なので、ラグランジュ剰余項付きテイラーの定理により、ある ξ n \xi_n ξ n between x n x_n x n and r r r に対して f ( r ) = f ( x n ) + f ′ ( x n ) ( r − x n ) + 1 2 f ′ ′ ( ξ n ) ( r − x n ) 2 f(r) = f(x_n) + f'(x_n)(r-x_n) + \tfrac12 f''(\xi_n)(r-x_n)^2 f ( r ) = f ( x n ) + f ′ ( x n ) ( r − x n ) + 2 1 f ′′ ( ξ n ) ( r − x n ) 2 が成り立つ。剰余項が2次誤差全体を担うため、これは近似ではなく厳密な等式である。
ステップ2(根の条件を代入する)。f ( r ) = 0 f(r)=0 f ( r ) = 0 なので左辺は消え、0 = f ( x n ) + f ′ ( x n ) ( r − x n ) + 1 2 f ′ ′ ( ξ n ) ( r − x n ) 2 0 = f(x_n) + f'(x_n)(r-x_n) + \tfrac12 f''(\xi_n)(r-x_n)^2 0 = f ( x n ) + f ′ ( x n ) ( r − x n ) + 2 1 f ′′ ( ξ n ) ( r − x n ) 2 が残る。両辺を f ′ ( x n ) f'(x_n) f ′ ( x n ) (r r r の近くでは f ′ ( r ) ≠ 0 f'(r) \ne 0 f ′ ( r ) = 0 かつ f ′ f' f ′ が連続なのでゼロでない)で割ると r − x n r - x_n r − x n が分離され、0 = f ( x n ) f ′ ( x n ) + ( r − x n ) + f ′ ′ ( ξ n ) 2 f ′ ( x n ) ( r − x n ) 2 0 = \dfrac{f(x_n)}{f'(x_n)} + (r-x_n) + \dfrac{f''(\xi_n)}{2f'(x_n)}(r-x_n)^2 0 = f ′ ( x n ) f ( x n ) + ( r − x n ) + 2 f ′ ( x n ) f ′′ ( ξ n ) ( r − x n ) 2 となる。
ステップ3(ニュートンのステップを認識する)。整理すると r − ( x n − f ( x n ) f ′ ( x n ) ) = − f ′ ′ ( ξ n ) 2 f ′ ( x n ) ( r − x n ) 2 r - \left(x_n - \dfrac{f(x_n)}{f'(x_n)}\right) = -\dfrac{f''(\xi_n)}{2f'(x_n)}(r-x_n)^2 r − ( x n − f ′ ( x n ) f ( x n ) ) = − 2 f ′ ( x n ) f ′′ ( ξ n ) ( r − x n ) 2 。左辺の括弧はまさにニュートンの更新 x n + 1 x_{n+1} x n + 1 であるから、e n = x n − r e_n = x_n - r e n = x n − r を用いてこれは r − x n + 1 = − f ′ ′ ( ξ n ) 2 f ′ ( x n ) e n 2 r - x_{n+1} = -\dfrac{f''(\xi_n)}{2f'(x_n)}\,e_n^2 r − x n + 1 = − 2 f ′ ( x n ) f ′′ ( ξ n ) e n 2 、すなわち e n + 1 = − f ′ ′ ( ξ n ) 2 f ′ ( x n ) e n 2 e_{n+1} = -\dfrac{f''(\xi_n)}{2f'(x_n)}\,e_n^2 e n + 1 = − 2 f ′ ( x n ) f ′′ ( ξ n ) e n 2 と書ける。
ステップ4(定数を評価する)。絶対値をとり ∣ f ′ ′ ( ξ n ) ∣ |f''(\xi_n)| ∣ f ′′ ( ξ n ) ∣ と 1 / ∣ f ′ ( x n ) ∣ 1/|f'(x_n)| 1/∣ f ′ ( x n ) ∣ をその近傍上での極値 max ∣ f ′ ′ ∣ \max|f''| max ∣ f ′′ ∣ と 1 / min ∣ f ′ ∣ 1/\min|f'| 1/ min ∣ f ′ ∣ で評価すると、C = max ∣ f ′ ′ ∣ 2 min ∣ f ′ ∣ C=\dfrac{\max|f''|}{2\min|f'|} C = 2 min ∣ f ′ ∣ max ∣ f ′′ ∣ により ∣ x n + 1 − r ∣ ≤ C ∣ x n − r ∣ 2 |x_{n+1}-r| \le C\,|x_n-r|^2 ∣ x n + 1 − r ∣ ≤ C ∣ x n − r ∣ 2 が得られる。C ∣ x 0 − r ∣ < 1 C\,|x_0-r| < 1 C ∣ x 0 − r ∣ < 1 となれば、この漸化式は ∣ x n − r ∣ |x_n - r| ∣ x n − r ∣ を 0 0 0 へと縮ませ収束を証明し、∣ x n + 1 − r ∣ ≤ C ∣ x n − r ∣ 2 |x_{n+1}-r| \le C\,|x_n-r|^2 ∣ x n + 1 − r ∣ ≤ C ∣ x n − r ∣ 2 における2乗こそが2次の収束率である。
g : [ a , b ] → [ a , b ] g:[a,b]\to[a,b] g : [ a , b ] → [ a , b ] が連続微分可能で、すべての x ∈ [ a , b ] x\in[a,b] x ∈ [ a , b ] に対し ∣ g ′ ( x ) ∣ ≤ L < 1 |g'(x)| \le L < 1 ∣ g ′ ( x ) ∣ ≤ L < 1 を満たすとする。このとき g g g は [ a , b ] [a,b] [ a , b ] 内に唯一の不動点 r r r を持ち、任意の開始点 x 0 ∈ [ a , b ] x_0 \in [a,b] x 0 ∈ [ a , b ] に対して反復 x n + 1 = g ( x n ) x_{n+1}=g(x_n) x n + 1 = g ( x n ) は r r r に収束し ∣ x n − r ∣ ≤ L n ∣ x 0 − r ∣ |x_n - r| \le L^n |x_0 - r| ∣ x n − r ∣ ≤ L n ∣ x 0 − r ∣ を満たす。
なぜ正しいのか? 絶対値が1未満の傾きは、gを適用するたびに点同士がより近づくことを意味し、どこから始めても、繰り返しの押し縮めは区間全体をただ1点へと潰さなければならない。
証明 ステップ1(中間値の定理による存在)。h ( x ) = g ( x ) − x h(x)=g(x)-x h ( x ) = g ( x ) − x とする。g ( a ) ∈ [ a , b ] g(a)\in[a,b] g ( a ) ∈ [ a , b ] より g ( a ) ≥ a g(a)\ge a g ( a ) ≥ a すなわち h ( a ) ≥ 0 h(a)\ge0 h ( a ) ≥ 0 、同様に g ( b ) ≤ b g(b)\le b g ( b ) ≤ b より h ( b ) ≤ 0 h(b)\le0 h ( b ) ≤ 0 。h h h は連続なので、中間値の定理によりある r r r が存在して h ( r ) = 0 h(r)=0 h ( r ) = 0 、すなわち g ( r ) = r g(r)=r g ( r ) = r となる:不動点が存在する。
ステップ2(平均値の定理による一意性)。r 1 , r 2 ∈ [ a , b ] r_1,r_2\in[a,b] r 1 , r 2 ∈ [ a , b ] がともに r 1 ≠ r 2 r_1\ne r_2 r 1 = r 2 なる不動点であるとする。平均値の定理により、両者の間のある c c c が存在して g ( r 1 ) − g ( r 2 ) = g ′ ( c ) ( r 1 − r 2 ) g(r_1)-g(r_2) = g'(c)(r_1-r_2) g ( r 1 ) − g ( r 2 ) = g ′ ( c ) ( r 1 − r 2 ) ; g ( r 1 ) = r 1 g(r_1)=r_1 g ( r 1 ) = r 1 、g ( r 2 ) = r 2 g(r_2)=r_2 g ( r 2 ) = r 2 なので、これは r 1 − r 2 = g ′ ( c ) ( r 1 − r 2 ) r_1-r_2 = g'(c)(r_1-r_2) r 1 − r 2 = g ′ ( c ) ( r 1 − r 2 ) となり、∣ r 1 − r 2 ∣ = ∣ g ′ ( c ) ∣ ∣ r 1 − r 2 ∣ ≤ L ∣ r 1 − r 2 ∣ |r_1-r_2| = |g'(c)|\,|r_1-r_2| \le L\,|r_1-r_2| ∣ r 1 − r 2 ∣ = ∣ g ′ ( c ) ∣ ∣ r 1 − r 2 ∣ ≤ L ∣ r 1 − r 2 ∣ が成り立つ。L < 1 L<1 L < 1 かつ ∣ r 1 − r 2 ∣ > 0 |r_1-r_2|>0 ∣ r 1 − r 2 ∣ > 0 なので、これは矛盾であり、よって r 1 = r 2 r_1=r_2 r 1 = r 2 。
ステップ3(各ステップでの縮小)。任意の x n ∈ [ a , b ] x_n\in[a,b] x n ∈ [ a , b ] に対し、g ( x n ) − g ( r ) g(x_n)-g(r) g ( x n ) − g ( r ) に平均値の定理を適用する:x n x_n x n と r r r の間にある c n c_n c n が存在して g ( x n ) − g ( r ) = g ′ ( c n ) ( x n − r ) g(x_n)-g(r) = g'(c_n)(x_n-r) g ( x n ) − g ( r ) = g ′ ( c n ) ( x n − r ) 。g ( r ) = r g(r)=r g ( r ) = r と x n + 1 = g ( x n ) x_{n+1}=g(x_n) x n + 1 = g ( x n ) より左辺は x n + 1 − r x_{n+1}-r x n + 1 − r であるから、∣ x n + 1 − r ∣ = ∣ g ′ ( c n ) ∣ ∣ x n − r ∣ ≤ L ∣ x n − r ∣ |x_{n+1}-r| = |g'(c_n)|\,|x_n-r| \le L\,|x_n-r| ∣ x n + 1 − r ∣ = ∣ g ′ ( c n ) ∣ ∣ x n − r ∣ ≤ L ∣ x n − r ∣ 。
ステップ4(縮小を繰り返す)。ステップ3を n = 0 n=0 n = 0 から繰り返し適用すると ∣ x 1 − r ∣ ≤ L ∣ x 0 − r ∣ |x_1-r|\le L|x_0-r| ∣ x 1 − r ∣ ≤ L ∣ x 0 − r ∣ 、次に ∣ x 2 − r ∣ ≤ L ∣ x 1 − r ∣ ≤ L 2 ∣ x 0 − r ∣ |x_2-r|\le L|x_1-r|\le L^2|x_0-r| ∣ x 2 − r ∣ ≤ L ∣ x 1 − r ∣ ≤ L 2 ∣ x 0 − r ∣ 、そして帰納的に、すべての n n n について ∣ x n − r ∣ ≤ L n ∣ x 0 − r ∣ |x_n - r| \le L^n |x_0 - r| ∣ x n − r ∣ ≤ L n ∣ x 0 − r ∣ が得られる。0 ≤ L < 1 0\le L<1 0 ≤ L < 1 なので、右辺は n → ∞ n\to\infty n → ∞ のとき 0 0 0 に近づき、x n → r x_n\to r x n → r が証明される。
大学 実世界での応用と具体例 求根は、閉じた形の答えを持たない無数の計算の裏に隠れたエンジンである。技術者は構造設計や回路設計における非線形系を解くためにニュートン法を用い、金融では債券価格から未知の金利を逆算したり、オプション価格からインプライド・ボラティリティを求めたりするのに使われ、コンピュータグラフィックスでは光線と陰関数曲面の交点を求めるのに使われる。そして、あらゆる関数電卓は内部でニュートン法の数ステップを実行して 2 \sqrt{2} 2 や立方根を計算している。二分法は絶対確実であるため、ニュートン法が発散する恐れがあるときに求根ライブラリの内部で使われるフォールバックである。
例: 代数的な解の公式を持たない3次方程式への二分法
ある力学系の平衡位置は x 3 − x − 2 = 0 x^3-x-2=0 x 3 − x − 2 = 0 を満たす。区間 [ 1 , 2 ] [1,2] [ 1 , 2 ] (f ( 1 ) = − 2 < 0 f(1)=-2<0 f ( 1 ) = − 2 < 0 、f ( 2 ) = 4 > 0 f(2)=4>0 f ( 2 ) = 4 > 0 )を用いて、二分法を2ステップ行い、得られる中点 x 2 x_2 x 2 を求めよ。
解答 ステップ1:最初の中点を計算する。x 0 = 1 + 2 2 = 1.5 x_0 = \dfrac{1+2}{2} = 1.5 x 0 = 2 1 + 2 = 1.5 、かつ f ( 1.5 ) = 1.5 3 − 1.5 − 2 = − 0.125 < 0 f(1.5) = 1.5^3 - 1.5 - 2 = -0.125 < 0 f ( 1.5 ) = 1. 5 3 − 1.5 − 2 = − 0.125 < 0 なので、根は [ 1.5 , 2 ] [1.5, 2] [ 1.5 , 2 ] 内にある(f f f がそこで符号を変えるため:f ( 1.5 ) < 0 f(1.5)<0 f ( 1.5 ) < 0 , f ( 2 ) > 0 f(2)>0 f ( 2 ) > 0 )。
ステップ2:2番目の中点を計算する。x 1 = 1.5 + 2 2 = 1.75 x_1 = \dfrac{1.5+2}{2} = 1.75 x 1 = 2 1.5 + 2 = 1.75 、かつ f ( 1.75 ) = 1.75 3 − 1.75 − 2 = 1.609375 > 0 f(1.75) = 1.75^3 - 1.75 - 2 = 1.609375 > 0 f ( 1.75 ) = 1.7 5 3 − 1.75 − 2 = 1.609375 > 0 なので、根は [ 1.5 , 1.75 ] [1.5, 1.75] [ 1.5 , 1.75 ] 内にある。
ステップ3:x 2 x_2 x 2 を計算する。x 2 = 1.5 + 1.75 2 = 1.625 x_2 = \dfrac{1.5+1.75}{2} = 1.625 x 2 = 2 1.5 + 1.75 = 1.625 。
ステップ4:解釈する。わずか2ステップで探索区間は幅 1 1 1 から 0.25 0.25 0.25 へと縮み、x 2 = 1.625 x_2=1.625 x 2 = 1.625 はすでに真の根 r ≈ 1.5214 r\approx1.5214 r ≈ 1.5214 から 0.125 0.125 0.125 以内にあり、二分法の定理による誤差限界 ∣ x 2 − r ∣ ≤ 2 − 1 2 3 = 0.125 |x_2-r|\le \dfrac{2-1}{2^{3}}=0.125 ∣ x 2 − r ∣ ≤ 2 3 2 − 1 = 0.125 と一致する。
例: 手計算でニュートン法により平方根を求める
電卓が登場する以前、技術者は次のように平方根を計算していた:5 \sqrt{5} 5 を求めるために、x 0 = 2 x_0=2 x 0 = 2 から始めて f ( x ) = x 2 − 5 f(x)=x^2-5 f ( x ) = x 2 − 5 にニュートン法を適用し、x 1 x_1 x 1 と x 2 x_2 x 2 を計算せよ。
解答 ステップ1:反復式を立てる。ここで f ( x ) = x 2 − 5 f(x)=x^2-5 f ( x ) = x 2 − 5 、f ′ ( x ) = 2 x f'(x)=2x f ′ ( x ) = 2 x なので、ニュートンの更新式は x n + 1 = x n − x n 2 − 5 2 x n x_{n+1}=x_n-\dfrac{x_n^2-5}{2x_n} x n + 1 = x n − 2 x n x n 2 − 5 である。
ステップ2:x 1 x_1 x 1 を計算する。x 0 = 2 x_0=2 x 0 = 2 のとき x 1 = 2 − 2 2 − 5 2 ⋅ 2 = 2 − − 1 4 = 2.25 x_1 = 2 - \dfrac{2^2-5}{2\cdot2} = 2 - \dfrac{-1}{4} = 2.25 x 1 = 2 − 2 ⋅ 2 2 2 − 5 = 2 − 4 − 1 = 2.25 。
ステップ3:x 2 x_2 x 2 を計算する。x 1 = 2.25 x_1=2.25 x 1 = 2.25 のとき x 2 = 2.25 − 2.25 2 − 5 2 ⋅ 2.25 = 2.25 − 0.0625 4.5 ≈ 2.236111 x_2 = 2.25 - \dfrac{2.25^2-5}{2\cdot2.25} = 2.25 - \dfrac{0.0625}{4.5} \approx 2.236111 x 2 = 2.25 − 2 ⋅ 2.25 2.2 5 2 − 5 = 2.25 − 4.5 0.0625 ≈ 2.236111 。
ステップ4:解釈する。真の値は 5 ≈ 2.236068 \sqrt{5}\approx2.236068 5 ≈ 2.236068 であり、x 2 x_2 x 2 はわずか2ステップで小数点以下4桁まで正しい——x 1 x_1 x 1 から x 2 x_2 x 2 にかけて正しい桁数がほぼ倍になっており、これは上で証明した2次収束の特徴である。
よくある誤り. ニュートン法は決して失敗しないわけではない:導関数 f ′ ( x n ) f'(x_n) f ′ ( x n ) が0に近いと、接線はほぼ水平になり、次の推測値 x n + 1 x_{n+1} x n + 1 は根に近づくどころか遠く飛んでしまうことがある;悪い開始点は反復を無限サイクルに陥らせることもある(例えば、f ( x ) = x 3 − 2 x + 2 f(x)=x^3-2x+2 f ( x ) = x 3 − 2 x + 2 を x 0 = 0 x_0=0 x 0 = 0 から始めると 0 0 0 と 1 1 1 の間を永遠に跳ね続ける)。これこそ、頑健なソフトウェアがニュートン法がうまく動かないときに必ず収束する二分法へと切り替える理由である。 歴史的ノート
アイザック・ニュートンは1669年に多項式に対するこの方法の一版を記述したが、それは今日使われている微積分に基づく接線反復ではなく代数的消去であった;ジョゼフ・ラフソンが1690年に現代的な純粋に代数的な漸化式を発表し、ニュートンの手法は後に導関数を用いて再定式化され、この方法に通常の名前『ニュートン・ラフソン法』が与えられた。厳密な収束理論(x 0 x_0 x 0 が2次収束を保証するためにどれだけ根に近くなければならないか)は、テイラー展開の議論を厳密にするための実解析の道具が存在するようになって初めて後に整備された。
アイザック・ニュートン
[ a , b ] = [ 0 , 1 ] [a,b]=[0,1] [ a , b ] = [ 0 , 1 ] から二分法を始め、n = 5 n=5 n = 5 回反復したとき、∣ x 5 − r ∣ |x_5 - r| ∣ x 5 − r ∣ の保証された限界はいくらか。
1 64 \dfrac{1}{64} 64 1 1 32 \dfrac{1}{32} 32 1 1 16 \dfrac{1}{16} 16 1 1 6 \dfrac{1}{6} 6 1 ニュートン法の1ステップを正しく表す式はどれか。
x n + 1 = x n − f ( x n ) f ′ ( x n ) x_{n+1} = x_n - \dfrac{f(x_n)}{f'(x_n)} x n + 1 = x n − f ′ ( x n ) f ( x n ) x n + 1 = x n − f ′ ( x n ) f ( x n ) x_{n+1} = x_n - \dfrac{f'(x_n)}{f(x_n)} x n + 1 = x n − f ( x n ) f ′ ( x n ) x n + 1 = x n + f ( x n ) f ′ ( x n ) x_{n+1} = x_n + \dfrac{f(x_n)}{f'(x_n)} x n + 1 = x n + f ′ ( x n ) f ( x n ) x n + 1 = x n − f ( x n ) f ′ ( x n ) x_{n+1} = x_n - f(x_n)f'(x_n) x n + 1 = x n − f ( x n ) f ′ ( x n ) ある債券トレーダーが利回り y y y を求めるために非線形価格方程式 P ( y ) = 0 P(y)=0 P ( y ) = 0 に y 0 y_0 y 0 という推測から始めてニュートン法を適用する。どの状況が反復を収束させない可能性が最も高いか。
P ′ ( y 0 ) P'(y_0) P ′ ( y 0 ) が0に非常に近く、接線がほぼ水平になるP P P が真の利回りを含む区間上で連続である初期推測 y 0 y_0 y 0 がたまたま真の利回りと正確に等しい P ′ P' P ′ が真の利回り付近でゼロでなく良好に振る舞う[ a , b ] [a,b] [ a , b ] 上の不動点反復 x n + 1 = g ( x n ) x_{n+1} = g(x_n) x n + 1 = g ( x n ) が任意の x 0 ∈ [ a , b ] x_0 \in [a,b] x 0 ∈ [ a , b ] から不動点に収束することを保証するには、どの条件が必要か。
すべての x ∈ [ a , b ] x \in [a,b] x ∈ [ a , b ] について ∣ g ′ ( x ) ∣ ≤ L < 1 |g'(x)| \le L < 1 ∣ g ′ ( x ) ∣ ≤ L < 1 g g g が [ a , b ] [a,b] [ a , b ] 上で増加するすべての x ∈ [ a , b ] x \in [a,b] x ∈ [ a , b ] について g ′ ( x ) > 1 g'(x) > 1 g ′ ( x ) > 1 g g g が [ a , b ] [a,b] [ a , b ] 上の任意の連続関数である