标签:添加 必须 title 目录 fun toc his code 质量
最近困惑我一周的高阶微分方程求解,特地来总结一下,给有需要的同志们!
(特此说明,官网有纰漏, 存在问题, 需要修改, 我最后会说哪里出问题了)
? 所有 MATLAB ODE 求解器都可以解算 y′=f(t,y) 形式的方程组,或涉及质量矩阵 M(t,y)y′=f(t,y) 的问题。求解器都使用类似的语法。ode45
是一个通用型 ODE 求解器,是您解算大多数问题时的首选。但是,对于刚性问题或需要较高准确性的问题,其他 ODE 求解器可能更适合。
? 求解几乎能遇到的大多数微分方程, 一阶,二阶,三阶甚至多阶微分方程
[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是你能计算的方程解;
MATLAB ODE 求解器仅可解算一阶方程。您必须使用常规代换法,将高阶 ODE 重写为等效的一阶方程组
y1=y
y2=y′
y3=y′′?
这些代换将生成一个包含 n 个一阶方程的方程组
y′1=y2
y′2=y3??????????
y′n=f(t,y1,y2,...,y**n*).
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