Python数值求解微分方程方法(欧拉法,隐式欧拉)

 更新时间:2022年09月01日 09:51:13   作者:Chandler_river  
这篇文章主要介绍了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

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 y

4.四阶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数值求解微分方程内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 利用python爬取斗鱼app中照片方法实例

    利用python爬取斗鱼app中照片方法实例

    最近在学习python,通过实践是学习的一个好办法,下面这篇文章就来给大家介绍了关于利用python爬取斗鱼app中照片的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友下面来一起看看吧。
    2017-12-12
  • python3爬取各类天气信息

    python3爬取各类天气信息

    这篇文章主要为大家详细介绍了python3爬取各类天气信息,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • Python虚拟环境迁移的实现

    Python虚拟环境迁移的实现

    本文主要介绍了Python虚拟环境迁移的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • 浅谈python socket函数中,send与sendall的区别与使用方法

    浅谈python socket函数中,send与sendall的区别与使用方法

    下面小编就为大家带来一篇浅谈python socket函数中,send与sendall的区别与使用方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • NumPy实现ndarray多维数组操作

    NumPy实现ndarray多维数组操作

    NumPy一个非常重要的作用就是可以进行多维数组的操作,这篇文章主要介绍了NumPy实现ndarray多维数组操作,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • pip 安装库比较慢的解决方法(国内镜像)

    pip 安装库比较慢的解决方法(国内镜像)

    对于Python开发用户来讲,PIP安装软件包是家常便饭。但国外的源下载速度实在太慢,浪费时间。而且经常出现下载后安装出错问题,所以把PIP安装源替换成国内镜像,可以大幅提升下载速度,还可以提高安装成功率
    2019-10-10
  • Python 制作糗事百科爬虫实例

    Python 制作糗事百科爬虫实例

    本文是结合前面的三篇关于python制作爬虫的基础文章,给大家分享的一份爬取糗事百科的小段子的源码,有需要的小伙伴可以参考下
    2016-09-09
  • Python抓新型冠状病毒肺炎疫情数据并绘制全国疫情分布的代码实例

    Python抓新型冠状病毒肺炎疫情数据并绘制全国疫情分布的代码实例

    在本篇文章里小编给大家整理了一篇关于Python抓新型冠状病毒肺炎疫情数据并绘制全国疫情分布的代码实例,有兴趣的朋友们可以学习下。
    2020-02-02
  • Python中的random函数实例详解

    Python中的random函数实例详解

    random模块提供生成伪随机数的函数,在使用时需要导入random模块,这篇文章主要介绍了Python中的random函数,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-02-02
  • Scrapy框架中的Pipeline使用详解

    Scrapy框架中的Pipeline使用详解

    这篇文章主要介绍了Scrapy框架中的Pipeline使用详解,Scrapy 中的 Pipeline 为我们提供了处理数据的功能,在实际开发中我们经常使用它来清洗/验证数据、去重和数据保存,需要的朋友可以参考下
    2023-10-10

最新评论