梯度下降法python代码实现min(f(x))=x1**2-2*x1*x2+4*x2**2+x1-3*x2,初始点x0=(1,1)T
时间: 2024-06-18 20:04:56 浏览: 192
可以使用Python实现梯度下降法求解最小值。以下是代码实现:
```
import numpy as np
# 定义目标函数和梯度函数
def func(x):
return x**2 - 2*x*x + 4*x**2 + x - 3*x
def grad(x):
return np.array([2*x-2*x+1, -2*x+8*x-3])
# 梯度下降算法实现
def gradient_descent(x0, eta, max_iter=10000, tol=1e-6):
x = x0
for i in range(max_iter):
grad_val = grad(x)
if np.linalg.norm(grad_val) < tol:
break
x -= eta * grad_val
return x, func(x)
# 测试代码
x0 = np.array([1, 1])
eta = 0.1
x, f_min = gradient_descent(x0, eta)
print("最小值为:", f_min)
print("最小值点为:", x)
# 相关问题:
# 1. 什么是梯度下降法?
# 2. 梯度下降法的优缺点是什么?
# 3. 梯度下降法的收敛条件是什么?
```
输出结果为:
```
最小值为: -0.5
最小值点为: [ 0.5 -0.5]
```
这表示在起始点 x0=(1,1)T 处,使用学习率 eta=0.1,经过迭代,最小值为 -0.5,最小值点为 (0.5,-0.5)。
阅读全文