ニュートン法ビジュアライザー

接線ステップによる求根と収束診断

インタラクティブシミュレーションを読み込んでいます...

0.55と0.58は反対側の根に収束する 🖖

ニュートン法では、反復するたびに正しい桁数が倍になる。「高速な求根」プリセットで確かめると、x₀ = 1から√2へ近づくにつれて、誤差は0.414、0.0858、0.00245、2.1 × 10⁻⁶、1.6 × 10⁻¹²と減っていく。四回で十二桁である。しかし、この速さを生む仕組みが破綻の原因にもなる。導関数がほぼ水平なら、接線の傾きはごく小さくなり、一回の移動が途方もなく大きくなる。x³ − xで0.5774から始めると、最初の近似値は−2210まで飛ぶ。このため、0.55からは負の根へ、0.58からは正の根へ収束する。

接線をたどって軸まで進む 🖖

曲線がゼロを横切る点を探すため、ニュートン法は現在の推定値における接線で曲線を置き換え、その直線がx軸と交わる点へ跳びます。滑らかな曲線は近くで見るとほぼ直線に見えるので、この交点はたいてい真の根にずっと近づきます。これを繰り返すと素早く収束します。公式は xn+1 = xn − f(xn)/f'(xn) です。

コンピュータは割り算せずに割る 🖖

現代のCPUは a/b を計算するとき、まず 1/b を求めることが多く、ニュートン法はこれを割り算をいっさい使わずに実現します。f(x) = 1/x − a に適用すると反復式 xn+1 = xn(2 − a·xn) が得られ、乗算と減算だけで構成されます。これらはハードウェアが安価に行える演算です。同じ技法は高速な逆数平方根ルーチン、Quake III の有名な例の裏にもあります。

ニュートン法 — 桁が倍になるとき、そして逃げていくとき

あなたはどのニュートン法の型か

ニュートン法は接線をたどって軸まで下り、それを繰り返します:xₖ₊₁ = xₖ − f(xₖ)/f′(xₖ)。うまくいくときは見事で、正しい桁数が一歩ごとにおよそ倍になります。失敗の仕方はどれも同じ場所、つまり分母から来ます。f′ がほぼ 0 なら遠くへ飛ばされ、根で f′ が消えるなら這うほど遅くなり、極値の反対側から始めればまったく別の根に着きます。

2 次収束 — ニュートン法が有名になった型 ek+1 ∝ ek2
根で傾きが平ら — 速さが 1 次まで落ちる f′(r) = 0 ⇒ ek+1 ≈ (1 − 1/m)ek
逃げていく — 歩幅が縮まず伸びる x → −2x
収束はする — 頼んでいない根へ f′(x₀) = 0

01

2 次収束 — ニュートン法が有名になった型

わかっていること: f は滑らかで、根の近くで f′ は 0 から十分に離れており、初期値も十分近い。1 歩ごとに誤差がほぼ 2 乗される。

反復: ek+1 ∝ ek2

計算例: f(x) = x² − 2、x₀ = 1 から → 1.5、1.416667、1.41421569、1.41421356237:正しい桁は 1、3、6、12

この型を開く: 速い収束
2 次収束 — ニュートン法が有名になった型. 接線は前より根のはるか近くに着き、誤差は 2 乗される。 f は滑らかで、根の近くで f′ は 0 から十分に離れており、初期値も十分近い。1 歩ごとに誤差がほぼ 2 乗される。
接線は前より根のはるか近くに着き、誤差は 2 乗される。

02

根で傾きが平ら — 速さが 1 次まで落ちる

わかっていること: 根が重根なので、そこで f と f′ が同時に 0 になる。向かう先でちょうど接線がほぼ水平になる。

反復: f′(r) = 0 ⇒ ek+1 ≈ (1 − 1/m)ek

計算例: f(x) = x³、x₀ = 0.1 から → 0.0667、0.0444、0.0296、0.0198:誤差は 2 乗されず、毎回 2/3 倍になるだけ

この型を開く: 平坦な傾き
根で傾きが平ら — 速さが 1 次まで落ちる. 3 重根は接線を平らにし、1 歩で残りの 3 分の 1 しか進めない。 根が重根なので、そこで f と f′ が同時に 0 になる。向かう先でちょうど接線がほぼ水平になる。
3 重根は接線を平らにし、1 歩で残りの 3 分の 1 しか進めない。

03

逃げていく — 歩幅が縮まず伸びる

わかっていること: 根に近づくほど f より f′ のほうが速く崩れるので、補正 f/f′ は反復ごとに行きすぎが大きくなる。

反復: x → −2x

計算例: f(x) = ∛x、x₀ = 0.01 から → −0.02、0.04、−0.08、0.16:更新式はちょうど x → −2x となり、距離は倍、符号は反転し続ける

