如何用Python实现Sor(Successive Overrelaxation)迭代法?
时间: 2024-10-21 20:15:20 浏览: 195
SOR(Successive Over Relaxation)是一种迭代方法,用于求解线性方程组,特别是在数值计算中解决大型稀疏矩阵系统。在Python中,我们可以利用NumPy库来实现SOR迭代法。这里是一个基本步骤的示例:
```python
import numpy as np
def sor(A, b, omega, max_iter=100, tolerance=1e-6):
"""
A: 系数矩阵 (二维数组)
b: 右侧向量 (一维数组)
omega: 松弛因子 (通常0 < ω < 2)
max_iter: 最大迭代次数
tolerance: 容差值
"""
n = len(b)
x = np.zeros(n) # 初始猜测解
r = b - np.dot(A, x) # 初始残差
old_r_norm = np.linalg.norm(r)
for _ in range(max_iter):
x_new = x + omega * (np.dot(A, x) / A.diagonal()) + (1 - omega) * r / A.diagonal()
r_new = b - np.dot(A, x_new)
if np.linalg.norm(r_new) <= tolerance * old_r_norm:
break
else:
x = x_new
old_r_norm = np.linalg.norm(r_new)
return x_new
# 示例用法
A = np.array([[4, 1], [1, 4]])
b = np.array([5, 5])
omega = 1.5
solution = sor(A, b, omega)
print("Solution:", solution)
```
在这个例子中,我们首先创建了一个系数矩阵`A`和右侧向量`b`,然后设定松弛因子`omega`、最大迭代次数和容差值。在循环中,每次迭代都会更新当前解`x`并计算新的残差,直到满足停止条件(残差足够小或达到最大迭代次数)。最后返回的是近似的解。
阅读全文