0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Pythonで「逐次近似法」を使って方程式を解くプログラムを作成してみた

Posted at

はじめに

こんにちは!今回は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次方程式の解を逐次近似法で求める方法を紹介しました。逐次近似法は非線形方程式の近似解を求める際に非常に有用で、数字だけでなく物理や工学の分野でもよく使われてます。最後まで読んでくださり、ありがとうございました。もし改善点や質問があれば、ぜひコメントしてください!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?