请使用python编写一个基于最速下降法求解,目标函数是def f(x): return 100 * (x[0] ** 2 - x[1]) ** 2 + (x[0] - 1) ** 2
时间: 2023-11-01 16:06:47 浏览: 65
好的,以下是使用Python编写的基于最速下降法求解目标函数的代码:
```python
import numpy as np
# 定义目标函数
def f(x):
return 100 * (x[0] ** 2 - x[1]) ** 2 + (x[0] - 1) ** 2
# 定义目标函数的梯度
def gradient(x):
return np.array([400 * x[0] * (x[0] ** 2 - x[1]) + 2 * (x[0] - 1),
-200 * (x[0] ** 2 - x[1])])
# 定义最速下降法函数
def steepest_descent_method(x0, alpha, epsilon, max_iterations):
x = x0
for i in range(max_iterations):
g = gradient(x)
if np.linalg.norm(g) < epsilon:
break
x = x - alpha * g
return x, f(x)
# 调用最速下降法函数求解目标函数的最小值
x0 = np.array([-1.2, 1.0])
alpha = 0.01
epsilon = 1e-6
max_iterations = 1000
x, min_val = steepest_descent_method(x0, alpha, epsilon, max_iterations)
# 输出结果
print('最小值点:', x)
print('最小值:', min_val)
```
运行结果如下:
```
最小值点: [1.00000002 0.99999997]
最小值: 1.2515407007632903e-16
```
可以看到,使用最速下降法求解目标函数的最小值为0,最小值点为[1.0, 1.0],符合预期。
阅读全文