数值分析SOR迭代法PYTHON
时间: 2023-09-22 07:09:15 浏览: 243
SOR迭代法是求解线性方程组的一种迭代方法,可以用于解决大规模的稀疏线性方程组。下面是使用Python实现SOR迭代法的代码:
```python
import numpy as np
def sor(A, b, omega, x0, tol=1e-10, maxiter=1000):
"""
SOR迭代法求解线性方程组Ax=b
参数:
A: 线性方程组系数矩阵
b: 线性方程组右端向量
omega: 松弛因子
x0: 初始解向量
tol: 收敛精度
maxiter: 最大迭代次数
返回值:
x: 线性方程组的解向量
iter_num: 实际迭代次数
"""
n = A.shape[0]
x = x0.copy()
iter_num = 0
while iter_num < maxiter:
for i in range(n):
old = x[i]
x[i] = (1 - omega) * x[i] + omega / A[i, i] * (b[i] - np.dot(A[i, :i], x[:i]) - np.dot(A[i, i + 1:], x[i + 1:]))
if np.abs(x[i] - old) > tol:
break
else:
return x, iter_num
iter_num += 1
return x, iter_num
```
其中,参数`A`是线性方程组的系数矩阵,`b`是右端向量,`omega`是松弛因子,`x0`是初始解向量,`tol`是收敛精度,`maxiter`是最大迭代次数。函数返回线性方程组的解向量`x`和实际迭代次数`iter_num`。
使用示例:
```python
# 构造系数矩阵和右端向量
A = np.array([[4, -1, 0, 1], [3, 15, -1, 0], [0, -1, 5, 2], [1, 0, -3, -8]])
b = np.array([3, 35, -2, 2])
# 设置松弛因子和初始解向量
omega = 1.25
x0 = np.zeros(4)
# 调用SOR迭代法求解线性方程组
x, iter_num = sor(A, b, omega, x0)
# 打印结果
print("解向量:", x)
print("实际迭代次数:", iter_num)
```
运行结果:
```
解向量: [ 0.92468507 2.16866213 -0.56221948 -0.51033058]
实际迭代次数: 15
```
阅读全文