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

    千次阅读 2020-03-30 00:51:14
    matlab求解微分方程 1.解析解 dsolve 函数 dsolve函数用于求常微分方程组的精确解,也称为常微分方程的符号解。如果没有初始条件或边界条件,则求出通解;如果有,则求出特解。 1)函数格式 Y = dsolve(‘eq1,eq2,…...

    matlab求解微分方程

    1.解析解

    dsolve 函数
    dsolve函数用于求常微分方程组的精确解,也称为常微分方程的符号解。如果没有初始条件或边界条件,则求出通解;如果有,则求出特解。
    1)函数格式

    Y = dsolve(‘eq1,eq2,…’ , ’cond1,cond2,…’ , ’Name’)

    其中,‘eq1,eq2,…’:表示微分方程或微分方程组;

            ’cond1,cond2,…’:表示初始条件或边界条件;
    
            ‘Name’:表示变量。没有指定变量时,matlab默认的变量为t;
    

    D: 微分符号;D2表示二阶微分,D3表示三阶微分,以此类推。
    例1
    在这里插入图片描述
    在这里插入图片描述
    例2
    在这里插入图片描述
    在这里插入图片描述

    2.数值解

    这里利用ode45函数求解
    1)函数格式

    [T,Y] = ode45(‘odefun’,tspan,y0)

    [T,Y] = ode45(‘odefun’,tspan,y0,options)

    [T,Y,TE,YE,IE] = ode45(‘odefun’,tspan,y0,options)

    sol = ode45(‘odefun’,[t0 tf],y0…)

    其中: odefun是函数句柄,可以是函数文件名,匿名函数句柄或内联函数名;

          tspan 是求解区间 [t0 tf],或者一系列散点[t0,t1,...,tf];
    
          y0 是初始值向量
    
          T 返回列向量的时间点
    
          Y 返回对应T的求解列向量
    
          options 是求解参数设置,可以用odeset在计算前设定误差,输出参数,事件等
    

    在编写fun函数的时候,需要将方程化为标准形式
    在这里插入图片描述
    例1
    在这里插入图片描述
    标准化:
    在这里插入图片描述
    fun函数:

    function dydt= fun1(t,y)
    dydt=zeros(2,1);  %初始化dydt,使其成为列数组
    %参数初始化
    %设y(1)=y,y(2)=y',dydt(1)=y',dydt(2)=y''
    dydt(1)=y(2);
    dydt(2)=-t*y(1)+exp(t)*y(2)+3*sin(2*t);
    end
    

    主函数:

    %数值解
    tspan=[3.9 4];
    y0=[8 2];%初值
    [t,y]=ode45('fun1',tspan,y0);
    plot(t,y(:,1),'-o');  %结果中y有两列,第一列为y,第二列为y',此处取第一列
    
    

    例2
    在这里插入图片描述
    fun函数:

    function dy = fun2(t,y)
    dy=zeros(2,1);
    %%%设u(t),v(t)为0
    c=2;
    a=2;
    d=3;
    b=4;
    %设y(1)=x,y(2)=y,dy(1)=x',dy(2)=y'
    dy(1)=-c*y(1)*y(2)-a*y(1);
    dy(2)=-d*y(1)*y(2)-b*y(2);
    
    end
    

    主函数:

    tspan=[0 10];
    y0=[2 2];%初值
    [t,y]=ode45('fun2',tspan,y0);
    plot(y(:,1),y(:,2));
    
    展开全文
  • Matlab求解微分方程

    2015-01-10 16:37:28
    Matlab求解各种微分方程代码,包括时延微分方程等。
  • MATLAB求解微分方程

    千次阅读 多人点赞 2020-04-21 02:52:30
    一、微分方程的符号解 dsolve(‘方程1’,‘方程2’,…,‘方程n’,‘初始条件’,‘自变量’) ...例1:求解微分方程: 解: y=dsolve('D2y-2*Dy+y-x^2=0','x') 例2: 解: y=dsolve('D2y+4*Dy+29*y','y(...

    一、微分方程的符号解

    dsolve(‘方程1’,‘方程2’,…,‘方程n’,‘初始条件’,‘自变量’)

    初始条件省缺时,是求微分方程的通解。

    Dy代表y的导数,D2y代表y的二阶导数, D3y代表y的三阶导数……

    例1:求解微分方程:

    解:

    y=dsolve('D2y+2*Dy+y-x^2=0','x')

    例2:

    解:

    y=dsolve('D2y+4*Dy+29*y','y(0)=0,Dy(0)=15','x')

    例3:求解微分方程组的初值问题

    解:

    eq1='Dx=2*x-3*y+3*z';
    eq2='Dy=4*x-5*y+3*z';
    eq3='Dz=4*x-4*y+2*z';
    [x,y,z]=dsolve(eq1,eq2,eq3,'x(0)=1,y(0)=2,z(0)=1');%如果省略自变量,默认为t

    二、求微分方程数值解

    多数微分方程是没有解析解的,即使一些看上去形式非常简单的微分方程,如,这个微分方程不能用初等函数及其积分来表达它的解!从实际问题中抽象出来的微分方程,通常主要依靠数值解法来解决!求数值解的方法有欧拉法、龙格-库塔法等。基于龙格-库塔法,matlab求微分方程数值解函数:[x, y]=ode23(‘函数’,‘求解区间’,‘初始值’)x: 自变量值,y: 函数值,(采用2,3阶龙格-库塔法)其它求解命令:ode45,ode15s,ode23s等

    几种常用的求解函数的特点和类型:

    关于何为刚性方程: 

    所谓刚性方程,就是说存在两(多)重尺度,一个尺度比另外一个尺度大很多。所导致的麻烦就是在计算中很难兼顾两者。

    例如下面的方程:
    dx=-100x-100.1y 
    dy=100.1x-100y 

    两个特征值lambda_1 = -200.1,lambda_2 = -0.1 
    所以解表现为a1*exp(-200.1*X) + a2*exp(-0.1*X),无论你用什么样的尺度(单一尺度)都不能很好刻画解的行为。一个是快变行为,一个是慢变行为。 所有这样的方程计算时候,稳定性条件比较苛刻。实际情况要比这还复杂得多。 

    一、微分方程求解步骤:

     :

    1. 定义函数 f(x, y)(主要用匿名函数定义)
    2. 使用ode函数求解
    3. 作图

    例4:求解微分方程:

    解:

    f=@(x, y)1./(1+x.^2)-2*y.^2 
    ode23(f, [0, 6], 0)
    figure(2) 
    ode45(f, [0,6], 0)

    二、对于微分方程组:

    1. 用function函数定义该微分方程组的右端项

      格式:function res=fun(t, x)

      res=[f1(…); f2(…);….;fm(…)];

      end

      其中res为列向量。

    2. 使用ode函数求解
    3. 作图

    例5:求解微分方程初值问题:

    解:

    [t, x] = ode45(@fun,[0,30],[1,0.5]);
    plot(t, x(:,1), t, x(:,2),'linewidth',1.5);
    legend('x(t)', 'y(t)');
    figure(2);
    plot(x(:,1), x(:,2), 'linewidth',1.5);
    
    function res=fun(t, x)
        res = zeros(2,1);
        res(1)=-x(1).^3-x(2);
        res(2)=-x(2).^3+x(1);
    end

    三、高阶微分方程求数值解:

    高阶微分方程必须等价的变换成一阶微分方程组,然后求解。

    例6:求解微分方程初值问题:

    解:设 y1=y , y2=y'=y1' , y2'=y''

    问题转换为

    [x, y]=ode15s(@fun,[0,3000],[2,0]);
    plot(x, y(:,1))
    
    function res=fun(x,y)
        res = zeros(2,1);
        res(1)=y(2);
        res(2)=1000*(1-y(1)^2)*y(2)-y(1);
    end

    例7:

    解:设 y1=y , y2=y' , y3=y''

    问题转换为

    [x,y]=ode45(@cal,[0 1],[0;1;-1]);
    plot(x,y(:,1));
    
    function res=cal(x,y)
        res = zeros(3,1);
        res(1)=y(2);
        res(2)=y(3);
        res(3)=3*y(3)+y(1)*y(2);
    end

     

    展开全文
  • MATLAB求解微分方程及微分方程组方法介绍和例子。Matlab
  • Matlab求解微分方程(组)及偏微分方程(组)
  • matlab 求解微分方程.ppt
  • 精通matlab求解微分方程组和相平面图

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,167
精华内容 466
关键字:

matlab求解微分方程

matlab 订阅