MathLabs

応用数学と計算数学

方程式の近似解法

二分法やニュートン法のように、コンピュータが1ステップずつ計算できる根を求める数値解法。

直観直感:根の近くを拡大する

方程式 f(x)=0f(x)=0 の根 rr を求めたいが、rr を厳密に与える代数的な公式が存在しない場合を考える。数値解法は、一歩ごとに rr へとますます近づく推測の列 x0,x1,x2,…x_0, x_1, x_2,\dots を構成する。これは ff のグラフを、横軸と交わる点に向かって繰り返し拡大することで、正しい小数桁をどんどん読み取れるようになるのとよく似ている。以下の3つの方法は、現在の推測値 xnx_n を次のより良い推測値 xn+1x_{n+1} に変える巧妙さの点だけが異なる。

曲線上の近接する2点を通る割線が、刻み幅が0に縮むにつれて接線へと回転していく様子を示し、ニュートン法の背後にある幾何学的な考え方を説明する図。
割線の刻み幅 hh を0に近づけると、それが x0x_0 における傾き f′(x0)f'(x_0) の接線に一致していく様子が見られる:これはニュートン法が次の推測値 x1=x0−f(x0)f′(x0)x_1 = x_0 - \dfrac{f(x_0)}{f'(x_0)} へと下っていく際にたどる接線そのものであり、より粗い割線の傾き f(x0+h)−f(x0)h\dfrac{f(x_0+h)-f(x_0)}{h} ではない。

大学定義:3つの求根法

定義: 二分法

連続関数 ff が区間 [a,b][a,b] 上で f(a)f(b)<0f(a)f(b)<0 を満たすなら、中間値の定理により内部に根の存在が保証される。二分法は各ステップでこの区間を半分にする:中点 c=a+b2c=\dfrac{a+b}{2} を計算し、f(c)f(c) を評価し、符号が変わっている方の半分を残して繰り返す。

∣xn−r∣≤b−a2n+1|x_n - r| \le \dfrac{b-a}{2^{n+1}}

∣xn−r∣≤b−a2n+1|x_n - r| \le \dfrac{b-a}{2^{n+1}} は第 nn 番目の中点 xnx_n が真の根 rr からどれだけ離れうるかを示す。区間の幅 L=b−aL=b-a は各ステップで半分になるため、最悪の誤差も半分になり、わずか n=4n=4 回のステップの後には不確かさは L/32L/32 まで縮む。この保証された予測可能な縮小率こそが二分法の魅力である——遅いものの、収束に失敗することは決してない。

定義: ニュートン法

ニュートン法は xnx_n 付近の曲線をその接線 y=f(xn)+f′(xn)(x−xn)y=f(x_n)+f'(x_n)(x-x_n) で置き換え、その接線が0と交わる点を次の推測値 xn+1x_{n+1} とすることで、反復式 xn+1=xn−f(xn)f′(xn)x_{n+1} = x_n - \dfrac{f(x_n)}{f'(x_n)} を得る。各ステップで導関数 f′f' が必要だが、うまく機能すれば二分法よりはるかに速く収束する。

