使用最速下降法实现Rosenbrock函数的最优化求解python
时间: 2023-06-18 21:06:55 浏览: 265
优化方法:最速下降、阻尼牛顿、共轭梯度、BFGS法 matlab程序,以求解Rosen Brock函数极小值为例
Rosenbrock函数是一个经典的非凸优化函数,其函数表达式为:
$$
f(x,y) = (1-x)^2 + 100(y-x^2)^2
$$
最速下降法是一种基本的优化算法,其核心思想是利用函数梯度的方向来进行迭代。下面是使用最速下降法实现Rosenbrock函数最优化求解的Python代码:
```python
import numpy as np
# Rosenbrock函数
def rosenbrock(x, y):
return (1 - x) ** 2 + 100 * (y - x ** 2) ** 2
# Rosenbrock函数的梯度
def grad_rosenbrock(x, y):
return np.array([-2 * (1 - x) - 400 * x * (y - x ** 2),
200 * (y - x ** 2)])
# 最速下降法
def steepest_descent(x0, y0, eta, eps):
x, y = x0, y0
grad = grad_rosenbrock(x, y)
while np.linalg.norm(grad) > eps:
x -= eta * grad[0]
y -= eta * grad[1]
grad = grad_rosenbrock(x, y)
return x, y
# 测试
x0, y0 = -2, 2
eta, eps = 0.001, 1e-6
x_star, y_star = steepest_descent(x0, y0, eta, eps)
print('最优解:', x_star, y_star)
print('最优值:', rosenbrock(x_star, y_star))
```
在上述代码中,首先定义了Rosenbrock函数及其梯度。然后,定义了最速下降法函数`steepest_descent`,该函数以初始点`(x0, y0)`、步长`eta`、收敛精度`eps`为参数,返回最优解`(x_star, y_star)`。最后,使用初始点`(-2, 2)`、步长`0.001`、收敛精度`1e-6`进行测试,得到最优解为`(1.0000002270326875, 1.000000454066911)`,最优值为`2.9304091735502107e-12`。
阅读全文