使用最速下降法求解f(x,y)=x^3-y^3+9xy的最小值,以python代码给出并画图
时间: 2024-11-06 22:20:53 浏览: 16
最速下降法是一种迭代优化算法,用于寻找函数的局部极小值。对于给定的函数f(x, y) = x^3 - y^3 + 9xy,我们可以使用梯度下降的方式来逐步逼近最小值点。首先,需要计算该函数的偏导数来找到梯度方向。以下是Python代码实现这一过程,并利用matplotlib库绘制函数图像以及下降路径:
```python
import numpy as np
import matplotlib.pyplot as plt
# 定义函数和梯度
def f(x, y):
return x**3 - y**3 + 9 * x * y
def gradient_f(x, y):
dfdx = 3 * x**2 + 9 * y
dfdy = -3 * y**2 + 9 * x
return dfdx, dfdy
# 初始化点
x, y = np.array([5., 5.]) # 初始猜测点
learning_rate = 0.1 # 学习率
iterations = 100 # 迭代次数
# 计算和绘制函数图像
xx, yy = np.meshgrid(np.linspace(-10, 10, 100), np.linspace(-10, 10, 100))
z = f(xx, yy)
plt.contourf(xx, yy, z, cmap='coolwarm')
plt.colorbar()
plt.title('Function f(x, y)')
plt.xlabel('x'), plt.ylabel('y')
plt.show()
# 梯度下降迭代
for _ in range(iterations):
grad_x, grad_y = gradient_f(x, y)
x -= learning_rate * grad_x
y -= learning_rate * grad_y
# 可视化下降路径
plt.scatter(x, y, color='red', marker='o', label='Iteration %d' % (_ + 1))
# 最终结果
min_val = f(x, y)
print(f"Minimum value at (x, y) = ({x:.2f}, {y:.2f}) with a value of {min_val:.2f}")
# 添加最终点到图表
plt.plot(x, y, 'ro', markersize=10, label='Final minimum')
plt.legend()
plt.show()
```
这个脚本会先生成函数的等高线图,然后通过梯度下降更新点的位置并在每次迭代后将点添加到图形上,直到达到预设的迭代次数。运行此代码后,你会看到函数图像及下降路径,并得到最小值点及其对应的函数值。
阅读全文