import numpy as np import matplotlib.pyplot as plt # 二元二次函数 def f(x,y): return x**2+10*y**2import numpy as np import matplotlib.pyplot as plt # 梯度函数 def grad_f(x,y): return np.array([2*x,20*y]) x0 = np.array([10,1]) alphs_k = 0.085 iter_num = 15 x_list = [x0] for i in range(iter_num): x_k = x_list[-1] x_next = x_k - alphs_k*grad_f(x_k[0],x_k[1]) x_list.append(x_next) # 画图 delta = 0.05 x = np.arange(-15.0,15.0,delta) y = np.arange(-5.0,5.0,delta) X,Y = meshgrid(x,y) Z = f(X,Y) fig,ax = plt.subplots() cs = ax.contour(X,Y,Z) ax.calbel(cs,inline=1,fontsize=10) x_list = np.array(x_list) ax.plot(x_list[:,0],x_list[:,1],'-0') plt.show()
时间: 2023-12-05 15:05:22 浏览: 103
import numpy as np import matplotlib.pyplot as plt import math
这段代码实现了梯度下降法求解二元二次函数的最小值,并将迭代过程可视化。
具体来说,代码中定义了二元二次函数 $f(x,y) = x^2 + 10y^2$ 和梯度函数 $\nabla f(x,y) = [2x, 20y]$。然后从初始点 $[10,1]$ 开始进行迭代,每一步都按照梯度下降法的公式 $x_{k+1} = x_k - \alpha_k \nabla f(x_k)$ 计算下一个点的位置,并将每个迭代点的坐标存储在列表 `x_list` 中。
最后,通过 `matplotlib` 库中的 `contour` 函数画出函数的等高线图,并将迭代过程的点以连线的形式绘制在图中,从而展示了梯度下降法逐步接近函数的最小值的过程。
阅读全文