雅克比迭代法python代码及算法伪代码
时间: 2023-05-14 09:02:53 浏览: 279
雅克比迭代法是解线性方程组的一种迭代方法,它以迭代的方式逼近方程的解,直到满足一定精度或次数要求为止。本篇文章将介绍雅克比迭代法的算法伪代码和Python实现。
算法伪代码如下:
输入:系数矩阵A和常数向量b,迭代次数M和误差容限ε
输出:n元线性方程组Ax=b的解x
初始化向量x(0),k=0
重复直到k>=M或误差小于ε:
k=k+1
对于每个分量i,计算:x(i)(k)=(bi-Σ(a(i,j)*x(j)(k-1)))/a(i,i),j=i+1,……,n
计算误差:err=|x(k)-x(k-1)|2 / |x(k)|2
返回向量x(k)
Python代码如下:
```python
import numpy as np
def jacobi(A, b, x0, M, eps):
n = len(b)
x = x0.copy()
for k in range(M):
# 计算下一轮迭代的 x
for i in range(n):
x[i] = (b[i]-np.dot(A[i,:i],x0[:i])-np.dot(A[i,i+1:],x0[i+1:]))/A[i,i]
# 判断是否满足精度要求
err = np.linalg.norm(x-x0)/np.linalg.norm(x)
if err < eps:
return x, k+1
# 更新 x0
x0 = x.copy()
return x, k+1
```
其中,A是系数矩阵,b是常数向量,x0是初始解向量,M是最大迭代次数,eps是精度容限。
在算法实现中,首先将x0复制一份作为迭代的初始向量x,然后进行迭代:
$$x_i^{(k)}=\frac{b_i-\sum\limits_{j=1,j\neq i}^na_{ij}x_j^{(k-1)}}{a_{ii}},\ i=1,2,\cdots,n$$
每完成一轮迭代,计算误差:
$$err=\frac{\left\Vert x^{(k)}-x^{(k-1)} \right\Vert_2}{\left\Vert x^{(k)} \right\Vert_2}$$
如果误差小于预设值eps,则返回当前解x和完成的迭代次数k。如果迭代次数到达最大次数M仍未满足精度要求,则返回当前解x和迭代次数k。
阅读全文