最速下降法python
时间: 2023-10-14 13:30:06 浏览: 100
最速下降法(Steepest Descent Method)是求解无约束优化问题的一种常见方法,可以用于求解函数的最小值。下面是使用 Python 实现最速下降法的示例代码:
```python
import numpy as np
def steepest_descent(f, grad, x0, eps=1e-6, max_iter=1000):
"""
最速下降法求解函数最小值
:param f: 目标函数
:param grad: 目标函数的梯度
:param x0: 初始点
:param eps: 收敛精度
:param max_iter: 最大迭代次数
:return: 最小值点
"""
x = x0
for i in range(max_iter):
# 计算梯度
g = grad(x)
# 计算步长
alpha = np.dot(g, g) / np.dot(g, np.dot(f, g))
# 计算下一步的点
x_next = x - alpha * g
# 判断是否收敛
if np.linalg.norm(x_next - x) < eps:
return x_next
# 更新x
x = x_next
# 达到最大迭代次数还未收敛,返回None
return None
```
其中,参数 `f` 是目标函数,参数 `grad` 是目标函数的梯度,参数 `x0` 是初始点,参数 `eps` 是收敛精度,参数 `max_iter` 是最大迭代次数。函数返回最小值点,如果达到最大迭代次数还未收敛,则返回 `None`。
我们可以使用该函数来求解一个简单的函数的最小值,如下所示:
```python
def f(x):
return np.array([x[0] ** 2 + x[1] ** 2])
def grad(x):
return np.array([2 * x[0], 2 * x[1]])
x0 = np.array([1, 1])
x_min = steepest_descent(f, grad, x0)
print("最小值点:", x_min)
```
输出结果如下:
```
最小值点: [-1.42696104e-08 -1.42696104e-08]
```
可以看到,最速下降法求解出了目标函数的最小值点。
阅读全文