如有不对,请批评指正!

1. 显式Euler和隐式Euler

2. 改进的Euler

3. 龙格-库塔(Runge-Kutta)

4. 举个栗子


代码仅为了说明计算过程,并未进行优化!

import math
import matplotlib.pyplot as plty_e = []  # 显式
y_i = []  # 隐式
y_pro = []  # 改进
y_p = []  # 改进
y_rk = []  # 龙格-库塔
y_c = []  # 解析解
x = []
h = 0.1  # 步长
num = 20def fun(x0, y0):return -2 * x0 / y0 + y0def Euler():print('{:>3s}{:>8s}{:>9s}{:>12s}{:>9s}{:>9s}'.format('x', 'y_e', 'y_i', 'y_pro', 'y_rk', 'y_c'))for i in range(num):# 显示Eulery_e.append(round(y_e[i] + h * fun(x[i], y_e[i]), 5))# 隐式Eulery_i1 = y_i[i] + h * fun(x[i], y_i[i])y_i2 = y_i[i] + h * fun(x[i + 1], y_i1)while abs(y_i2 - y_i1) > 1e-6:y_i1 = y_i2y_i2 = y_i[i] + h * fun(x[i + 1], y_i1)y_i.append(y_i2)# 改进Eulery_p.append(y_pro[i] + h * fun(x[i], y_pro[i]))y_pro.append(round(y_pro[i] + h / 2 * (fun(x[i], y_pro[i]) + fun(x[i + 1], y_p[i])), 5))# 龙格-库塔k1 = fun(x[i], y_rk[i])k2 = fun(x[i] + h / 2, y_rk[i] + h / 2 * k1)k3 = fun(x[i] + h / 2, y_rk[i] + h / 2 * k2)k4 = fun(x[i] + h, y_rk[i] + h * k3)y_rk.append(round(y_rk[i] + h / 6 * (k1 + 2 * k2 + 2 * k3 + k4), 5))# 解析解y_c.append(round(math.sqrt(1 + 2 * x[i + 1]), 5))print('{}{:>10f}{:>10f}{:>10f}{:>10f}{:>10f}\n'.format(round(x[i + 1], 1),y_e[i + 1],y_i[i + 1],y_pro[i + 1],y_rk[i + 1],y_c[i + 1]))plt.plot(x, y_e, label='Euler_Explicit', color='r', marker='+')plt.plot(x, y_i, label='Euler_Implicit', color='c', marker='>')plt.plot(x, y_pro, label='Euler_Improvement', color='b', marker='3')plt.plot(x, y_rk, label='Euler_RungeKutta', color='m', marker='d')plt.plot(x, y_c, label='Analytical solution', color='g', marker='o')plt.legend()plt.show()if __name__ == '__main__':# 初始值x.append(0.0)y_e.append(1)  # 显式y_i.append(1)  # 隐式y_pro.append(1)  # 改进y_rk.append(1)  # 龙格-库塔y_c.append(1)  # 解析解for i in range(num):x.append(round(x[0] + (i + 1) * h, 1))Euler()

5. 运行结果

num = 6时


num = 20

参考:代码实现:显示欧拉、隐式欧拉、改进欧拉、龙格库塔法

如有不对,敬请批评指正!
(转载文章请注明作者和出处)

