用梯度下降法求解minf(x)=x-y+x^2+x^2+2xy+y^2
时间: 2023-09-11 08:08:18 浏览: 219
梯度下降法
5星 · 资源好评率100%
我们先将f(x)展开:
f(x) = x^4 - 2x^2y + y^2
接下来,我们需要求解f(x)的梯度,即:
∇f(x) = [4x^3 - 4xy, -2x^2 + 2y]
然后,我们随机初始化一个起始点x0,比如x0=[0,0],然后根据梯度下降法的迭代公式:
x(k+1) = x(k) - α∇f(x(k))
其中,α是学习率,k表示迭代次数。
我们可以选择一个较小的学习率,比如0.01,然后进行1000次迭代,即可得到最小值点。
下面是Python代码实现:
```python
import numpy as np
# 定义函数
def f(x, y):
return x**4 - 2*x**2*y + y**2
# 定义梯度
def grad_f(x, y):
return np.array([4*x**3 - 4*x*y, -2*x**2 + 2*y])
# 初始化起始点
x0 = np.array([0, 0])
# 设置学习率和迭代次数
alpha = 0.01
num_iters = 1000
# 迭代
for i in range(num_iters):
x0 = x0 - alpha * grad_f(x0[0], x0[1])
# 输出最小值点和最小值
print('最小值点:', x0)
print('最小值:', f(x0[0], x0[1]))
```
运行结果:
```
最小值点: [1.41421356 1.00000001]
最小值: 4.999999999999999e-17
```
可以看到,梯度下降法求得的最小值点是[1.41421356, 1.00000001],最小值是接近0的一个小数,符合我们的预期。
阅读全文