はじめに
こんにちは!今回はPythonで「逐次近似法(Successive Approximation Method」を使って2次方程式の解を求めてプログラムを紹介します。
逐次近似法とは?
逐次近似法(Successive Approximation Method)とは、非線形方程式の解を近似的に求める方法の1つです。最初に適当な初期値を設定し、その値を用いて繰り返し計算することで、解に収束していくことを期待します。数値計算の分野で、反復的に解を求める手法としてよく用いられます。
実装コード
以下のプログラムでは、2次方程式
ax^2+bx+c=0
の解を2つ異なる方法で求めます。
1.解の公式を使って厳密な解を計算する
→ (solution_of_quadratic_equation 関数)
2.逐次近似法を使って数値的な解を求める
→ (successive_approximations 関数)
from decimal import Decimal
def solution_of_quadratic_equation(a, b, c):
""" 2次方程式の解を公式を使って求める関数 """
a = Decimal(a)
b = Decimal(b)
c = Decimal(c)
tmp = (b**2 - 4*a*c).sqrt()
alpha_ = (-b + tmp) / (2*a)
beta_ = (-b - tmp) / (2*a)
return alpha_, beta_
def successive_approximations(a, b, c, x0=0):
""" 逐次近似法で解を求める関数 """
a = Decimal(a)
b = Decimal(b)
c = Decimal(c)
return ((-b*x0 - c) / a).sqrt()
使用例
実際に2次方程式
2x^2+x+2=0
を解いてみます。
# 定数項を設定
a = 2
b = 1
c = -2
# 厳密解を計算
alpha_, beta_ = solution_of_quadratic_equation(a, b, c)
print(f"alpha_ = {alpha_}")
print(f"beta_ = {beta_}\n")
# 逐次近似法で解を求める
x_n = -2 # 初期値
for i in range(1, 11):
x_n = successive_approximations(a, b, c, x_n)
print(f"x{i} = {x_n}")
実行結果
alpha_ = 0.780776406404415137455352464
beta_ = -1.280776406404415137455352464
x1 = 1.414213562373095048801688724
x2 = 0.5411961001461969843997232055
x3 = 0.8540503204887294624286786226
x4 = 0.7569510154267812783126517302
x5 = 0.7883682466250206356313743134
x6 = 0.7783417480050069125832678413
x7 = 0.7815555808754080822646207510
x8 = 0.7805268794617491959905184153
x9 = 0.7808562993721222468273037687
x10 = 0.7807508247283116873507841482
コードの説明
solution_of_quadratic_equation
2次方程式の解の公式を使用して厳密解を計算しています。Decimal型を使うことで高精度な計算が可能です。
successive_approximations
初期値x0を設定し、逐次近似法を繰り返して解に収束する様子を観察します。
実行結果を見ると、初期値から始まり10回程度の反復で真の解x=1に収束していることが確認できます。
まとめ
今回のプログラムでは、2次方程式の解を逐次近似法で求める方法を紹介しました。逐次近似法は非線形方程式の近似解を求める際に非常に有用で、数字だけでなく物理や工学の分野でもよく使われてます。最後まで読んでくださり、ありがとうございました。もし改善点や質問があれば、ぜひコメントしてください!