共轭梯度法python代码
时间: 2023-10-12 20:11:58 浏览: 158
以下是共轭梯度法的Python代码示例:
```
import numpy as np
# 构造函数 f(x) = x^2 + y^2 - 2x - 4y + 4
def f(x):
return x[0]**2 + x[1]**2 - 2*x[0] - 4*x[1] + 4
# 梯度函数 grad_f(x) = [2x - 2, 2y - 4]
def grad_f(x):
return np.array([2*x[0] - 2, 2*x[1] - 4])
# 共轭梯度法
def conjugate_gradient(f, grad_f, x0, max_iterations=1000, tol=1e-6):
x = x0
g = -grad_f(x)
d = g
for i in range(max_iterations):
alpha = np.dot(g, g) / np.dot(d, np.dot(H, d))
x = x + alpha*d
g_new = -grad_f(x)
beta = np.dot(g_new, g_new) / np.dot(g,g)
d = g_new + beta*d
g = g_new
if np.linalg.norm(g) < tol:
break
return x
# 测试共轭梯度法
x0 = np.array([0, 0])
result = conjugate_gradient(f, grad_f, x0)
print(result)
```
这段代码是一个简单的共轭梯度法的实现,用于求解一个二次函数的最小值。如果您有其他问题或需要更多解释,请随时问我!
阅读全文