如有不对,请批评指正!

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调用Web天气服务
  2. 老虞学GoLang笔记-数组和切片
  3. 关于range方法,如果你觉得python很简单就错了
  4. codeforecs Gym 100286B Blind Walk
  5. 免费旅游项目html,HTML+CSS+JavaScript项目2 “说旅游”专题页制作_0518_连蕊.pptx
  6. sql server 视图_SQL Server –具有引用视图的开发实践
  7. linux 下.bashrc和.profile的区别
  8. inline函数_inline内联函数
  9. 怀念WAP网站和让IE浏览器支持WAP网站
  10. 人工智能数学基础:求导神器--罗必塔法则
  11. JAVA重写和重载的区别
  12. TCP协议之《ACK pingpong交互模式详解》
  13. 微信支付提示微信登录失败:redirect_uri域名与后台配置不一致,错误码:10003
  14. 如此优秀,这18个 Python 高效编程技巧真的太香了
  15. 第12课:如何理解技术管理者(上)
  16. 【Excel 教程系列第 11 篇】Excel 如何快速下拉填充序列至 10000 行
  17. 使用composer开发dfc程序
  18. 旗帜软件工作室2021年年会总结
  19. 中科院计算所上海分所所长孔华威:算力驱动的智能硬件
  20. 莪 、不 � 是 偷 偷 想 � 了 .

热门文章

  1. 【车载以太网】【架构】以太网的分层架构_汽车以太网标准化组织介绍
  2. 【搞定左神算法初级班】第4节:二叉树及相关常见面试题
  3. SpringCloud 服务的搭建与使用
  4. 【讲座笔记】深度学习在通信领域的应用--Byonghyo Shim教授
  5. URLEncoder和URLDecoder实现转码和解码
  6. Android:O泡果奶——来场恶作剧
  7. 倒计时算法(计算剩余多少天)实现
  8. Qt之QDialog禁用右上角关闭按钮
  9. Another git process seems to be running in this repository, e.g. an editor opened by ‘git commit‘. .
  10. R语言非线性模型拟合的注意事项