![区間 [a1;b1] を開始点とする、regula falsi メソッドの連続ステップ。関数のルートは赤色の点です。](https://img.youtube.com/vi/PP1408ixG6s/0.jpg)
数値解析において、偽位置法または規則偽位置法は、二分法と割線法の可能性を組み合わせた関数のゼロを見つけるためのアルゴリズムです。
方法
二分法と同様に、偽位置法はf ( a 0 ) とf ( b 0 ) が反対の符号を持つように 2 つの点a 0とb 0から始まります。これは、中間値定理から関数f が少なくとも 1 つを持つことを意味します。区間 [ a 0 , b 0 ] 内のゼロ。この方法は、すべてfのゼロを含む間隔 [ a k , b k ] の減少シーケンスを生成することで構成されます。
ステップkでは、数値
- $$ {c_k = a_k – \frac{a_k-b_k}{f(a_k)-f(b_k)} f(a_k)} $$
計算されます。以下で説明するように、 c k は、( a k , f( a k )) および ( b k , f( b k )) を通る直線と x 軸との交点の x 座標であり、単純化すると、次のようになります。セカントのゼロをと呼びます。 f( a k ) と f( c k ) の符号が同じであれば、 a k +1 = c kおよびb k +1 = b kを設定します。それ以外の場合は、 a k +1 = a kおよびb k +を設定します。 1 = ck 。このプロセスは、ゼロに十分近づくまで繰り返されます。
上記の式はセカント法でも使用されますが、セカント法では計算された最後の 2 点が体系的に保持されるのに対し、偽位置法では確実にゼロを構成する 2 点が保持されます。一方、偽位置法と二分法の唯一の違いは、関係c k = ( a k + b k ) / 2 を使用することです。
セカントのゼロを見つける
aとb が与えられると、反対の図のように、点 ( a , f ( a )) と ( b , f ( b )) を通る直線を作成します。この線は関数fのグラフのセカントまたはコードであることに注意してください。傾きと点を使用すると、直線の方程式を書くことができます。
- $$ {y – f(b) = \frac{f(b)-f(a)}{b-a} (x-b).} $$
ここで、 cによって与えられる横座標軸 (セカントのゼロ) とこの線の交点の横座標を決定します。
- $$ {f(b) + \frac{f(b)-f(a)}{b-a} (c-b) = 0.} $$
前の方程式を解くとc k が得られます。

分析
f ( a 0 ) とf ( b 0 ) が反対の符号になるように初期値a 0とb 0が取られる場合、偽位置法はfのゼロに収束します。収束の速度は通常「超線形」であるため、二分法よりも高速ですが、割線法よりは遅くなります。
サンプルプログラム
次の C 言語プログラムは、効率よりもわかりやすさを優先して書かれています。その目的は、ニュートンとセカントの方法を説明するために作成されたプログラムが解決したのと同じ問題を解決し、cos( x ) = x 3を検証する厳密に正の数xを求めることです。この問題は、 f ( x ) = cos( x ) – x 3 = 0 で定義される関数fのゼロを見つける問題に変換されます。
#含む#含む ダブルf(ダブルx) { cos(x) - x*x*xを返します。 } double FalsiMethod( double s, double t, double e, double m) { int n; ダブルr; for (n = 1; n <= m; n++) { r = t - f(t) * (s - t) / (f(s) - f(t)); if (f(r) < e) rを返します。 if (f(s) * f(r) < 0) t = r; else if (f(r) * f(t) < 0) s = r; } rを返します。 } int main( void ) { printf("%0.15f\n", FalsiMethod(0, 1, 5E-11, 100)); 0を返します。 }
このプログラムを実行した後の最終結果は約 0.865474032979005 になります。
歴史
時の試練に耐え、偽位置法の知識と理解を証明する最古の文書は、推定紀元前 200 年まで遡ります。この方法は、数学芸術に関する九章 (????) と呼ばれる古代中国の文書で発見されました。ただし、このテキストの例題では、偽位置法を線形方程式にのみ適用し、解は 1 ステップだけで得られます。