欧拉方法python代码实现相关推荐

  1. 【微分方程数值解】常微分方程(一)欧拉方法和改进欧拉方法(附python算例,封装类)

    欧拉方法与改进欧拉方法 一.算法原理 对给定微分方程 {y′=f(x,y)y(x0)=y0(1)\begin{cases} y' = f(x,y)\\ y(x_0) = y_0 \end{cases} ...

  2. 微分方程的数值解法之欧拉方法

    '''欧拉方法''' #所求常微分方程 f_x=input('y\'=') def fy(x,y):return eval(f_x)#原方程的精确解 f_e=input('y =') def fe(x ...

  3. 图形学笔记(二十)粒子、刚体、流体的模拟—— 欧拉方法、Errors 和 Instability、中点法、自适应步长、隐式欧拉方法、Runge-Kutta方法、刚体与流体模拟(质点法、网格法、MPM)

    图形学笔记(十九)粒子.刚体.流体的模拟-- 欧拉方法.Errors 和 Instability.中点法.自适应步长.隐式欧拉方法.Runge-Kutta方法.刚体与流体模拟(质点法.网格法.MPM) ...

  4. 6.1 欧拉方法与改进欧拉方法

    6.1.1 欧拉方法 欧拉方法是一种数值解常微分方程(ODE)的方法,可以用于近似求解给定的初值问题.它是以欧拉命名的瑞士数学家莱昂哈德·欧拉所发明的,因此得名. 欧拉方法的基本思路是将连续的常微分方 ...

  5. 欧拉函数-matlab代码

    欧拉函数-matlab代码 对正整数n,欧拉函数是小于或等于n的正整数中与n互质的数的数目.下面给出matlab代码 function result=Eulerformula(n) %欧拉函数 res ...

  6. 计算机图形学【GAMES-101】14、动画(物理模拟、质点弹簧系统、粒子系统、运动学、动作捕捉、欧拉方法)

    快速跳转: 1.矩阵变换原理Transform(旋转.位移.缩放.正交投影.透视投影) 2.光栅化(反走样.傅里叶变换.卷积) 3.着色计算(深度缓存.着色模型.着色频率) 4.纹理映射(重心坐标插值 ...

  7. 隐式欧拉解常微分方程c语言,利用欧拉方法求常微分方程近似数值解.doc

    利用欧拉方法求常微分方程近似数值解,欧拉微分方程,欧拉运动微分方程,欧拉平衡微分方程,欧拉型微分方程,微分方程的欧拉算法,微分方程的欧拉解法,欧拉型常微分方程,偏微分方程数值解,微分方程数值解法 利用 ...

  8. matlab:欧拉方法求解微分方程

    参考书籍:常用数值算法及其matlab实现,作者:夏省祥 %第10章 常微分方程初值问题的数值解法 %欧拉方法,例10.1 %书籍:常用数值算法及其matlab实现 %第10章 常微分方程初值问题的数 ...

  9. [计算机图形学]动画与模拟:欧拉方法、刚体与流体(前瞻预习/复习回顾)

    一.前言 这是本专栏的倒数第二篇文章了,为什么不是最后一篇?因为我要单独写一篇总结哈哈,不管怎么说,从今年的3.13的MVP变换开始写,写到现在,也是一个很大的工程了,我很高兴能在大二下学期的期中这个 ...

最新文章

  1. java mongodb 使用MongoCollection,BasicDBObject 条件查询
  2. 从frame跳转到一个新的页面
  3. PHP魔术常量trait
  4. VS Code的Error: Running the contributed command: ‘_workbench.downloadResource‘ failed解决
  5. 一文讲尽门面日志slf4j和log4j、log4j2、logback依赖jar引用关系
  6. Delphi 7下IGDIPlus库的使用
  7. java volatile 原子性_为什么volatile不能保证原子性而Atomic可以?
  8. synchronized同步机制
  9. 真香 Jenkins 主从模式解决问题So Easy~
  10. linux定位到文件,locate 在linux下快速定位文档
  11. Codeblocks中文乱码解决方法。
  12. Nginx 配置虚拟主机
  13. Swift - 通过url地址打开web页面
  14. linux 通知线程退出,[Linux线程]多线程的阻塞和退出
  15. 2005/2006/2007/2008/2009/2010/2012/2013/2014/2015/2016/2017/2018/2019/2020高德poi一级类别 二级类别 三级类别
  16. 有限元分析基本理论问答
  17. 聚焦应对最新网络安全挑战,2022 BLACK HAT- OMDIA分析师大会报告开放申请
  18. C#-Event事件
  19. 控件(五)——Gridview控件以SqlDataSource控件为数据源实现换肤功能
  20. hover效果移除时元素还原太生硬的情况

热门文章

  1. Lab 色彩模型和取值范围
  2. mmdetection学习笔记(二)配置文件详解
  3. TokenInsight APP 来啦
  4. Spark sql 读文件的源码分析
  5. C++判断一棵树是否为BST(二叉排序树、搜索树)
  6. 候选码mysql_数据库中 码、候选码、主码 的区别
  7. ERROR: Removing unused resources requires unused code shrinking to be turned on. See http://d.androi
  8. matlab编程电路题,matlab经典编程例题
  9. python随机数集合_python随机数学习
  10. MATLAB之用黄金分割法求函数极小点