☰
泰勒展开与近似_小实战
2026/9/30 1:59:37 网站建设 项目流程

泰勒展开与牛顿法

泰勒展开: 用多项式逼近sin()

deftaylor_sin(x,n):s=0forkinrange(n):s+=(-1)**k*x**(2*k+1)/factorial(2*k+1)returns x=np.linspace(-4,4,200)plt.figure(figsize=(10,6))plt.plot(x,np.sin(x),'k-',linewidth=3,label='sin(x) 真值')fornin[1,3,5,7]:plt.plot(x,taylor_sin(x,n),'--',label=f'泰勒 n={n}取{n}项')plt.ylim(-2.5,2.5)plt.legend()plt.grid(True)plt.title('sin(x) 的泰勒逼近:阶数越高越准')# 验算误差x_test=2.0true_val=np.sin(x_test)print('x = 2,sin(2) =',true_val)fornin[1,2,3,5,8,12]:approx=taylor_sin(x_test,n)err=abs(approx-true_val)print(f"n={n:d}项:近似={approx:.4f},误差={err:.4f}")

麦克劳林展开式 计算e^x

defmkll_exp(x,n):returnsum(x**k/factorial(k)forkinrange(n))x=np.linspace(-2,2,200)plt.figure(figsize=(10,6))plt.plot(x,np.sin(x),'k-',linewidth=3,label='e^x 真值')fornin[1,2,3,5,8]:plt.plot(x,mkll_exp(x,n),'--',label=f' n={n}取{n}项')plt.ylim(-1,8)plt.legend()plt.grid(True)plt.title('sin(x)的麦克劳林逼近')# 验算逼近值fornin[1,2,3,5]:print(f'n={n}:e^0.1 ={mkll_exp(0.1,n):.7f}')print(f"真值 e^0.1 ={np.exp(0.1):.7f}")

牛顿法 (求根号2)

defnewton_sqrt2(x0=1.5,iters=8):x=x0 hist=[x]foriinrange(iters):x=x-(x**2-2)/(2*x)hist.append(x)print(f"第{i+1}步:x={x:.10f},误差={abs(x-2**0.5)}")returnx,histprint('真实 sqrt(2) = ',2**0.5)print()final,hist=newton_sqrt2(1.5,8)deff(x):returnx**2-2deffp(x):return2*x x=np.linspace(0.5,2.5,200)plt.figure(figsize=(10,6))plt.plot(x,f(x),'b-',linewidth=2,label='f(x)=x^2-2')plt.axhline(0,color='gray',linewidth=1)x_cur=1.5foriinrange(5):fx,fpx=f(x_cur),fp(x_cur)x_tan=np.linspace(x_cur-0.7,x_cur+0.3,50)plt.plot(x_tan,fx+fpx*(x_tan-x_cur),'r--',alpha=0.7)plt.plot(x_cur,fx,'go',markersize=8)x_next=x_cur-fx/fpx plt.annotate('',xy=(x_next,0),xytext=(x_next,f(x_next)),arrowprops=dict(arrowstyle='->',color='green'))x_cur=x_next plt.plot(2**0.5,0,'k*',markersize=15,label='真值根号2')plt.ylim(-2.5,3)plt.legend()plt.grid(True)plt.title("牛顿法")plt.show()

梯度下降与牛顿法的比较

deff_opt(x):return(x-3)**2+1deffp_opt(x):return2*(x-3)deffpp_opt(x):return2x0=0.0x_gd=x0 eta=0.1history_tg=[]foriinrange(20):x_gd=x_gd-eta*fp_opt(x_gd)history_tg.append((i,x_gd))print(f"梯度下降20步:x={x_gd:.6f}(真值为3)")x_nt=x0 history_nt=[]foriinrange(5):x_nt=x_nt-fp_opt(x_nt)/fpp_opt(x_nt)history_nt.append((i,x_nt))print(f"牛顿法5步:x={x_nt:.6f}(真值为3)")# 图像展示x=np.linspace(0,5,500)y=f_opt(x)gd_x=[item[1]foriteminhistory_tg]gd_y=[f_opt(v)forvingd_x]nt_x=[item[1]foriteminhistory_nt]nt_y=[f_opt(v)forvinnt_x]plt.figure(figsize=(10,6))plt.plot(x,y,label=r"$f(x)=(x-3)^2+1$")plt.plot(gd_x,gd_y,"o-",label="梯度下降",markersize=4)plt.plot(nt_x,nt_y,"s-",label="牛顿法",markersize=5)plt.scatter([3],[1],marker="*",s=200,label="最优点 (3, 1)")plt.scatter([x0],[f_opt(x0)],marker="x",s=100,label="起点 (0, 10)")plt.xlabel("x")plt.ylabel("f(x)")plt.title("梯度下降与牛顿法的优化过程")plt.grid(alpha=0.3)plt.legend()plt.tight_layout()plt.show()


#MCS #Mathematics #Maths #Yibo #翊博 #翊博在这里 #菲尔兹奖 #yibohere

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询