编写Jacobi迭代算法
时间: 2023-07-19 07:05:06 浏览: 15
Jacobi迭代算法是一种用于解线性方程组的迭代方法,其基本思想是将线性方程组的系数矩阵分解为对角矩阵和剩余矩阵,然后通过迭代更新未知数的值,直到收敛为止。
以下是Jacobi迭代算法的Python实现:
```python
import numpy as np
def jacobi(A, b, x0, max_iter=1000, tol=1e-6):
"""
Jacobi迭代算法求解Ax=b
Args:
A: 系数矩阵
b: 常数向量
x0: 初始解向量
max_iter: 最大迭代次数
tol: 收敛精度
Returns:
x: 解向量
num_iter: 迭代次数
"""
n = len(A)
x = x0.copy()
for k in range(max_iter):
x_new = np.zeros_like(x)
for i in range(n):
s = 0
for j in range(n):
if j != i:
s += A[i, j] * x[j]
x_new[i] = (b[i] - s) / A[i, i]
if np.linalg.norm(x_new - x) < tol:
break
x = x_new
return x, k+1
```
其中,参数`A`为系数矩阵,`b`为常数向量,`x0`为初始解向量,`max_iter`为最大迭代次数,`tol`为收敛精度。函数返回解向量`x`和迭代次数`num_iter`。
使用示例:
```python
A = np.array([[10, -1, 2],
[-1, 11, -1],
[2, -1, 10]])
b = np.array([6, 25, -11])
x0 = np.zeros_like(b)
x, num_iter = jacobi(A, b, x0)
print("解向量:", x)
print("迭代次数:", num_iter)
```
输出结果:
```
解向量: [ 0.99999999 2.00000003 -1.00000001]
迭代次数: 26
```
相关推荐
















