【Python】反復法・ヤコビ法を実装

反復法・ヤコビ法・Python

本記事は反復法・ヤコビ法をPythonを利用しながら丁寧に実装しています。ヤコビ法は残念なことにNumpyなどでもメソッドは用意されていないので、実際に0から作成しています。Pythonで反復法・ヤコビ法を実装したい方の力になれば幸いです。

本記事について

本記事はPythonでの反復法・ヤコビ法の実装方法を紹介しています。
大きな連立方程式の場合、ヤコビ法はLU分解などよりも早い処理速度を期待できるのでしばしば利用されます。
ヤコビ法は、用意する行列が対角優位な行列でなければならないことに注意が必要です。

ちなみに、Pythonのバージョンは「3.8.8」です。

全コード

コードの解説はコメントアウトで記載したので参考にしてください。
今回は5次元の連立方程式で解を導きました。

import numpy as np

count = 0
error = 1  # ノルムの差を求める初期値を適当に設定
x_before = np.array([0.5, 0.5, 0.5, 0.5, 0.5])  # 適当に答えに近そうな値を宣言
A = np.array([[4, 1, 1, 0, 1],  # 対角優位な行列を適当に宣言
              [2, 6, -1, 1, 1],
              [1, 2, 7, 2, -1],
              [1, 0, 1, 4, -1],
              [2, -1, 1, 2, 8]])
b = np.array([1, 2, 1, 3, 2])

# Dと(U+L)を作る
D = np.diag(A)
sum_UL = A - np.diagflat(D)

# 解を反復法で求める
while error > 1.0e-7:
    x = (b - (sum_UL@x_before)) / D
    error = np.linalg.norm(x-x_before)
    x_before = x
    count += 1

print(x)
print('反復数:', count)
【実行結果】
[ 0.24677861  0.10308474 -0.12495118  0.72823117  0.03475206]
反復数: 28

ということで本記事は、
Pythonのヤコビ法・反復法についてまとめました。
最後まで読んでいただき、ありがとうございました\(^o^)/

超オススメのPC用品

PCを操作する上で、トラックボールマウスが非常におすすめです!
僕も感動したこのマウスを、騙されたと思って使ってみてください!(^^)

外部モニターで2倍以上の効率化が見込めます!
安いものだと、たったの1万円前後なのでおすすめですよー!\(^o^)/

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です