文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-04-02 19:55

关注

不说什么,先上代码

这里先求解形如的微分方程

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

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