ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

牛顿法与优化进阶_实战

牛顿法与优化进阶_实战 优化牛顿法优化牛顿法 对导数做牛顿求根importnumpyasnpimportmatplotlib.pyplotasplt plt.rcParams[font.sans-serif][SimHei]plt.rcParams[axes.unicode_minus]Falseprint(success)牛顿法与梯度下降deff(x):return(x-3.0)**21deffp(x):return2*(x-3)deffpp(x):return2.0x00.0x_gd,x_ntx0,x0 eta0.15print(真值 x* 3)print(步 | 梯度下降 | 牛顿法)foriinrange(8):x_gdx_gd-eta*fp(x_gd)x_ntx_nt-fp(x_nt)/fpp(x_nt)print(f{i1:2d}|{x_gd:.4f}|{x_nt:.2f})病态山谷时牛顿法和梯度下降defpath_gd(xy,eta0.08,steps20):hist[xy.copy()]for_inrange(steps):x,yxy gnp.array([2.0*x,20.0*y])xyxy-eta*g hist.append(xy.copy())returnnp.array(hist)defpath_nt(xy):returnnp.vstack([xy,np.zeros(2)])startnp.array([1.6,1.2])pg,pnpath_gd(start),path_nt(start)xsnp.linspace(-2.2,2.2,200)ysnp.linspace(-1.6,1.6,200)X,Ynp.meshgrid(xs,ys)ZX**210*Y**2plt.figure(figsize(8,5))plt.contour(X,Y,Z,levels[0.3,1,3,6,12,20],colors#64748b)plt.plot(pg[:,0],pg[:,1],o-,color#d97706,label梯度下降20步)plt.plot(pn[:,0],pn[:,1],s-,color#16a34a,label牛顿一步到位)plt.legend()plt.gca().set_aspect(equal)plt.title(病态山谷:牛顿一步到位,GD之字形)plt.xlabel(x)plt.ylabel(y)plt.grid(True,alpha0.3)plt.show()print(GD终点,pg[-1],牛顿终点,pn[-1])defpath_gd_c(xy,c,eta0.08,steps15):hist[xy.copy()]foriinrange(steps):x,yxy gnp.array(2.0*x,20*c*y)xyxy-eta*g hist.append(xy.copy())returnnp.array(hist)startnp.array([1.6,1.2])forcin[5.0,10.0,25.0]:ppath_gd_c(start,c)print(fc{c:4.0f}GD 第15步 |y| {abs(p[-1,1]):.3e}牛顿一步到位)逆牛顿直觉# 逆牛顿直觉 : 二阶找的是驻点不是极值deffp(x):returnx**3-xdefnewton(x,steps6):hist[x]for_inrange(steps):h3*x*x-1ifabs(h)1e-12:breakxx-fp(x)/h hist.append(x)returnhistdefsecant(x0,x1,steps6):hist[x0,x1]for_inrange(steps):g0,g1fp(x0),fp(x1)ifabs(g0-g1)1e-12:breakx2x1-g1*(x1-x0)/(g1-g0)x0,x1x1,x2 hist.append(x1)returnhistprint(驻点应该接近 -1 或者0 )print(牛顿 x00.8:,[round(v,6)forvinnewton(0.8)])print(割线0.5,0.8:,[round(v,6)forvinsecant(0.5,0.8)])print(牛顿 x00.1:,[round(v,6)forvinnewton(0.1)],- k靠近0(极大))鞍点xy_ntnp.array([1.2,0.8])gnp.array([2.0*xy_nt[0],2.0*xy_nt[1]])Hnp.array([[2.0,0.0],[0.0,-2.0]])xy_nt_nextxy_nt-np.linalg.solve(H,g)print(牛顿一步:,xy_nt,--,xy_nt_next)xynp.array([1.2,0.8],dtypefloat)print(GD eta 0.8)foriinrange(6):gnp.array([2.0*xy[0],-2.0*xy[1]])xyxy-0.08*gprint(f 第{i1}步{xy})#MCS #Mathematics #Maths #Yibo #翊博 #翊博在这里 #菲尔兹奖 #yibohere
返回列表