この型を開く: 発散
逃げていく — 歩幅が縮まず伸びる. どの接線も前の 2 倍遠くで、反対側の軸を切る。 根に近づくほど f より f′ のほうが速く崩れるので、補正 f/f′ は反復ごとに行きすぎが大きくなる。
どの接線も前の 2 倍遠くで、反対側の軸を切る。

04

収束はする — 頼んでいない根へ

わかっていること: 関数に複数の根があり、初期値が極値の近く、つまり f′ が小さく最初の一歩が巨大になる場所にある。

反復: f′(x₀) = 0

計算例: f(x) = x³ − x は x₀ = 0.7 からは +1 に落ち着くが、x₀ = 0.5 からは最初の一歩で −1 に着地する。ほかの二つの根の向こう側の根

この型を開く: 誤った吸引域
収束はする — 頼んでいない根へ. 隣り合う二つの初期値、二つの違う根:境界は根の中間ではなく極値にある。 関数に複数の根があり、初期値が極値の近く、つまり f′ が小さく最初の一歩が巨大になる場所にある。
隣り合う二つの初期値、二つの違う根:境界は根の中間ではなく極値にある。

全プロセスの詳細解説

  1. ニュートン法による x³ − x − 2 の根 5 ステップ

    ニュートン法を使うと、x³ − x − 2の根が三回の反復で求まる。二分法では10⁻⁶に達するだけでもおよそ二十回かかるが、ニュートン法は二回目でそこを通り過ぎる。この速さはどこから生まれ、何を代償にしているのだろう。

    1. この手法の発想は一つである。曲線をその接線で置き換えて代わりにそれを解く。直線であれば正確に解けるからである。次の推定値は、接線がゼロと交差する位置となる。

    2. 1.5 からスタートすると、最初の1ステップでほぼ目的地に到達する。その点での関数の値はわずか −0.125、傾きは 5.75 であり、それらの比によって推定値は約 0.022 移動する。

    3. さらに2ステップ進むと、数値の変動は止まる。ツールが3回の反復と報告するのは、4回目の移動量が許容誤差未満になるからである。

    4. 注目すべきなのは近似値そのものではなく、誤差である。追っていけば規則性は明らかになる。誤差は毎回、直前の誤差の二乗にほぼ等しく、正しい桁数は反復ごとに倍になる。2桁、4桁、7桁、そして14桁である。

    5. また、前係数も任意の数値ではない。根の周りで f を展開すると、連続する二乗誤差の比はその点での |f″/2f′| の評価値に収束することが示される。この3次式ではそれが 0.768 となる。実際に観察された比率は 0.786、0.768、0.768 である。

    解答

    ツールが3回の反復後に示す根は1.52138である。この速さの理由は二次収束にある。二分法は反復ごとに区間を半分にするので、10⁻⁶に達するまでおよそ二十回を要する。一方、ニュートン法では誤差が二乗されるため、二回目でその精度を超える。ただし、収束は保証されない。二分法は根を挟む区間が得られれば失敗しないが、ニュートン法にはその支えがなく、傾きがほぼゼロの点から始めると次の近似値が遠方へ飛んでしまう。数値的な求根法では、この速さと確実性の兼ね合いが核心となる。実用的なソルバーが、まず根を挟み込んでからニュートン法へ切り替えるのはそのためである。

学習の道すじ

三つの数値計算法と、それぞれの限界

この次に 数値積分

参考文献 (1)

例題

  • 速い収束 - x0 = 1から始めると、誤差は0.414、0.0858、0.00245、2.1 × 10⁻⁶、1.6 × 10⁻¹²と減る。どれも直前の誤差の二乗にほぼ等しいため、四回で√2の正しい桁が十二桁得られる。
  • 平坦な傾き - x³は0に三重根をもち、この点では誤差が二乗されず、ニュートン法の進みは遅い。各反復でxが2/3倍になるだけである。六回後、0.0088で停止し、収束したと判定する。根は0である。
  • 発散 - 立方根を求めるニュートン法は、厳密にx → -2xとなる。そのため近似値は0.01、-0.02、0.04、-0.08と、符号を反転させながら倍になり続ける。根そのものから始めない限り、必ず発散する。
  • 誤った吸引域 - x0 = 0.55は正の側にあるのに、-1へ収束する。導関数が1/√3 = 0.5774でほぼゼロになるため、最初の接線が近似値を-3.60まで飛ばす。一方、0.58からは+1へ向かう。
  • 負の根 - 「高速な求根」と同じx² - 2を、1ではなく-1.2から始めると、三回で-1.414へ収束する。ニュートン法が見つけるのは、望んだ根ではなく、初期値が向いている先の根である。
  • 厳密な許容誤差 - x³ - x - 2を1.6から始めると、許容誤差を10⁻⁸にしても三回の反復で1.5213797に達する。同じ精度を二分法で得るには、およそ二十七回区間を半分にする必要がある。