精华内容
下载资源
问答
  • matlab求解微分方程解析解

    万次阅读 2019-08-09 20:58:31
    解析解 1求解微分方程方程组用函数“dsolve” dsolve(‘方程1’,‘方程2’…‘方程n’,‘初始条件’,‘自变量’) clc,clear %% %求解du/dt=i+u^2的通解 dsolve('Du=1+u^2','t') %% %求解微分方程组 dy^2/dx^2+4*dy/...

    解析解

    1求解微分方程方程组用函数“dsolve”
    dsolve(‘方程1’,‘方程2’…‘方程n’,‘初始条件’,‘自变量’)

    clc,clear
    %%
    %求解du/dt=i+u^2的通解
    dsolve('Du=1+u^2','t')
    %%
    %求解微分方程组   dy^2/dx^2+4*dy/dx+29*y=0,y(0)=0,y`(0)=15;的通解
    y=dsolve('D2y+4*Dy+29*y=0','y(0)=0,Dy(0)=15','x')
    %%
    %求解微分方程组   dx/dt=2*x-3*y+3*z,dy/dt=4*x-5*y+3*z,dz/dt=4*x-4*y+2*z;的通解
    [x,y,z]=dsolve('Dx=2*x-3*y+3*z,Dy=4*x-5*y+3*z,Dz=4*x-4*y+2*z','Dz=4*x-4*y+2*z','t')
    
    展开全文
  • Matlab微分方程解析解(dsolve)

    千次阅读 2020-07-25 20:40:55
    微分方程是动态系统建模的基础。本文介绍了微分方程解析解法。 常系数线性微分方程

    微分方程是动态系统建模的基础。本文介绍了微分方程的解析解法。

    我们在高等数学中已经学过,常系数线性微分方程是有解析解的。

    常系数线性微分方程一般数学表示形式为:
    在这里插入图片描述
    我们可以把微分方程理解为一个动态的系统,其中,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 =
     
                                  0
                                  1
                                 -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算法-求解微分方程数值解和解析解.ppt
  • 1.基本概念 含有自变量、未知的一元函数及其导数的方程称为常微分方程。一般形式为: 它的求解就是寻找一个能够满足该微分方程的函数。...阶常微分方程一般含有个待定系数,给出边始条件可...

    1.基本概念

    含有自变量x、未知的一元函数y(x)及其导数{y}'(x)的方程称为常微分方程。一般形式为:

                                                                            y^{m}(x)=F(x,y,{y}',...,y^{m-1})

    它的求解就是寻找一个能够满足该微分方程的函数y=f(x)

            方程中函数最高阶导数y^{m}(x)的阶数m称为常微分方程的阶数。m阶常微分方程通解f(x)一般含有m个待定系数,给出边始条件可以求出 特解。

    2.常微分方程的符号格式

    1)用Dmy表示函数y=f(x)m阶导数,m阶常微分方程一般形式的符号格式为

                                                                               Dmy=F(x,y,Dy,D2y,...,D(m-1)y)

    2)m阶常微分方程的m个边始条件的符号格式为

                                                                        y(x_{0})=y_{0},Dy(x_{0})=y_{1},...,D(m-1)y(x_{0})=y_{m-1}

    3.使用函数dsolve说明

                                                                         [y1,y2,...,y12]=dsolve(a1,a2,...,a12)

    1)每个输入参量a1,a2,...,a12包含三部分内容:微分方程、边始条件和界定的自变量,每部分都用单引号界定,两部分之间用逗号分隔,三部分顺序不可置换。微分方程部分不可以缺省。

    2)若缺省部分或者全部“边始条件”,输出含有待定常数的微分方程通解。待定常数的数目等于缺省边始条件个数,默认用C1,C2等表示。

    3)当“界定的自变量”缺省时,默认的自变量用字母“t”表示。

    4)每条指令的输入参数ai最多有12组,因此可用于求解方程个数小于等于12的常微分方程组。

    5)输出参量yi表示方程组的第i个解,求解一个常微分方程时可以省略。

    4.计算举例

    计算常微分方程

    求解二阶常微分方程\frac{d^{2}y}{dx^{2}}+y=1-x^{2}

    计算通解:

    y=dsolve('D2y+y=1-x^2','x')
    y =
     
    C5*cos(x) + C6*sin(x) - x^2 + 3

    计算特解:y(0)=0.2,{y}'(0)=0.5

    y=dsolve('D2y+y=1-x^2','y(0)=0.2,Dy(0)=0.5','x')
    y =
     
    sin(x)/2 - (14*cos(x))/5 - x^2 + 3

    画出特解函数曲线图:ezplot

    ezplot('sin(x)/2 - (14*cos(x))/5 - x^2 + 3',[-3 3])

    计算常微分方程组

    \left\{\begin{matrix} \frac{du}{dt}=3u-2v\\ \frac{dv}{dt}=v=2u \end{matrix}\right.

    计算通解:

    [u,v]=dsolve('Du=3*u-2*v,Dv=2*u-v')
    u =
     
    2*C9*exp(t) + C10*(exp(t) + 2*t*exp(t))
     
     
    v =
     
    2*C9*exp(t) + 2*C10*t*exp(t)

    计算特解:u(0)=1,v(0)=0

    [u,v]=dsolve('Du=3*u-2*v,Dv=2*u-v','u(0)=1,v(0)=0','s')
    u =
     
    exp(s) + 2*s*exp(s)
     
     
    v =
     
    2*s*exp(s)

     

    展开全文
  • dsolve函数是matlab中自带的可以用来解决部分常微分方程的函数(方法),下面以物理学中的热传导问题为例展示如何使用这个函数。 热力学模型假设物体和恒温的环境接触,温度随时间的变化率和温差成正比,我们假设...

    dsolve函数是matlab中自带的可以用来解决部分常微分方程的函数(方法),下面以物理学中的热传导问题为例展示如何使用这个函数。

    热力学模型假设物体和恒温的环境接触,温度随时间的变化率和温差成正比,我们假设环境温度为m=20,物体的初始温度为100(刚好假设这个物体是烧开的沸水),比例系数k为-0.05,由此我们可以得到以下常微分方程:
    y’ = k(y-m)
    y0=100
    k=-0.05

    我们就可以把以上数学公式转换成matlab代码如下:

    syms y(t)
    eqn = diff(y,t) == -0.05*(y-20);
    con = y(0) == 100;
    yS = dsolve(eqn,con)
    

    我们注意到,这里用eqn存储了微分方程的表达式,用cond存储了变量y的初始值。方程式用==表示等号,用diff(y,t)表示y关于t的一阶导数;初始条件表达式 用y(0)表示了y的初始值,并且将它与100用两个=连起来,并且把这个等式赋值给con这个变量。eqn和con正式dsolve函数所需要的两个变量。也就是我们常说的给定了方程和初始条件,就可以得到这个方程的解,我们运行之后,可以得到一下解析解:

    yS =
     
    80*exp(-t/20) + 20
    

    非常漂亮,我们还可以把代码稍微修改一下,用字符串的形式来存储方程式和初始变量等式,用Dy来表示y’,此时我们可以改写matlab代码如下:

    equa = 'Dy = -0.05*(y-20)';
    cond = 'y(0) = 100';
    ys = dsolve(equa,cond,'t')
    

    注意到这个时候,dsovle函数增加了一个参数’t’,用来表示Dy是y对t的求导,我们同样可以得到运行结果如下:

    ys =
     
    80*exp(-t/20) + 20
     
    

    可以看到,两种方法得到的结果是一样的,这样我们就完成了最简单的一个常微分方程解析解的求解。不过我们要注意的是,高等数学告诉我们只有特定形式的方程才具有解析解,因此使用dsolve方法有以下局限性:

    仅有特定形式的微分方程(组) ,才有解析解;在没有解析解的微分方程(组)的时候dsolve 无能为力

    展开全文
  • Matlab在常微分方程求解中的应用;实验目的 1学会用Matlab软件求解微分方程的初值问题 2了解微分方程数值解思想掌握基本的微分方程数值解方法 3学会根据实际问题建立简单...常微分方程解析解; 解 输入命令: y=dsolve
  • 解析解:给出解的具体表达式 dsolve('方程1','方程2','方程3','方程4',...,'方程n','初始条件','自变量') 新建实时脚本,放出来的结果很直观
  • 自牛顿发明微积分以来微分方程在描述事物运动规律上已发挥了重要的作用实际应用问题通过数学建模所得到的方程绝大多数是微分方程 由于实际应用的需要人们必须求解微分方程然而能够求得解析解微分方程十分有限绝大...
  • Matlab微分方程解析解(dsolve)

    千次阅读 2020-08-10 16:11:54
    1)在表达微分方程时,用字母D表示微分,D2、D3分别表示二阶、三阶微分,后面跟的是求解的因变量; 2)自变量可以指定,不写时默认为t; 3)用单引号; 4)在单引号中的公式算数符号不能省略:比如‘y-Dy=2*x...
  • Matlab微分方程解析解 用法:dsolve(‘equation’,‘condition;,‘v’) 说明:(1)equation是方程式,condition是条件,v是自变量(确省为t) (2)若不带条件,则解中带积分常数。 (3)如果没有显示解,则...
  • 然而,只有很少的微分方程可以解析求解,尤其对于偏微分方程,能解析求解的种类更是寥寥可数。更多的微分方程可以采用数值法进行求解,只要精度足够高,就可以满足科学和工程上的需求。数值求解微分方程的基本思路是...
  • 微分方程解析解;输入命令: y=dsolve'D2y+4*Dy+29*y=0'y(0)=0,Dy(0)=15'x;二微分方程的数值解;二建立数值解法的一些途径;2使用数值积分;3使用泰勒公式; 1在解n个未知函数的方程组时x0和x均为n维向量m-文件中的待...
  • Matlab求常微分方程组的解析解

    千次阅读 2020-03-07 21:53:14
    Matlab求常微分方程解析解 最近同学毕设需要求解循坏摆的微分方程,我在帮忙过程中学习了一下常微分方程解析解和数值解的求法,在此分享。 以下讲解遵循Matlab官方文档提供的方程和写法。 一阶常微分方程求解...
  • 我们可以使用dsolve函数解具有解析解微分方程,比如 https://blog.csdn.net/weixin_41855010/article/details/104188103 这篇博客中给出的热传导问题微分方程,我们再把这个方程matlab解的代码复习一遍: ...
  • Matlab微分方程求解

    千次阅读 2020-05-24 18:18:45
    Matlab求解微分方程的数学原理与就求解·数值解、解析解的语法算例实现
  • 一常微分方程组的符号解(4)若边界条件少于方程组的阶数则返回的结果r中会出现任意常数C1C2(6)若没有给定输出参量则在命令窗口显示解列表若该命令找不到解析解则返回一警告信息同时返回一空的sym对象这时用户可以用...
  • 微分方程的计算十分复杂,而且大部分是没有解析解的。PDE的数值解法有有限差分法等方法,然而这是需要学习相关的知识,通过编程进行求解。而PDE Modeler提供了一个不需要编程就能接偏微分方程的平台。1.1界面功能...
  • 1学会用Matlab求简单微分方程解析解. 1求简单微分方程解析解. 4作业. 2求微分方程的数值解. 3 数学建模实例 微分方程解析解微分方程组的解析解命令: dsolve(方程1, 方程2,方程n, 初始条件, 自变量) To ff1...
  • 数学应用软件作业 6- 用 Matlab 求解微分方程 ( 组 ) 的解析解和 数值解 注上机作业文件夹以自己的班级姓名学号命 名文件夹包括如下上机报告和 Matlab 程序 上机报告模板如下 佛山科学技术学院 上 机 报 告 课程名称...
  • matlab解微分方程

    2020-07-16 23:34:42
    首先要明确的一点就是,我们求微分方程的时候,要注意有解析解和数值解,解析解又有通解和特解,这在我们编写代码的时候可以通过初始点的值来获得特解。其实今天老师讲的还挺不错的,举出了很多的例子,基本上与物理...
  • Matlab微分方程的数值

    千次阅读 2020-08-10 17:53:00
    注:首先计算微分方程解析解,如果发现没有解析解,再用数值解 一、Matlab中求微分方程的数值解函数 [x,y]=solver('f',ts,x0,options) 1)x代表自变量 2)y代表函数值 3)solver代表求解函数,常用的为...
  • 科技信息 博士专家论坛 基于MATLAB微分方程求解 衡阳师范学院数学与计算科学系...例分析了如何通过MATLAB 来求微分方程解析解和数值解 关键词MATLAB 微分方程 数值解 1.微分方程解析解 > text(15,0.4'x(t) MATLA
  • 1. 有接近30个方程,且中间的方程如A(7)的微分包含着A(10)、A(11),将所有方程写在一个dsolve函数里,无法得到结果 1. 如v1-4这类式子,如果写入dsolve中,输出结果与等式数不对应,无法得到结果,能否有不把它们一...
  • 可求解析解微分方程2. MATLAB函数直接调用3. 其他情形3.1 一阶微分方程3.2 高阶微分方程参考资料 1. 可求解析解微分方程 2. MATLAB函数直接调用 3. 其他情形 3.1 一阶微分方程 3.2 高阶微分方程 微.

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 137
精华内容 54
关键字:

matlab微分方程解析解

matlab 订阅