Matlab与微分方程解析解(dsolve)
微分方程是动态系统建模的基础。本文介绍了微分方程的解析解法。
我们在高等数学中已经学过,常系数线性微分方程是有解析解的。
常系数线性微分方程一般数学表示形式为:
我们可以把微分方程理解为一个动态的系统,其中,u是输入信号,y是输出信号,我们最用要求的是y的解析解。
dsolve函数:
y=dsolve(‘eqn1’,‘eqn2’,…,‘cond1’,‘cond2’,…,‘var’)
eqni表示方程,condi表示初值,var表示微分方程中的自变量,系统默认为t。
D为微分符号,D2表示二阶微分,D3表示三阶微分。
例题1:
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 =(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,得到的是原始方程的通解。
若已知微分方程的初值条件,则可得出微分方程的唯一解:
例如:
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)],...'y(0)=3','Dy(0)=2','D2y(0)=0','D3y(0)=0')
ezplot(y,[0,5]) %ezplot():将微分方程的解用曲线绘制出来
同时,我们可以调用ezplot函数将微分方程的解用曲线的形式绘制出来。
同时,我们可以处理更复杂形况下的微分方程:
只要凑足四个独立条件,我们就可以通过通解把c1到c4的系数计算出来,最后得出原始问题的数值解。
y=dsolve(['D4y+10*D3y+35*D2y+50*Dy+24*y=',char(uu)]),'y(0)=1/2','Dy(pi)=1','D2y(2*pi)=0','Dy(2*pi)=1/5'
%由不宜读的解析解求出近似解
求解微分方程组:
例题2:
声明t为符号变量,然后用下面两个字符串描述原始的微分方程,再调用dslove函数,同样能得到原始问题的解析解。
syms t y; %声明关键字
u=exp(-5*t)*cos(2*t+1)+5;
uu=5*diff(u,t,2)+4*diff(u,t)+2*u;
[x,y]=dsolve('D2x+2*Dx=x+2*y-exp(-t)','Dy=4*x+3*y+4*exp(-t)')
变系数的微分方程:
例题3:
我们可能很自然的就能想到:
y=dsolve('(2*x+3)^3*D3y+3*(2*x+3)*Dy-6*y') %%错误的
得到方程的一个解,但是这个解本身是错误的。因为如果要采用字符串来描述微分方程的时候,一定要注意,在描述完微分方程的之后,在语句的后面应该指明自变量是什么。
自变量为x:
y=dsolve('(2*x+3)^3*D3y+3*(2*x+3)*Dy-6*y','x');
y=simplify(y),syms x;
simplify((2*x+3)^3*diff(y,x,3)+3*(2*x+3)*diff(y,x)-6*y)
求解完了进行化简,再把解带入原始的方程检验一下误差。
结果:
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,z]=dsolve('D2x-x+y+z=0','x+D2y-y+z=0','x+y+D2z-z=0','x(0)=1,y(0)=0,z(0)=0','Dx(0)=0,Dy(0)=0,Dz(0)=0')
这个方程如果采用符号表达式描述微分方程要比字符串描述微分方程要麻烦一些,因为除了x和y之外,我们还需要引入一些中间变量,这样才能把原来的问题用符号表达式描述出来。
线性状态空间方程的解析解:
前半部分式子可以用expm函数来求解,后半部分可以先把被积函数计算出来,在计算定积分,就可以把解析解的出来。
例题5:
直接积分法求:
syms t tau;
u=2+2*exp(-3*t)*sin(2*t);
A=[-19,-16,-16,-19;21,16,17,19;20,17,16,20;-20,-16,-16,-19];
B=[1;0;1;2];
C=[2 1 0 0];
x0=[0;1;1;2];
y=C*(expm(A*t)*x0+int(expm(A*(t-tau))*B*subs(u,t,tau),tau,0,t));
simplify(y)
结果:
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:
syms t x;
x=dsolve('Dx=x*(1-x^2)')
结果:
x =01-1(-1/(exp(C1 - 2*t) - 1))^(1/2)
若要改变原有的微分方程,使其右侧+1:
syms t x;
x=dsolve('Dx=x*(1-x^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方程。
在这个方程里存在y的平方项,也存在y的平方与y的一阶导数乘积项,所以此方程为非线性微分方程。
尝试代码:
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提示,方程的显式解是找不到的,换句话说,解析解是不存在的。从这个例子可以看出来,绝大部分非线性微分方程是没有办法求解的。
解析解不存在时,我们应该考虑用数值的方法来求解相应的微分方程。
后续会更新数值解相关解法。
Matlab与微分方程解析解(dsolve)相关推荐
- 计算物理中matlab处理微分方程解析解和欧拉法数值解的算法演示
我先来看一个问题的引入: 我们根据题目给出的微分方程编写matlab求解代码如下: syms cd m g v(t); eqn = diff(v,t) == g - cd/m*v^2; vt = ds ...
- matlab求解微分方程解析解
解析解 1求解微分方程方程组用函数"dsolve" dsolve('方程1','方程2'-'方程n','初始条件','自变量') clc,clear %% %求解du/dt=i+u ...
- matlab求解微分方程6,牛津大学出版社数学应用软件作业6 用Matlab求解微分方程(组)的解析解和数值解:经典爱情语录大全...
漳州理工职业学院-酒会礼仪 注:上机作业文件夹以自己的班级姓名学号命名,文件夹包括如下上机报告和Matlab程序. 上机报告模板如下: 佛山科学技术学院 上 机 报 告 课程名称 数学应用软件 上机项 ...
- matlab求解微分方程的解析解
简 介:本文将研究微分方程的解析解算法,介绍在MATLAB 环境中如何用微分方程求解函数直接得出线性微分方程组的解析解,并对一阶简单的非线性微分方程的解析解求解进行探讨,从而得出结论,一般非线性微分方 ...
- 用matlab求微分方程系数,用Matlab软件求解微分方程的解析解和数值解.pdf
用Matlab软件求解微分方程的解析解和数值解.pdf Matlab软件求解微分方程 的解析解和数值解 数学与信息科学学院 孔祥庆 数学建模实验项目2 (1) 一.实验名称: Matlab软件求解微分 ...
- matlab解无解析解微分方程组,数学应用软件作业6 用Matlab求解微分方程(组)的解析解和数值解...
<数学应用软件作业6 用Matlab求解微分方程(组)的解析解和数值解>由会员分享,可在线阅读,更多相关<数学应用软件作业6 用Matlab求解微分方程(组)的解析解和数值解(12页 ...
- matlab与微分方程
求解二阶微分方程 已知 x2y''+xy'+(x2−n2)∗y=0x^2y'' + xy' + (x2-n2)*y = 0x2y''+xy'+(x2−n2)∗y=0 y(pi/2)=2y (pi/2) ...
- matlab求微分方程精确解,matlab求微分方程精确解及近似解.ppt
matlab求微分方程精确解及近似解.ppt 还剩 24页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,喜欢就下载吧,价低环保! 内容要点: 求微分方程的解q 自牛顿发明微积分以来,微分方 ...
- matlab方程求解的实验报告,用matlab对微分方程求解实验报告.doc
PAGE PAGE 1 o <高等数学>上机作业(三) 课 程 <高等数学> 上 机 内 容 微分方程求解 成 绩 姓 名 专 业 班 级 学 号 教学班 指 导教 师 上 机 ...
- matlab求解全微分函数,利用MATLAB求解微分方程的方法探索
引言 科学问题和工程问题经常需要求取微分方程的解,MATLAB 的强大数值运算和符号运算能力,能够方便地进行各种解析运算,是方便实用.功能强大的数学软件之一. 1线性微分方程求解 1.1线性常微分方程 ...
最新文章
- 洛谷P2397 yyy loves Maths VI (mode) 摩尔投票
- 《第一行代码》学习笔记16-碎片Fragment(1)
- 模式识别机器学习术语
- JavaWeb课程复习资料(十)——修改功能
- Dom4j遍历解析XML测试
- 北大暑期课作业 - 对cnblog 和其他技术博客的分析,比较和展望
- UITableView分页
- MySQL INSERT的4种形态
- Spark学习-SparkSQL--03-SparkSQL CLI 建表查询出问题
- mysql5.6初级使用方法学习第三天
- access 循环_双11多个品牌创销量新高,ACCESS品牌管理集团背后的全球供应链解码...
- exe dll html病毒专杀,清除更改主页的mshtmldy.dll、mshtmldx.dll病毒
- 很遗憾,该服务器不支持 jmail 组件!,Jmail组件安装方法及Windows 7系统下Jmail组件注册失败解决方法...
- 计算机基础ps变换蝴蝶,在PS中用自由变换制作飞舞的蝴蝶和用内容识别比例缩放的操作过程...
- 基于Android的办公自动化系统APP设计与实现
- 基于java的自驾游自助游旅游网站
- 思科Cisco交换机的基本模式和命令基本使用和技巧大全
- 计算机二级工作表不会,计算机二级Office:Excel工作簿与工作表操作
- k折交叉验证KFold()函数
- Oracle中if...then的使用