【数值计算方法】线性方程组迭代算法的Python实现

cnblogs 2024-08-07 10:43:00 阅读 80

【数值计算方法】线性方程组迭代算法的Python实现

迭代求解Ax=b,python算法实现,如雅可比迭代法,高斯迭代法,SOR迭代法等等

线性方程组迭代算法的Python实现

jacobi迭代法

<code>

def JacobiIter(A:np.ndarray,

b:np.ndarray,

tol:float=1e-5,

maxIter:int=100)->Tuple[np.ndarray,np.ndarray]:

"""使用Jacobi迭代法求解线性方程组Ax=b

input:

A: np.ndarray, 系数矩阵

b: np.ndarray, 右端常数

tol: float, 误差限

maxIter: int, 最大迭代次数

output:

x: np.ndarray, 解向量

errors: np.ndarray, 误差序列

"""

from numpy import dot

from numpy.linalg import norm

x0=np.zeros(b.shape)

L=-1*np.tril(A,k=-1).copy()

U=-1*np.triu(A,k=1).copy()

D=np.diag(np.diag(A)).copy()

Dinv=np.linalg.inv(D)

errors=[]

for i in range(maxIter):

x_next=dot(Dinv,(dot((L+U),x0)+b))

# error check

error=norm(b-dot(A,x_next),2)/norm(b,2)

errors.append(error)

if error<tol:

return x_next,np.array(errors)

else:

x0=x_next

  • 验证

import numpy as np

from formu_lib import *

A=np.array([[2,-1,0],

[-1,3,-1],

[0,-1,2]])

b=np.array([1,8,-5])

extractVal=np.array([2,3,-1])

x,er=JacobiIter(A,b)

plotLines([list(range(len(er))),],[er,],["Jacobi iter error"])

showError(x,extractVal)

img

<code>数值解: [ 1.9999746 2.99999435 -1.0000254 ],

精确解: [ 2 3 -1],

误差: 9.719103983280175e-06



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。