Matlab与微分方程解析解(dsolve) | 您所在的位置:网站首页 › 微分方程特解形式表示 › Matlab与微分方程解析解(dsolve) |
微分方程是动态系统建模的基础。本文介绍了微分方程的解析解法。 我们在高等数学中已经学过,常系数线性微分方程是有解析解的。 常系数线性微分方程一般数学表示形式为: y=dsolve(‘eqn1’,‘eqn2’,…,‘cond1’,‘cond2’,…,‘var’) eqni表示方程,condi表示初值,var表示微分方程中的自变量,系统默认为t。 D为微分符号,D2表示二阶微分,D3表示三阶微分。 例题1: 点击查看diff函数的用法 执行代码,得到微分方程的解析解: y = (exp(-5*t)*(445*cos(2*t + 1) - 65*exp(5*t) + 102*sin(2*t + 1)))/26 - (exp(-5*t)*(537*cos(2*t + 1) - 40*exp(5*t) + 15*sin(2*t + 1)))/24 - (exp(-5*t)*(25*exp(5*t) - 542*cos(2*t + 1) + 164*sin(2*t + 1)))/60 - exp(-t)*((133*exp(-4*t)*cos(2*t + 1))/30 - (5*exp(t))/3 + (97*exp(-4*t)*sin(2*t + 1))/60) + C1*exp(-4*t) + C2*exp(-3*t) + C3*exp(-2*t) + C4*exp(-t)在此题的解析解中,有c1, c2, c3, c4等几个量,这些常数称为待定系数,这样得到的解,就是原始问题的通解。 通解的检验:将这个截带入到原始方程中去检验。 syms t y; %声明关键字 u=exp(-5*t)*cos(2*t+1)+5; uu=5*diff(u,t,2)+4*diff(u,t)+2*u; y=dsolve(['D4y+10*D3y+35*D2y+50*Dy+24*y=',char(uu)]) % D4y 表示y的四阶导数 % 通解与检验 diff(y,4)+10*diff(y,3)+35*diff(y,2)+50*diff(y)+24*y-uu simplify(ans)得到的结果: ans = 0误差为0,得到的是原始方程的通解。 若已知微分方程的初值条件,则可得出微分方程的唯一解:例如: 同时,我们可以调用ezplot函数将微分方程的解用曲线的形式绘制出来。 例题2: 例题3: 得到方程的一个解,但是这个解本身是错误的。因为如果要采用字符串来描述微分方程的时候,一定要注意,在描述完微分方程的之后,在语句的后面应该指明自变量是什么。 自变量为x: 求解完了进行化简,再把解带入原始的方程检验一下误差。 结果: y = C1*(x + 3/2) - 2*C2*(x + 3/2)^(1/2) + C3*(2*x + 6)*(x + 3/2)^(1/2) ans = 0刚才介绍的是用字符串来描述微分方程,如果用解析表达式来描述微分方程,就不用最后再指明自变量了,因为自变量已经表明了。 syms x y(x) y=dsolve((2*x+3)^3*diff(y,3)+3*(2*x+3)*diff(y)-6*y == 0)例题4: 这个方程如果采用符号表达式描述微分方程要比字符串描述微分方程要麻烦一些,因为除了x和y之外,我们还需要引入一些中间变量,这样才能把原来的问题用符号表达式描述出来。 线性状态空间方程的解析解:
例题5: 结果: ans = (119*exp(-t))/8 + 57*exp(-3*t) + (127*t*exp(-t))/4 + 4*t^2*exp(-t) - (135*cos(2*t)*exp(-3*t))/8 + (77*sin(2*t)*exp(-3*t))/4 - 54 特殊非线性微分方程的解析解只有极少数非线性微分方程可以通过dsolve函数得出解析解 例题6: 结果: x = 0 1 -1 (-1/(exp(C1 - 2*t) - 1))^(1/2)若要改变原有的微分方程,使其右侧+1: 结果: x = root(z^3 - z - 1, z, 1) root(z^3 - z - 1, z, 2) root(z^3 - z - 1, z, 3)这个微分方程的解析解就就不出来了,通过这个例子我们可以看出来,绝大部分微分方程是没有解析解的。 我们再看看一个著名的Van der Pol方程。 尝试代码: syms t y(t) mu; y=dsolve(diff(y,2)+mu*(y^2-1)*diff(y)+y==0)结果: 警告: Unable to find explicit solution. > In dsolve (line 190) In BilibiliCode (line 56) y = [ empty sym ]我们发现,matlab提示,方程的显式解是找不到的,换句话说,解析解是不存在的。从这个例子可以看出来,绝大部分非线性微分方程是没有办法求解的。 解析解不存在时,我们应该考虑用数值的方法来求解相应的微分方程。 后续会更新数值解相关解法。 |
今日新闻 |
推荐新闻 |
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 |