码迷,mamicode.com
首页 > 其他好文 > 详细

求解高阶微分方程

时间:2020-03-06 23:48:36      阅读:85      评论:0      收藏:0      [点我收藏+]

标签:添加   必须   title   目录   fun   toc   his   code   质量   

ODE45 求解高阶微分方程

最近困惑我一周的高阶微分方程求解,特地来总结一下,给有需要的同志们!

(特此说明,官网有纰漏, 存在问题, 需要修改, 我最后会说哪里出问题了)

ode45是什么

? 所有 MATLAB ODE 求解器都可以解算 y′=f(t,y) 形式的方程组,或涉及质量矩阵 M(t,y)y′=f(t,y) 的问题。求解器都使用类似的语法。ode45 是一个通用型 ODE 求解器,是您解算大多数问题时的首选。但是,对于刚性问题或需要较高准确性的问题,其他 ODE 求解器可能更适合。

ode45能干什么

? 求解几乎能遇到的大多数微分方程, 一阶,二阶,三阶甚至多阶微分方程

ode45怎么用

语法

[t,y] = ode45(odefun,tspan,y0)
[t,y] = ode45(odefun,tspan,y0,options)
[t,y,te,ye,ie] = ode45(odefun,tspan,y0,options)

只知道语法远远不够, 因为里面各个项都不知道是什么,先简要介绍,下面给个demo:

odefun就是使用代换法,将你高阶方程转化为一阶方程对应的函数;
tspan就是微分的解范围, 尽量缩小, 不然电脑要爆炸;

y0是你能计算的方程解;

高阶 ODE通用解法

MATLAB ODE 求解器仅可解算一阶方程。您必须使用常规代换法,将高阶 ODE 重写为等效的一阶方程组

y1=y

y2=y

y3=y′′?

这些代换将生成一个包含 n 个一阶方程的方程组

y′1=y2

y′2=y3??????????

y′n=f(t,y1,y2,...,y**n*).

Demo1

考虑三阶 ODE

y′′′?y′′y+1=0.

使用代换法

y1=y

y2=y

y3=y′′

生成等效的一阶方程组

y′1=y2y′2=y3y′3=y1?y*3?1.

此方程组的代码则为

function dydt = f(t,y)
dydt(1) = y(2);
dydt(2) = y(3);
dydt(3) = y(1)*y(3)-1;

问题来了

上面demo这样定义函数不能用; 正确做法你得先定义向量解, 毕竟高阶方程化为一阶以后, 解应该是以向量的形式出现的; 所以, 这一步非常关键;

则以上方程组代码应该修改为:

function dydt = f(t,y)
dy = zeros(3,1);  %记住这里要添加哦; 
dydt(1) = y(2);
dydt(2) = y(3);
dydt(3) = y(1)*y(3)-1;

行吧, 其余的计算可以去参考官网了, 可以很方便的获得方程的各个解哦;

matlab真的是除了不能生孩子,啥都能干;

ps: 吐槽一点,matlab太费电了。mac满电正常续航六个小时以上,跑matlab这个程序半个多小时就会没电, 所以大家还是连接电源再去跑matlab;

结果图展示

技术图片

求解高阶微分方程

标签:添加   必须   title   目录   fun   toc   his   code   质量   

原文地址:https://www.cnblogs.com/liguo-wang/p/12431557.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!