根を求めるための反復法
応用数学、物理学、工学、コンピュータ科学において、「根を求める」問題は非常に頻繁に発生します。根とは、関数をゼロにするxの値、つまり次の方程式の解のことです。
\[
f(x)=0
\]
すべての方程式が、二次方程式のように閉じた形式の式で解を表せるわけではありません。複雑な非線形方程式など、多くの現実世界のケースでは、数値的なアプローチが必要です。最も重要なアプローチの1つが反復法であり、これは反復によって根に近づく一連の近似解を生成する手順です。
この記事では、反復法の基本概念、収束条件、および根を求めるために一般的に用いられる反復法について解説します。
-
1. 反復法の基本概念
反復法は、初期推定値 \(x_0\) を設定し、それを徐々に改善して数列を得ることで機能します。
\[
x_0, x_1, x_2, \dots, x_n
\]
期待を込めて:
\[
x_n \to \alpha
\]
ここで、\(\alpha\) は方程式 \(f(x)=0\) の真の根です。
一般に、反復法は問題 \(f(x)=0\) を等価な形式に変換します。
\[
x = g(x)
\]
次に反復処理が実行されます。
\[
x_{n+1} = g(x_n)
\]
このプロセスが収束する場合、\(g(x)\) の固定点は元の方程式の根解となります。
-
2. 収束:反復処理はいつ成功するのか?
すべての関数 \(g(x)\) が安定した反復を生成するわけではありません。反復 \(x_{n+1}=g(x_n)\) が根 \(\alpha\) に収束するためには、一般的に以下の条件が用いられます。
1. \(g(\alpha)=\alpha\) (根は不動点)
2. \(|g'(\alpha)| < 1\) (局所収縮)
\(|g'(\alpha)| < 1\) の直感は、解の近傍では関数 \(g\) が「あまり急勾配ではない」ため、各反復で \(x_n\) の値が遠ざかるのではなく近づくということです。
収束は初期推定値にも影響されます。同じ2つの方法でも、\(x_0\)によっては成功したり失敗したりします。
-
3. 単純な反復法としての二分法
二分法はしばしば別個の方法として分類されるが、非常に強力な反復法と見なすことができる。条件は、関数 \(f(x)\) が区間 \([a,b]\) で連続であり、符号が変化することである。
\[
f(a)\cdot f(b) < 0
\]
つまり、\(a\)と\(b\)の間には根が存在する。アルゴリズムは以下のとおりである。
1. 中点 \(c=\frac{a+b}{2}\) を計算します。
2. (符号の変化に基づいて)根を挟む部分区間を決定する
3. 許容範囲に達するまで繰り返す
この方法の利点は、符号変化条件が満たされれば必ず収束することが保証される点です。欠点は、誤差が反復ごとに約半分ずつ減少するため(線形収束)、収束が比較的遅いことです。
-
4. 不動点反復法
以下は、反復処理の最も直接的な形式です。
\[
x_{n+1} = g(x_n)
\]
手順:
1. \(f(x)=0\) を \(x=g(x)\) に変更します。
2. 初期推定値 \(x_0\) を選択します。
3. \(|x_{n+1}-x_n|\) または \(|f(x_n)|\) が許容値より小さくなるまで繰り返します。
その利点は、その単純さにある。しかし、この方法は \(g(x))\) の選択に非常に敏感である。同じ方程式に対して、\(x=g(x))\) の書き方は多数あるが、収束するのはそのうちのいくつかだけである。
例えば、\(f(x)=x^3-2x-5\)の根を求めたい場合、次のように書くことができます。
– \(x = \sqrt[3]{2x+5}\) なので、\(g(x)=\sqrt[3]{2x+5}\)
次に、\(x_{n+1}=\sqrt[3]{2x_n+5}\) という反復を実行します。反復の成功は、根の周りで \(|g'(x)|<1\) かどうかに依存します。
-
5. ニュートン・ラフソン法:導関数に基づく高速反復法
ニュートン・ラフソン法は、収束が非常に速いため、最も一般的な方法の一つです。反復式は次のとおりです。
\[
x_{n+1} = x_n – \frac{f(x_n)}{f'(x_n)}
\]
解釈:点 \(x_n\) において、関数 \(f(x)\) の接線を描きます。この接線と \(x\) 軸との交点を次の推定値として使用します。
利点:
– 根に十分近く、\(f'(\alpha)\neq 0\) の場合、二次収束(非常に速い)。
ケクランガン:
– 導関数 \(f'(x)\) が必要です。
– 初期推定値が悪い場合、または \(f'(x_n)\) がゼロに近い場合、反復ステップが不安定になり、失敗する可能性があります。
この方法は、条件が良好な場合の効率性の高さから、最適化、物理モデリング、および工学計算において広く用いられている。
-
6. 割線法:導関数を用いないニュートン法
導関数の計算が難しい場合、割線法は妥協案となる。その基本的な考え方は、有限差分を用いて導関数を近似することである。
\[
f'(x_n)\approx \frac{f(x_n)-f(x_{n-1})}{x_n-x_{n-1}}
\]
したがって、反復式は次のようになります。
\[
x_{n+1}=x_n – f(x_n)\,\frac{x_n-x_{n-1}}{f(x_n)-f(x_{n-1})}
\]
この方法は、初期値として \(x_0\) と \(x_1\) の 2 つを必要とします。収束速度は一般的に単純な二分法や不動点法よりも優れていますが、ニュートン法よりはやや遅い場合が多いです。しかし、導関数を必要としないため、割線法はより実用的な場合が多いです。
-
7. 停止基準
数値計算においては、十分な精度が得られた時、または収束していない疑いがある時に反復計算を停止すべきである。一般的な基準は以下のとおりである。
1. 反復間の誤差が小さい:
\[
|x_{n+1}-x_n|<\varepsilon
\]
2. 関数の値がゼロに近づく:
\[
|f(x_n)|<\varepsilon
\]
3. 無限ループを防ぐための最大反復回数制限:
\[
n \le n_{\max}
\]
許容誤差 \(\varepsilon\) の選択は要件によって異なります。エンジニアリング シミュレーションでは厳しい許容誤差が求められる場合がありますが、大まかな計算ではかなり緩い許容誤差で済みます。
-
8.反復法の簡単な比較
要約すれば:
– 二等分法:最も安定しており、確実に収束する(符号が変化する場合)が、遅い。
– 不動点法:非常に単純だが、収束が常に保証されるわけではない。
– ニュートン・ラフソン法:非常に高速だが、導関数が必要であり、初期推定値に敏感である。
– 割線法:微分は不要で、非常に高速ですが、二等分法よりも安定性に劣る場合があります。
実際には、どの方法を選択するかは、関数の性質、導関数の利用可能性、速度の必要性、および安定性によって決まります。
-
結論
反復法は、非線形方程式の数値解法の根幹を成す手法です。反復的に更新される近似値の系列を構築することで、解析的手法が利用できない場合でも解を求めることができます。収束性、初期推定値の選択、および停止基準を理解することは、反復法が正確かつ効率的な解を生成するために不可欠です。
実際の応用例では、多くの場合、複数の手法を組み合わせた戦略が用いられます。まず、二分法のような安定した方法で根の区間を確定し、次にニュートン法や割線法に切り替えて収束を速めます。このようにして、数値計算において非常に重要な2つの要素である信頼性と速度のバランスを取ることができます。
-
ご希望であれば、上記のいずれの方法についても、手順を追った(数値的な)計算例を追加して、記事をより具体的にすることも可能です。