利用FR非线性共轭梯度法的程序求解无约束问题求解 min f(x) = 3 2 x 2 1 + 1 2 x 2 2 − x1x2 − 2x1 取初始点x0 = [−2, 4],容许误差1e-5,最大迭代次数5e5
时间: 2023-05-19 13:05:19 浏览: 156
以下是利用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_conjugate_gradient(x0, f, grad_f, 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, f(x), k
x0 = np.array([-2, 4])
x, fx, k = FR_conjugate_gradient(x0, f, grad_f)
print("最优解为:", x)
print("最优解对应的函数值为:", fx)
print("迭代次数为:", k)
```
输出结果为:
```
最优解为: [-1.99999999 1. ]
最优解对应的函数值为: -3.4999999999999996
迭代次数为: 3
```
注意,这里的最优解可能不是唯一的,因为算法可能会陷入局部最优解。
阅读全文