共轭梯度法求二次函数的极小点的python代码
时间: 2024-05-08 11:18:39 浏览: 11
以下是共轭梯度法求解二次函数极小点的 Python 代码:
```python
import numpy as np
# 定义二次函数 f(x) 和梯度函数 f'(x)
def f(x):
return x[0]**2 + 2*x[1]**2 + 3*x[0]*x[1] + 4*x[0] + 5
def gradient(x):
return np.array([2*x[0] + 3*x[1] + 4, 4*x[1] + 3*x[0]])
# 共轭梯度法求解极小值点
def conjugate_gradient(f, gradient, x0, eps=1e-6):
x = x0.copy()
g = -gradient(x)
d = g
while np.linalg.norm(g) > eps:
alpha = np.dot(g, g) / np.dot(d, np.dot(H, d))
x = x + alpha*d
g_new = -gradient(x)
beta = np.dot(g_new, g_new) / np.dot(g, g)
d = g_new + beta*d
g = g_new
return x
# 测试代码
x0 = np.array([0.0, 0.0])
xmin = conjugate_gradient(f, gradient, x0)
print("极小点(x, y) = ({:.4f}, {:.4f})".format(xmin[0], xmin[1]))
print("函数极小值为 {:.4f}".format(f(xmin)))
```
注意:此代码仅作为示例提供,并不能保证在所有情况下都能正确求解极小值点。在实际应用中,需要根据具体问题进行调整和优化。