最速下降法求解无约束问题代码实现
时间: 2023-11-11 19:04:28 浏览: 102
以下是使用最速下降法求解无约束问题的Python代码实现:
```python
import numpy as np
def f(x):
# 目标函数
return x[0]**2 + x[1]**2 + x[2]**2 - 2*x[0]*x[1] - 2*x[0]*x[2] - 2*x[1]*x[2]
def grad_f(x):
# 目标函数的梯度
return np.array([2*x[0]-2*x[1]-2*x[2], 2*x[1]-2*x[0]-2*x[2], 2*x[2]-2*x[0]-2*x[1]])
def line_search(x, d, f, grad_f, alpha=0.01, beta=0.5):
# 线性搜索
t = 1.0
while f(x + t*d) > f(x) + alpha*t*np.dot(grad_f(x), d):
t = beta*t
return t
def steepest_descent(x0, f, grad_f, max_iter=1000, tol=1e-6):
# 最速下降法
x = x0
for i in range(max_iter):
g = grad_f(x)
if np.linalg.norm(g) < tol:
break
d = -g
t = line_search(x, d, f, grad_f)
x = x + t*d
return x
# 测试
x0 = np.array([1, 1, 1])
x = steepest_descent(x0, f, grad_f)
print(x)
```
其中,`f(x)`表示目标函数,`grad_f(x)`表示目标函数的梯度,`line_search(x, d, f, grad_f, alpha=0.01, beta=0.5)`表示线性搜索函数,`steepest_descent(x0, f, grad_f, max_iter=1000, tol=1e-6)`表示最速下降法函数。在测试中,将初始点设为`[1, 1, 1]`,并输出最优解。
阅读全文