求解高阶微分方程

ODE45 求解高阶微分方程

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

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

ode45是什么

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

ode45能干什么

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

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:io

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

y0是你能计算的方程解;class

高阶 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;

结果图展现

image-20200306224911284