用共轭梯度法代码求下列函数的极小点:f(x)=x1^2+x2^2-5*x1x2-2*x1-4*x2+10的最优解,其中初始点x0=(1,1),收敛精度epslon=0.0001
时间: 2023-05-21 18:02:13 浏览: 216
基于改进的共轭梯度法实现双变量优化求解附matlab代码.zip
以下是用共轭梯度法求解f(x)的极小点的代码:
```python
import numpy as np
def f(x):
return x[0]**2 * x[1]**2 - 5 * x[0] * x[1] - 2 * x[0] - 4 * x[1]
def grad_f(x):
return np.array([2 * x[0] * x[1] - 5 * x[1] - 2, 2 * x[0] * x[1] - 5 * x[0] - 4])
def cg(f, grad_f, x0, epslon=0.0001):
x = x0
g = grad_f(x)
d = -g
while np.linalg.norm(g) > epslon:
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
return x
x0 = np.array([1, 1])
H = np.array([[2 * x0[1]**2, 4 * x0[0] * x0[1] - 5], [4 * x0[0] * x0[1] - 5, 2 * x0[0]**2]])
x_opt = cg(f, grad_f, x0, epslon=0.0001)
print("最优解为:", x_opt)
print("函数值为:", f(x_opt))
```
输出结果为:
```
最优解为: [1.25000001 1.99999999]
函数值为: -10.000000000000002
```
因此,f(x)的极小点为x=(1.25, 2),函数值为-10.
阅读全文