Python数值求解微分方程:欧拉法、隐式欧拉及Runge-Kutta算法实现
本文介绍如何使用Python数值求解形如[[wp:a0]]的微分方程。详细解析了欧拉法、隐式欧拉法、三阶及四阶Runge-Kutta法的实现原理与代码逻辑,并通过具体案例对比各算法的计算结果,为数值分析提供实用的编程参考。
Python求解微分方程概述
首先直接展示相关代码实现。
本文主要探讨如何求解形如
的微分方程。
基础算法:欧拉法
1. 欧拉法
def eluer(rangee,h,fun,x0,y0):
step = int(rangee/h)
x = [x0] + [h * i for i in range(step)]
u = [y0] + [0 for i in range(step)]
for i in range(step):
u[i+1] = u[i] + h * fun(x[i],u[i])
plt.plot(x,u,label = "eluer")
return u改进算法:隐式欧拉法
2. 隐式欧拉法
def implicit_euler(rangee,h,fun,x0,y0):
step = int(rangee/h)
x = [x0] + [h * i for i in range(step)]
u = [y0] + [0 for i in range(step)]
v = ["null"] + [0 for i in range(step)]
for i in range(step):
v[i+1] = u[i] + h * fun(x[i],u[i])
u[i+1] = u[i] + h/2 * (fun(x[i],u[i]) + fun(x[i],v[i+1]))
plt.plot(x,u,label = "implicit eluer")
return u高阶算法:三阶与四阶Runge-Kutta法
3. 三阶Runge-Kutta法
def order_3_runge_kutta(rangee,h,fun,x0,y0):
step = int(rangee/h)
k1,k2,k3 = [[0 for i in range(step)] for i in range(3)]
x = [x0] + [h * i for i in range(step)]
y = [y0] + [0 for i in range(step)]
for i in range(step):
k1[i] = fun(x[i],y[i])
k2[i] = fun(x[i]+0.5*h,y[i]+0.5*h*k1[i])
k3[i] = fun(x[i]+0.5*h,y[i]+2*h*k2[i]-h*k1[i])
y[i+1] = y[i] + 1/6 * h * (k1[i]+4*k2[i]+k3[i])
plt.plot(x,y,label = "order_3_runge_kutta")
return y4. 四阶Runge-Kutta法
def order_4_runge_kutta(rangee,h,fun,x0,y0):
step = int(rangee/h)
k1,k2,k3,k4 = [[0 for i in range(step)] for i in range(4)]
x = [x0] + [h * i for i in range(step)]
y = [y0] + [0 for i in range(step)]
for i in range(step):
k1[i] = fun(x[i],y[i])
k2[i] = fun(x[i]+0.5*h,y[i]+0.5*h*k1[i])
k3[i] = fun(x[i]+0.5*h,y[i]+0.5*h*k2[i])
k4[i] = fun(x[i]+h,y[i]+h*k3[i])
y[i+1] = y[i] + 1/6 * h * (k1[i]+2*k2[i]+2*k3[i]+k4[i])
plt.plot(x,y,label = "order_4_runge_kutta")
return y算法实现与结果对比
5. 结果可视化展示

此外,为了确保计算过程顺利执行,需要引入必要的绘图库支持。
rangee = 1
fun = lambda x,y:y-2*x/y
implicit_euler(rangee,0.0001,fun,0,1)
order_4_runge_kutta(rangee,0.0001,fun,0,1)
order_3_runge_kutta(rangee,0.0001,fun,0,1)
eluer(rangee,0.0001,fun,0,1)
plt.legend()
plt.show()至此,关于Python数值求解微分方程(涵盖欧拉法与隐式欧拉法等)的内容介绍完毕。如需了解更多Python数值求解相关内容,建议查阅本站过往文章或继续浏览后续教程,感谢支持。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













