共轭梯度 python
时间: 2025-01-02 07:14:41 浏览: 5
### Python 中实现共轭梯度法
共轭梯度法(Conjugate Gradient Method)是一种用于求解无约束最优化问题的迭代方法,尤其适合于对称正定线性系统的求解[^5]。该方法结合了最速下降法和牛顿法的优点,在较少的迭代次数内能够达到较高的精度。
下面是一个简单的 Python 实现示例:
```python
import numpy as np
def conjugate_gradient(A, b, x0, tol=1e-10, max_iter=1000):
"""
使用共轭梯度法求解 Ax=b
参数:
A (numpy.ndarray): 对称正定矩阵
b (numpy.ndarray): 右端项向量
x0 (numpy.ndarray): 初始猜测解
tol (float): 收敛公差,默认为 1e-10
max_iter (int): 最大迭代次数,默认为 1000
返回:
numpy.ndarray: 解向量 x
"""
n = len(b)
x = x0.copy()
r = b - A @ x
p = r.copy()
for i in range(max_iter):
Ap = A @ p
alpha = np.dot(r, r) / np.dot(p, Ap)
x += alpha * p
r_new = r - alpha * Ap
if np.linalg.norm(r_new) < tol:
break
beta = np.dot(r_new, r_new) / np.dot(r, r)
p = r_new + beta * p
r = r_new
return x
# 测试例子
A = np.array([[4, 1], [1, 3]], dtype=float)
b = np.array([1, 2], dtype=float)
x0 = np.zeros_like(b)
solution = conjugate_gradient(A, b, x0)
print("Solution:", solution)
```
此代码实现了基本的共轭梯度算法来求解给定系数矩阵 \(A\) 和右端项 \(b\) 的线性方程组 \(Ax=b\)[^1]。通过调整参数 `tol` 和 `max_iter` 来控制收敛条件以及最大允许的迭代次数。
阅读全文