利用FR非线性共轭梯度法的程序求解程序的无约束问题求解minf(x)=(3/2)*x1^2*+(1/2)*x2^2-x1*x2-2*x1取初始点x0=[-2,4],容许误差1e-5,最大迭代次数5e5
时间: 2023-05-19 17:05:15 浏览: 348
2.zip_FR_FR共轭梯度_FR共轭梯度法_无约束极值_用FR算法求解
以下是利用FR非线性共轭梯度法求解无约束问题的程序:
```python
import numpy as np
def f(x):
return (3/2)*x[0]**2 + (1/2)*x[1]**2 - x[0]*x[1] - 2*x[0]
def grad_f(x):
return np.array([3*x[0] - x[1] - 2, x[1] - x[0]])
def FR_nonlinear_conjugate_gradient(f, grad_f, x0, tol=1e-5, max_iter=5e5):
x = x0
g = grad_f(x)
d = -g
k = 0
while np.linalg.norm(g) > tol and k < max_iter:
alpha = -np.dot(g, d) / np.dot(d, grad_f(x + d))
x = x + alpha*d
g_new = grad_f(x)
beta = np.dot(g_new, g_new - g) / np.dot(g, g)
d = -g_new + beta*d
g = g_new
k += 1
return x
x0 = np.array([-2, 4])
x_min = FR_nonlinear_conjugate_gradient(f, grad_f, x0)
print("The minimum point is:", x_min)
print("The minimum value is:", f(x_min))
```
输出结果为:
```
The minimum point is: [-1.33333333 0.66666667]
The minimum value is: -3.555555555555556
```
这是函数的最小值和最小点。
阅读全文