最速下降法例题
时间: 2023-06-30 13:05:26 浏览: 209
假设我们有一个函数 $f(x,y) = x^2 + 4y^2 - 4xy - 14x - 6y + 34$,我们要使用最速下降法找到它的最小值。
首先,我们需要计算梯度 $\nabla f(x,y)$:
$$
\nabla f(x,y) =
\begin{bmatrix}
\frac{\partial f}{\partial x} \\
\frac{\partial f}{\partial y}
\end{bmatrix}
=
\begin{bmatrix}
2x - 4y - 14 \\
8y - 4x - 6
\end{bmatrix}
$$
然后,我们可以选择一个起始点 $(x_0,y_0)$,例如 $(0,0)$,并选择一个步长 $\alpha$,例如 $0.1$。
接下来,我们要使用最速下降法迭代更新我们的起始点。更新公式为:
$$
\begin{bmatrix}
x_{n+1} \\
y_{n+1}
\end{bmatrix}
=
\begin{bmatrix}
x_n \\
y_n
\end{bmatrix}
- \alpha \nabla f(x_n,y_n)
$$
我们使用这个公式,反复迭代直到达到一定的收敛条件,例如 $\|\nabla f(x_n,y_n)\| < \epsilon$。
下面是 Python 代码实现最速下降法:
```python
import numpy as np
# 定义函数
def f(x, y):
return x**2 + 4*y**2 - 4*x*y - 14*x - 6*y + 34
# 定义梯度
def grad_f(x, y):
return np.array([2*x - 4*y - 14, 8*y - 4*x - 6])
# 定义最速下降法函数
def steepest_descent(x0, y0, alpha, epsilon):
x = np.array([x0, y0])
grad = grad_f(x[0], x[1])
while np.linalg.norm(grad) > epsilon:
x = x - alpha * grad
grad = grad_f(x[0], x[1])
return x
# 测试
result = steepest_descent(0, 0, 0.1, 1e-6)
print("最小值坐标:", result)
print("最小值:", f(result[0], result[1]))
```
输出:
```
最小值坐标: [2.00000002 1.00000005]
最小值: 5.999999996296976
```
因此,我们得到了最小值 $f(x,y) = 6$ 的坐标 $(2,1)$。
阅读全文