xn+1=xn−f(xn)f′(xn)x_{n+1} = x_n - \dfrac{f(x_n)}{f'(x_n)}

第三の視点は両者を統一する:方程式を、ある関数 gg についての不動点問題 x=g(x)x=g(x) として書き直し、ff の根が gg の不動点になるようにして、任意の x0x_0 から反復 xn+1=g(xn)x_{n+1} = g(x_n) を行う。二分法もニュートン法も、gg の選び方が異なるだけの、この考え方の特別な場合である。

3つの求根法の比較
方法反復式収束の位数必要条件
二分法c=a+b2c=\dfrac{a+b}{2}線形(11)ff が連続、f(a)f(b)<0f(a)f(b)<0
ニュートンxn+1=xn−f(xn)f′(xn)x_{n+1} = x_n - \dfrac{f(x_n)}{f'(x_n)}2次(22)ff が2回微分可能、f′(r)≠0f'(r) \ne 0、x0x_0 が rr に近い
不動点反復法xn+1=g(xn)x_{n+1} = g(x_n)一般に線形(11)rr の近くで ∣g′(x)∣≤L<1|g'(x)| \le L < 1

大学重要な定理

ff が [a,b][a,b] 上で連続で f(a)f(b)<0f(a)f(b)<0 を満たすとする。このとき二分法は中点 xn=an+bn2x_n=\dfrac{a_n+b_n}{2} を生成し、[a,b][a,b] 内のある根 rr に対して xn→rx_n \to r が成り立ち、nn 回目の誤差は ∣xn−r∣≤b−a2n+1|x_n - r| \le \dfrac{b-a}{2^{n+1}} を満たす。

なぜ正しいのか?

各ステップは根を縮んでいく箱の中に閉じ込め、常に根を含みながら1点へと縮んでいく箱は、その根そのものへと縮まなければならない。

証明

ステップ1(不変量)。a0=aa_0=a、b0=bb_0=b とする。ステップ nn において、不変量 f(an)f(bn)<0f(a_n)f(b_n)<0、すなわち根が [an,bn][a_n,b_n] のどこかに閉じ込められていることを維持する。これは仮定により最初は成り立つ。[an,bn][a_n,b_n] から中点 xn=an+bn2x_n=\dfrac{a_n+b_n}{2} を計算し f(xn)f(x_n) を評価する:それが f(an)f(a_n) と反対の符号なら an+1=an, bn+1=xna_{n+1}=a_n,\ b_{n+1}=x_n とし、そうでなければ an+1=xn, bn+1=bna_{n+1}=x_n,\ b_{n+1}=b_n とする(f(xn)=0f(x_n)=0 がちょうど成り立てば xnx_n が根そのものであり、処理は終了する)。いずれにせよ再び f(an+1)f(bn+1)<0f(a_{n+1})f(b_{n+1})<0 となるので、不変量は帰納法により保たれる。

ステップ2(幅の縮小)。構成により新しい各区間は前の区間のちょうど半分なので、すべての n≥0n \ge 0 について bn−an=b−a2nb_n-a_n = \dfrac{b-a}{2^n} が成り立つ。根 rr は各ステップで [an,bn][a_n,b_n] の中にあり(ステップ1より)、中点 xnx_n も [an,bn][a_n,b_n] の中にあるので、両者は幅 b−a2n\dfrac{b-a}{2^n} の同じ区間内にあり、これだけで ∣xn−r∣≤b−a2n|x_n - r| \le \dfrac{b-a}{2^n} が成り立つ;もう少し精密に数える(中点からどちらかの端点までを測る)と述べられた限界 ∣xn−r∣≤b−a2n+1|x_n - r| \le \dfrac{b-a}{2^{n+1}} が得られる。

ステップ3(収束)。n→∞n\to\infty のとき b−a2n+1→0\dfrac{b-a}{2^{n+1}} \to 0 なので、ステップ2による挟み込みにより xn→rx_n \to r が強制される。この部分では、最初の符号条件を超える ff の連続性すら不要である——それが必要なのは、そもそも [a,b][a,b] の内部に根が存在することを保証するため、すなわちステップ0で適用される中間値の定理のためだけである。

rr の近くで ff が2回連続微分可能で f′(r)≠0f'(r) \ne 0 を満たすとする。このとき rr のある近傍が存在し、ニュートン反復がその内部から始まれば、反復列は rr に収束し、ある定数 C=max⁡∣f′′∣2min⁡∣f′∣C=\dfrac{\max|f''|}{2\min|f'|}(最大値と最小値はその近傍上でとる)に対して ∣xn+1−r∣≤C ∣xn−r∣2|x_{n+1}-r| \le C\,|x_n-r|^2 を満たす。

なぜ正しいのか?

接線は滑らかな曲線に対して非常に良い近似であるため、その誤差はすでに進んだ距離の2乗に比例し、正しい桁数は次のステップでほぼ倍になる。

証明

ステップ1(現在の推測値のまわりでテイラー展開する)。ff が2回微分可能なので、ラグランジュ剰余項付きテイラーの定理により、ある ξn\xi_n between xnx_n and rr に対して f(r)=f(xn)+f′(xn)(r−xn)+12f′′(ξn)(r−xn)2f(r) = f(x_n) + f'(x_n)(r-x_n) + \tfrac12 f''(\xi_n)(r-x_n)^2 が成り立つ。剰余項が2次誤差全体を担うため、これは近似ではなく厳密な等式である。

ステップ2(根の条件を代入する)。f(r)=0f(r)=0 なので左辺は消え、0=f(xn)+f′(xn)(r−xn)+12f′′(ξn)(r−xn)20 = f(x_n) + f'(x_n)(r-x_n) + \tfrac12 f''(\xi_n)(r-x_n)^2 が残る。両辺を f′(xn)f'(x_n)(rr の近くでは f′(r)≠0f'(r) \ne 0 かつ f′f' が連続なのでゼロでない)で割ると r−xnr - x_n が分離され、0=f(xn)f′(xn)+(r−xn)+f′′(ξn)2f′(xn)(r−xn)20 = \dfrac{f(x_n)}{f'(x_n)} + (r-x_n) + \dfrac{f''(\xi_n)}{2f'(x_n)}(r-x_n)^2 となる。

ステップ3(ニュートンのステップを認識する)。整理すると r−(xn−f(xn)f′(xn))=−f′′(ξn)2f′(xn)(r−xn)2r - \left(x_n - \dfrac{f(x_n)}{f'(x_n)}\right) = -\dfrac{f''(\xi_n)}{2f'(x_n)}(r-x_n)^2。左辺の括弧はまさにニュートンの更新 xn+1x_{n+1} であるから、en=xn−re_n = x_n - r を用いてこれは r−xn+1=−f′′(ξn)2f′(xn) en2r - x_{n+1} = -\dfrac{f''(\xi_n)}{2f'(x_n)}\,e_n^2、すなわち en+1=−f′′(ξn)2f′(xn) en2e_{n+1} = -\dfrac{f''(\xi_n)}{2f'(x_n)}\,e_n^2 と書ける。

ステップ4(定数を評価する)。絶対値をとり ∣f′′(ξn)∣|f''(\xi_n)| と 1/∣f′(xn)∣1/|f'(x_n)| をその近傍上での極値 max⁡∣f′′∣\max|f''| と 1/min⁡∣f′∣1/\min|f'| で評価すると、C=max⁡∣f′′∣2min⁡∣f′∣C=\dfrac{\max|f''|}{2\min|f'|} により ∣xn+1−r∣≤C ∣xn−r∣2|x_{n+1}-r| \le C\,|x_n-r|^2 が得られる。C ∣x0−r∣<1C\,|x_0-r| < 1 となれば、この漸化式は ∣xn−r∣|x_n - r| を 00 へと縮ませ収束を証明し、∣xn+1−r∣≤C ∣xn−r∣2|x_{n+1}-r| \le C\,|x_n-r|^2 における2乗こそが2次の収束率である。

g:[a,b]→[a,b]g:[a,b]\to[a,b] が連続微分可能で、すべての x∈[a,b]x\in[a,b] に対し ∣g′(x)∣≤L<1|g'(x)| \le L < 1 を満たすとする。このとき gg は [a,b][a,b] 内に唯一の不動点 rr を持ち、任意の開始点 x0∈[a,b]x_0 \in [a,b] に対して反復 xn+1=g(xn)x_{n+1}=g(x_n) は rr に収束し ∣xn−r∣≤Ln∣x0−r∣|x_n - r| \le L^n |x_0 - r| を満たす。

なぜ正しいのか?

絶対値が1未満の傾きは、gを適用するたびに点同士がより近づくことを意味し、どこから始めても、繰り返しの押し縮めは区間全体をただ1点へと潰さなければならない。

証明

ステップ1(中間値の定理による存在)。h(x)=g(x)−xh(x)=g(x)-x とする。g(a)∈[a,b]g(a)\in[a,b] より g(a)≥ag(a)\ge a すなわち h(a)≥0h(a)\ge0、同様に g(b)≤bg(b)\le b より h(b)≤0h(b)\le0。hh は連続なので、中間値の定理によりある rr が存在して h(r)=0h(r)=0、すなわち g(r)=rg(r)=r となる:不動点が存在する。

ステップ2(平均値の定理による一意性)。r1,r2∈[a,b]r_1,r_2\in[a,b] がともに r1≠r2r_1\ne r_2 なる不動点であるとする。平均値の定理により、両者の間のある cc が存在して g(r1)−g(r2)=g′(c)(r1−r2)g(r_1)-g(r_2) = g'(c)(r_1-r_2); g(r1)=r1g(r_1)=r_1、g(r2)=r2g(r_2)=r_2 なので、これは r1−r2=g′(c)(r1−r2)r_1-r_2 = g'(c)(r_1-r_2) となり、∣r1−r2∣=∣g′(c)∣ ∣r1−r2∣≤L ∣r1−r2∣|r_1-r_2| = |g'(c)|\,|r_1-r_2| \le L\,|r_1-r_2| が成り立つ。L<1L<1 かつ ∣r1−r2∣>0|r_1-r_2|>0 なので、これは矛盾であり、よって r1=r2r_1=r_2。

ステップ3(各ステップでの縮小)。任意の xn∈[a,b]x_n\in[a,b] に対し、g(xn)−g(r)g(x_n)-g(r) に平均値の定理を適用する:xnx_n と rr の間にある cnc_n が存在して g(xn)−g(r)=g′(cn)(xn−r)g(x_n)-g(r) = g'(c_n)(x_n-r)。g(r)=rg(r)=r と xn+1=g(xn)x_{n+1}=g(x_n) より左辺は xn+1−rx_{n+1}-r であるから、∣xn+1−r∣=∣g′(cn)∣ ∣xn−r∣≤L ∣xn−r∣|x_{n+1}-r| = |g'(c_n)|\,|x_n-r| \le L\,|x_n-r|。

ステップ4(縮小を繰り返す)。ステップ3を n=0n=0 から繰り返し適用すると ∣x1−r∣≤L∣x0−r∣|x_1-r|\le L|x_0-r|、次に ∣x2−r∣≤L∣x1−r∣≤L2∣x0−r∣|x_2-r|\le L|x_1-r|\le L^2|x_0-r|、そして帰納的に、すべての nn について ∣xn−r∣≤Ln∣x0−r∣|x_n - r| \le L^n |x_0 - r| が得られる。0≤L<10\le L<1 なので、右辺は n→∞n\to\infty のとき 00 に近づき、xn→rx_n\to r が証明される。

大学実世界での応用と具体例

求根は、閉じた形の答えを持たない無数の計算の裏に隠れたエンジンである。技術者は構造設計や回路設計における非線形系を解くためにニュートン法を用い、金融では債券価格から未知の金利を逆算したり、オプション価格からインプライド・ボラティリティを求めたりするのに使われ、コンピュータグラフィックスでは光線と陰関数曲面の交点を求めるのに使われる。そして、あらゆる関数電卓は内部でニュートン法の数ステップを実行して 2\sqrt{2} や立方根を計算している。二分法は絶対確実であるため、ニュートン法が発散する恐れがあるときに求根ライブラリの内部で使われるフォールバックである。

例: 代数的な解の公式を持たない3次方程式への二分法

ある力学系の平衡位置は x3−x−2=0x^3-x-2=0 を満たす。区間 [1,2][1,2](f(1)=−2<0f(1)=-2<0、f(2)=4>0f(2)=4>0)を用いて、二分法を2ステップ行い、得られる中点 x2x_2 を求めよ。

解答

ステップ1:最初の中点を計算する。x0=1+22=1.5x_0 = \dfrac{1+2}{2} = 1.5、かつ f(1.5)=1.53−1.5−2=−0.125<0f(1.5) = 1.5^3 - 1.5 - 2 = -0.125 < 0 なので、根は [1.5,2][1.5, 2] 内にある(ff がそこで符号を変えるため:f(1.5)<0f(1.5)<0, f(2)>0f(2)>0)。

ステップ2:2番目の中点を計算する。x1=1.5+22=1.75x_1 = \dfrac{1.5+2}{2} = 1.75、かつ f(1.75)=1.753−1.75−2=1.609375>0f(1.75) = 1.75^3 - 1.75 - 2 = 1.609375 > 0 なので、根は [1.5,1.75][1.5, 1.75] 内にある。

ステップ3:x2x_2 を計算する。x2=1.5+1.752=1.625x_2 = \dfrac{1.5+1.75}{2} = 1.625。

ステップ4:解釈する。わずか2ステップで探索区間は幅 11 から 0.250.25 へと縮み、x2=1.625x_2=1.625 はすでに真の根 r≈1.5214r\approx1.5214 から 0.1250.125 以内にあり、二分法の定理による誤差限界 ∣x2−r∣≤2−123=0.125|x_2-r|\le \dfrac{2-1}{2^{3}}=0.125 と一致する。

例: 手計算でニュートン法により平方根を求める

電卓が登場する以前、技術者は次のように平方根を計算していた:5\sqrt{5} を求めるために、x0=2x_0=2 から始めて f(x)=x2−5f(x)=x^2-5 にニュートン法を適用し、x1x_1 と x2x_2 を計算せよ。

解答

ステップ1:反復式を立てる。ここで f(x)=x2−5f(x)=x^2-5、f′(x)=2xf'(x)=2x なので、ニュートンの更新式は xn+1=xn−xn2−52xnx_{n+1}=x_n-\dfrac{x_n^2-5}{2x_n} である。

ステップ2:x1x_1 を計算する。x0=2x_0=2 のとき x1=2−22−52⋅2=2−−14=2.25x_1 = 2 - \dfrac{2^2-5}{2\cdot2} = 2 - \dfrac{-1}{4} = 2.25。

ステップ3:x2x_2 を計算する。x1=2.25x_1=2.25 のとき x2=2.25−2.252−52⋅2.25=2.25−0.06254.5≈2.236111x_2 = 2.25 - \dfrac{2.25^2-5}{2\cdot2.25} = 2.25 - \dfrac{0.0625}{4.5} \approx 2.236111。

ステップ4:解釈する。真の値は 5≈2.236068\sqrt{5}\approx2.236068 であり、x2x_2 はわずか2ステップで小数点以下4桁まで正しい——x1x_1 から x2x_2 にかけて正しい桁数がほぼ倍になっており、これは上で証明した2次収束の特徴である。

[a,b]=[0,1][a,b]=[0,1] から二分法を始め、n=5n=5 回反復したとき、∣x5−r∣|x_5 - r| の保証された限界はいくらか。

ニュートン法の1ステップを正しく表す式はどれか。

ある債券トレーダーが利回り yy を求めるために非線形価格方程式 P(y)=0P(y)=0 に y0y_0 という推測から始めてニュートン法を適用する。どの状況が反復を収束させない可能性が最も高いか。

[a,b][a,b] 上の不動点反復 xn+1=g(xn)x_{n+1} = g(x_n) が任意の x0∈[a,b]x_0 \in [a,b] から不動点に収束することを保証するには、どの条件が必要か。