非線形方程式を解くための割線法(セカント法):アルゴリズムとC++実装例
割線法(セカント法)とは
割線法(セカント法)は、非線形方程式を解くために用いられる数値解法の一つです。この手法はニュートン・ラプソン法とよく似ていますが、関数 f(x) の微分を解析的に求める必要がない点が大きな特徴です。f(x) の値のみを用いて、ニュートンの差分公式(除算差分公式)により f'(x) を数値的に近似することができます。
まず、ニュートン・ラプソン法の公式は次のようになります。

ここで差分公式を適用すると、f'(x) を次のように近似できます。



ニュートン・ラプソン法の公式に含まれる f'(x) を、この新しい近似式で置き換えることで、非線形方程式を解くための割線法の公式が導かれます。

注意: 割線法では、非線形方程式の根を反復計算で求める際の出発点として、任意の2つの初期値が必要です。初期値の選び方によっては収束しない場合もあるため、注意が必要です。
入力と出力
Input: 関数 f(x) = (x*x) - (4*x) - 10 Output: 根は: -1.74166
アルゴリズム
secant(x1, x2)
入力: 根に対する2つの初期推定値。
出力: 非線形方程式 f(x) の近似根。
Begin
f1 := f(x1)
f2 := f(x2)
x3 := ((f2*x1) – (f1*x2)) / (f2 – f1)
while relative error of x3 and x2 are > precision, do
x1 := x2
f1 := f2
x2 := x3
f2 := f(x2)
x3 := ((f2*x1) – (f1*x2)) / (f2 – f1)
done
root := x3
return root
EndC++による実装例
以下は、割線法を用いて関数 f(x) = x² − 4x − 10 の根を求めるC++プログラムの例です。
#include<iostream>
#include<cmath>
using namespace std;
double absolute(double value) { //値の絶対値を求める
if(value < 0)
return (-value);
return value;
}
double f(double x) { //与えられた関数 x^2-4x-10
return ((x*x)-(4*x)-10);
}
double secant(double x1, double x2) {
double x3, root;
double f1, f2;
f1 = f(x1);
f2 = f(x2);
x3 = (f2*x1-f1*x2)/(f2-f1);
while(absolute((x3-x2)/x3) > 0.00001) { //x3の精度を判定
x1 = x2; //xの値を更新
f1 = f2;
x2 = x3;
f2 = f(x2); //新しいx2を求める
x3 = (f2*x1-f1*x2)/(f2-f1); //新しいx3を計算
}
root = x3;
return root; //方程式の根
}
main() {
double a, b, res;
a = 0.5;
b = 0.75;
res = secant(a, b);
cout << "根は: " << res;
}実行結果
根は: -1.74166
このように、初期値 a = 0.5、b = 0.75 から反復計算を行うことで、方程式 x² − 4x − 10 = 0 の根 −1.74166 が高精度で求められました。割線法は微分を必要としないため、微分が困難な関数に対しても手軽に適用できる実用的な手法です。
-
RubyのArray#zipメソッド徹底解説!2つの配列をスマートに結合する方法
2つの配列を要素ごとに比較して、その違いを見つけたいと思ったことはありませんか? あるいは、各インデックスごとに最大の数値を求めたい、キーのリストと値のリストを組み合わせてハッシュを作りたい――そんな場面にも出会うことがあるでしょう。 …これを「面倒な方法」で実装すると、次のようなコードになります。 例:冗長な書き方 a = [1,2,3,4,5] b = [1,2,3,6,8] c = a.map.with_index { |_, idx| [a[idx], b[idx]] } # [[1, 1], [2, 2], [3, 3], [4, 6], [5, 8]] 確かに動作はしますが
-
PCで『CoD: Warzone』が起動しない時の対処法6選|原因別の解決策を徹底解説
『Call of Duty: Warzone』は、世界中で何百万人ものプレイヤーに愛されているバトルロイヤルアクションゲームです。しかし、いざプレイしようとした瞬間に「Warzoneが起動しない」というエラーに直面すると、非常にストレスを感じますよね。本記事では、さまざまなゲーミングフォーラムで推奨されている専門家の解決策を厳選してまとめました。この1本の記事を参考にするだけで、PCでWarzoneが起動しない問題を解決できるはずです。 PCでWarzoneが起動しない問題を解決する6つの方法 以下に、問題を解決するための方法を順番にご紹介します。すべての方法を実行する必要はありません。各方