精华内容
下载资源
问答
  • MATLAB求解微分方程微分方程组方法介绍和例子。Matlab
  • 这是上海某大学的计算机仿真课作业,共享了~
  • TMU_BME_2013 Topic: 如何使用 MATLAB微分方程组 a.What ? 微分方程 指描述未知函数的导数与自变 量之间的关系的方程未知函数是一元函 数的微分方程称作 常微分方程 未知函数 是多元函数的微分方程称作 偏...
  • MATLAB求解微分方程

    2021-05-23 20:48:31
    下面介绍如何用 Matlab 来计算微分方程(组)的数值。 Euler折线法 微分方程的基本数值解法——Euler折线法。 步骤: 分割求解区间,差商代替微商,代数方程 例子: : 等距剖分:a=x0<x1<x2<⋯&l

    求微分方程的解

    自牛顿发明微积分以来,微分方程在描述事物运动规律上已发挥了重要的作用。实际应用问题通过数学建模所得到的方程,绝大多数是微分方程。由于实际应用的需要,人们必须求解微分方程。然而能够求得解析解的微分方程十分有限,绝大多数微分方程需要利用数值方法来近似求解。下面介绍如何用 Matlab 来计算微分方程(组)的数值解。

    Euler折线法

    微分方程的基本数值解法——Euler折线法。

    步骤:
    分割求解区间,差商代替微商,解代数方程

    例子:
    在这里插入图片描述解:

    等距剖分: a = x 0 < x 1 < x 2 < ⋯ < x n − 1 < x n = b a=x_0<x_1<x_2< \cdots <x_{n-1}<x_n=b a=x0<x1<x2<<xn1<xn=b

    步长: h = x k + 1 − x k = ( b − a ) / n , k = 0 , 1 , 2 , . . . , n − 1 h=x_{k+1}-x_k=(b-a)/n,k=0,1,2,...,n-1 h=xk+1xk=(ba)/n,k=0,1,2,...,n1

    y ( x k + 1 ) ≈ y ( x k ) + h y ′ ( x k ) y(x_{k+1})\approx y(x_k)+hy\prime(x_k) y(xk+1)y(xk)+hy(xk)

    取步长 h = (2 - 0)/n = 2/n,得差分方程
    在这里插入图片描述
    当 h=0.4,即 n=5 时,代码如下:

    clear
    a=0;  b=2;
    h=0.4;
    n=(b-a)/h+1; 
    x(1)=0;  y(1)=1;
    for i=1:n-1        
        y(i+1)=y(i)+h*(y(i)+2*x(i)/y(i)^2);
        x(i+1)=x(i)+h;
    end
    y1=((5/3)*exp(3*x)-2*x-2/3).^(1/3);
    plot(x,y1,x,y);
    h = legend('解析解','Euler解');
    

    在这里插入图片描述

    解得:
    y = ( 5 3 e 3 x − 2 x − 2 3 ) 1 / 3 y=(\frac{5}{3}e^{3x}-2x-\frac{2}{3})^{1/3} y=(35e3x2x32)1/3

    Runge-Kutta方法

    龙格-库塔法(Runge-Kutta methods)是用于非线性常微分方程的解的重要的一类隐式或显式迭代法。

    同样是上面的例子:
    在这里插入图片描述
    在这里插入图片描述

    clear;
    a=0; b=2; h=0.4;
    n=(b-a)/h+1; 
    x(1)=0; y(1)=1;  
    for i=1:n-1
        L1=y(i)+2*x(i)/y(i)^2;
        t=x(i)+h/2;t1=y(i)+h*L1/2;
        L2=t1+2*t/t1^2;t1=y(i)+h*L2/2;
        L3=t1+2*t/t1^2;t1=y(i)+h*L3/2;
        L4=t1+2*(x(i)+h)/t1^2;
        y(i+1)=y(i)+h*(L1+2*L2+2*L3+L4)/6; 
        x(i+1)=x(i)+h;
    end
    plot(x,y)
    

    在这里插入图片描述

    MATLAB自带的ODE求解器

    ODE (常微分方程)

    没有一种算法可以有效地解决所有的 ODE 问题,因此MATLAB 提供了多种ODE求解器,对于不同的ODE,可以调用不同的求解器。
    在这里插入图片描述

    基本语法
    [T,Y] = solver(odefun,tspan,y0)

    其中 y0 为初值条件,tspan为求解区间;Matlab在数值求解时自动对求解区间进行分割,T (向量) 中返回的是分割点的值(自变量),Y (向量) 中返回的是解函数在这些分割点上的函数值。
    solver 为Matlab的ODE求解器(可以是 ode45、ode23、ode113、ode15s、ode23s、ode23t、ode23tb)

    展开全文
  • MATLAB解微分方程

    2018-04-11 10:37:59
    MATLAB解微分方程,附代码以及原理图。含拉普拉斯方程。绝热细杆求解方程等
  • 主要用于求解各类微分方程,并将结果以图像形式展示。
  • 微分方程MATLAB求解

    2018-09-07 14:24:12
    微分方程
  • MATLAB算法-求解微分方程数值和解析.ppt
  • Matlab求解微分方程(组)及偏微分方程(组)
  • matlab解微分方程

    千次阅读 多人点赞 2020-07-16 23:34:42
    其实今天老师讲的还挺不错的,举出了很多的例子,基本上与物理有关,其实要说这一个模块最稳妥的办法其实是如果能够求出通,一般最好手动进行微分方程求解,然后用计算机检验,用计算机求微分方程的情况大多数

    时隔半年,我又重回微分方程的学习了,现在学确实挺难搞的,很多知识和理论思路都忘了,数学还是很重要啊,其实一个蛮简单的东西我看了很久很久才慢慢的又懂了,话不多说,直接写文。
    首先要明确的一点就是,我们求微分方程的时候,要注意有解析解和数值解,解析解又有通解和特解,这在我们编写代码的时候可以通过初始点的值来获得特解。其实今天老师讲的还挺不错的,举出了很多的例子,基本上与物理有关,其实要说这一个模块最稳妥的办法其实是如果能够求出通解,一般最好手动进行微分方程的求解,然后用计算机检验,用计算机求微分方程的情况大多数是求数值解。所以说这一部分的话,其实对建模的要求更高,求解我们到时候可以看到matlab调用函数就可以了

    dsolve函数的妙用

    在这里插入图片描述
    在这里插入图片描述

    求解常微分方程通解

    求 微 分 方 程 d u d x = 1 + u 2 和 x 2 + y + ( x − 2 y ) y ′ 的 通 解 求微分方程\frac{du}{dx}=1+u^2和x^2+y+(x-2y)y'的通解 dxdu=1+u2x2+y+(x2y)y

    dsolve('Du=1+u^2','t');
    dsolve('x^2+y+(x-2*y)*Dy=0','x');
    

    求解常微分方程特解

    求 y ′ ′ ′ − y ′ ′ = x , y ( 1 ) = 8 , y ′ ( 1 ) = 7 , y ′ ′ ( 2 ) = 4 的 特 解 求y'''-y''=x,y(1)=8,y'(1)=7,y''(2)=4的特解 yy=xy(1)=8y(1)=7y(2)=4

    y=dsolve('D3y-D2y=x','y(1)=8','Dy(1)=7','D2y(2)=4','x');
    

    求解微分方程组

    在这里插入图片描述

    [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','t');
    x=simplify(x);%化简
    y=simplify(y);
    z=simplify(z);
    

    在这里插入图片描述

    equ1='D2f+3*g=sin(x)';
    equ2='Dg+Df=cos(x)';
    [general_f,general_g]=dsolve(equ1,equ2,'x');  %通解
    [f,g]=dsolve(equ1,equ2,'Df(2)=0,f(3)=3,g(5)=1','x');
    

    龙哥库塔求数值解

    在介绍龙哥库塔求数值解的时候,我们先要介绍一下这个刚性方程组的定义
    在这里插入图片描述
    然后matlab里面提供了几个非常好的解刚性常微分方程的功能函数如ode15s,ode45,ode113,ode23,ode23s,ode23t,ode23tb,
    在这里插入图片描述
    然后在介绍求解的知识之前,我需要先让你对这个过程做一个了解,以至于你写的时候不会觉得很晕,其实很简单的,估计我是忘了老师怎么教的了,看了半天我才慢慢明白。
    其实他的思路就是,用当前可以得到的函数值和自变量来导出我们所需要的求得微分变量,如果出现了高阶得情况,则将每一个高阶都逐一替换成导数用函数值表示的公式,前几阶导数完全可以嵌套定义表示出来,可能你还是没用很懂,不过等你看到我下面的分析的时候,你应该就懂了,而且通过我的发现,基本上告诉你几个初始值,一般你就要求多少阶的导数。

    简单的一阶方程初值问题

    在这里插入图片描述
    在这里插入图片描述
    F2.m

    function dy = F2(t,y)
    %F2 此处显示有关此函数的摘要
    %   此处显示详细说明
    dy=-2*y+2*t^2+2*t;
    end
    

    main.m

    [T,Y]=ode45('F2',[0,500],[1]);
    plot(T,Y(:,1),'-');
    

    在这里插入图片描述

    高阶微分方程

    做变量替换,转化成多个一阶微分方程
    在这里插入图片描述
    F.m

    %y1=y
    %y2=y1'=y'
    %y2'=y''
    %y0=2,y1=0
    function dy=F(t,y)%虽然这里我们没用上自变量但是这个参数还是要加,毕竟是调库函数所以说还是得按他的规矩
    dy=zeros(2,1);
    dy(1)=y(2);
    dy(2)=1000*(1-y(1)^2)*y(2)-y(1);
    

    main.m

    [T,Y]=ode45('F',[0,3000],[2 0]);
    plot(T,Y(:,1),'-');
    

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    发现了吗,其实他就是不停的做变量代换,然后比如说这里第二题就是用y1,y2,y3表示我们需要迭代得微分y1’,y2’,y3’,为了便于计算和迭代,我们将初值写成了一个列向量,因此我们后面的参数就是一个列向量来表示的。其实这个事情一点也不难,但是自己确实还是数学忘了,还是要多复习多学习

    展开全文
  • matlab解微分方程

    2018-09-17 21:51:49
    代码为2018年全国数学建模竞赛a题第一问matlab源程序,可动态生成三层隔热服距离与温度的关系图,以及三层隔热服的温度分布图。主要内容建立在一维非稳态热传导以及偏微分方程的解法程序
  • MATLAB求解微分方程

    千次阅读 2020-02-09 15:48:28
    微分方程的解析微分方程(组)的解析命令: dsolve('方程1','方程2',...'方程n','初始条件','自变量') 注:字母D表示求微分,D2、D3等表示求高阶微分,D后所跟的字母为因变量,自变量可以指定或由系统规则...

    微分方程的解析解

    求微分方程(组)的解析解命令:

    dsolve('方程1','方程2',...'方程n','初始条件','自变量')
    

    注:字母D表示求微分,D2、D3等表示求高阶微分,D后所跟的字母为因变量,自变量可以指定或由系统规则选定为缺省,默认是以t为自变量。
    如,微分方程d2y/dx2 =0 应表达为:D2y=0

    例1:求 du/dt=1+u2的通解。
    输入命令:dsolve(‘Du=1+u^2’,‘t’)
    运行结果:u=tan(t-c)
    在这里插入图片描述
    输入命令y=dsolve('D2y+4*Dy+29*y=0','y(0)=0,Dy(0)=15','x')
    运行结果为y =3sin(5x)exp(-2x)
    在这里插入图片描述
    输入命令:[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','t')
    运行结果为:
    x = C3exp(2t) + C4exp(-t)
    y = C3
    exp(2t) + C4exp(-t) + C5exp(-2t)
    z = C3exp(2t) + C5exp(-2t)

    以上都是常微分方程的精确解法,也称为常微分方程的符号解。但是,我们知道,有大量的常微分方程虽然从理论上讲,其解是存在的,但我们却无法求出其解析解,此时,我们需要寻求方程的数值解。

    用MATLAB求微分方程的数值解

    在求解常微分方程数值解方面,MATLAB具有丰富的函数,我们统称为solver,其一般格式为:
    在这里插入图片描述
    参数说明:
    t是时间点组成的列向量;
    x是微分方程(组)的解矩阵,每一行对应相应t的该行上时间点的微分方程(组)的解;
    ts有两种形式 [t0,tf] 和[t0,t1,…tf],两种都以 t0 为初始点,根据 tf 自动选择积分步长。前者返回实际求解过程中所有求解的时间点上的解,而后者只返回设定时间点上的解。后者对计算效率没有太大影响,但是求解大型问题时,可以减少内存存储。
    solver为命令 ode45,ode23,ode113,ode15s,ode23s,ode23t,ode23tb之一,其中前3个适用于求解非刚性(Nonstiff)问题,后4个适用于刚性问题。这些命令各有特点,列表说明:

    求解器ODE类型特点说明
    ode45非刚性一步算法,4,5阶Runge-Kutta方法累积截断误差(△x)3大部分场合的首选算法
    ode23非刚性一步算法,2,3阶Runge-Kutta方法累积截断误差(△x)3使用于精度较低的情形
    ode113非刚性多步算法,Adam算法,高低精度均可达到 10-3~10-6计算时间比ode45短
    ode23t适度刚性采用梯形算法适度刚性情形
    ode15s刚性多步法,Gear’s 反向数值积分,精度中等若ode45失效时,可尝试使用
    ode23s刚性一步法,2阶Rosebrock算法,低精度当精度较低时,计算时间比ode15s短
    ode23tb刚性梯形算法,低精度当精度较低时,计算时间比ode15s短

    例4:求解常微分方程 y’=-2y+2x2+2x,0<=x<=0.5,y(0)=1的程序如下:fun=inline(’-2y+2xx+2x’); [x,y]=ode23(fun,[0,0.5],1)
    结果为:
    x =
    0, 0.0400,0.0900,0.1400,0.1900,0.2400,0.2900,0.3400,0.390,0.4400,0.4900,0.5000
    y =
    1.0000,0.9247,0.8434,0.7754,0.7199,0.6764,0.6440,0.6222,0.6105,0.6084,0.6154,0.6179

    例5:求解常微分方程的解.
    分析:这是一个二阶非线性方程,用现成的方法均不能求解,但我们可以通过下面的变换,将二阶方程化为一阶方程,即可求解,这种方法是打靶法。
    令:x1=y, x2=dy/dt , u=7,则得到:
    在这里插入图片描述
    接着,编写vdp.m如下:

    //新建函数vdp,并保存在vdp.m文件中
    function fy=vdp(t,x)	
    fy=[x(2);7*(1-x(1)^2)*x(2)-x(1)];	//矩阵
    

    再编写m文件sy12_6.m如下:

    //调用ode算法来求解
    y0=[1;0];	//初始条件
    [t,x]=ode45(@vdp,[0,40],y0);
    plot(t,x(:,1),t,x(:,2))	%分别画出x数组第一列和第二列的数随t的变化曲线
    

    运行结果:
    在这里插入图片描述
    上机题:
    在这里插入图片描述
    程序:dsolve('D3y-D2y-3*Dy+2*y','x')
    在这里插入图片描述
    在这里插入图片描述
    程序:[x,y]=dsolve('Dx=5*cos(t)+2*exp(-2*t)-x-y','Dy=-5*cos(t)+2*exp(-2*t)+x-y','x(0)=2,y(0)=0','t')

    在这里插入图片描述
    用ode45函数求解,并画出图形。
    建立f2.m文件,

    function dx=f2(t,y)
    dx=zeros(2,1);	%初始化dx为两行一列的矩阵
    dx(1)=0.04*(1-y(1))-(1-y(2))*y(1)+0.0001*(1-y(2))^2;
    dx(2)=-10000*y(1)+3000*(1-y(2))^2;
    

    利用ode45算法求解,建立f3.m文件,

    [t,x]=ode45('f2',[0 100],[1 1]);
    plot(t,x(:,1),'+',t,x(:,2),'*');
    

    在这里插入图片描述

    在这里插入图片描述
    程序:
    求解析解y=dsolve('Dy=-y+t+1','y(0)=1','t')结果为:y =t + exp(-t)
    在[0,1]上作图

    ezplot('t + exp(-t)',[0,1])
    title('t + exp(-t)')
    

    在这里插入图片描述
    用ode45求数值解

    %f2.m
    function dy=f2(t,y)
    dy=zeros(1,1);
    dy(1)=-y(1)+t+1;
    
    %f3.m
    [t,y]=ode45('f2',[0 1],[1]);
    plot(t,y,'ro');
    title('比较图');
    

    在这里插入图片描述
    在同一幅图中比较:

    [t,y]=ode45('f2',[0 1],[1]);
    plot(t,y,'ro');
    title('比较图');
    t=0:0.1:1;
    y=t+exp(-t);
    hold on
    plot(t,y,'b');
    

    在这里插入图片描述

    展开全文
  • 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软件对常微分方程求解;前沿;一常微分方程组的符号(4)若边界条件少于方程组的阶数则返回的结果r中会出现任意常数C1C2(6)若没有给定输出参量则在命令窗口显示列表若该命令找不到解析则返回一警告信息...
  • matlab求解微分方程组代码 计算方法(calculation methodb) 该项目是《计算方法》一书中提到的经典方法和算法的matlab程序实现,包含代码详解和运行过程。 :grinning_face_with_big_eyes: 1.简介 2.线性方程组的...
  • 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/dx+29*y=...
  • 利用 MATLAB 求解微分方程数值 目录 1. 内容简介 把高等工程数学看了一遍增加对数学内容的了解对其中数值解法比较感兴趣 这大概是因为在其它各方面的学习和研究中经常会遇到数值解法的问题理解模型然后列出 微分...
  • Matlab求解微分方程

    2015-01-10 16:37:28
    Matlab求解各种微分方程代码,包括时延微分方程等。
  • 非稳态的偏微分方程组是一个比较难解决的问题,也是在热质交换等方面的常常遇到的问题,因此需要一套程序来解决非稳态偏微分方程组的数值
  • 微分方程电路求解仿真是信号与系统中的较为重要的知识点,本实验使学生能够掌握微分方程的电路仿真方法和线性连续系统的时域分析方法,并将所学的MATLAB和信号与系统课程融合到一起,对信号与系统有一个更为直观的认识,...
  • MATLAB程序分享求解偏微分方程扩散方程有限差分法-MATLAB求解微分方程(扩散方程)有限差分法 源程序代码.rar 程序代码见附件,拿资料请顺便顶个贴~~ 如果下载有问题,请加我 qq 1530497909,给你在线传
  • MATLAB微分方程数值

    千人学习 2019-05-14 22:46:53
    结合MATLAB微分方程数值工具箱介绍偏微分方程求解,分GUI和MATLAB函数两种实现方式进行介绍。
  • Matlab 解微分方程;一微分方程的解析解;输入命令: y=dsolve'D2y+4*Dy+29*y=0'y(0)=0,Dy(0)=15'x;二微分方程的数值解;二建立数值解法的一些途径;2使用数值积分;3使用泰勒公式; 1在解n个未知函数的方程组时x0和x均...
  • 许多物理现象随着时间而发生变化、如热传导过程、气体扩散过程和波的传播过程都与时间有关。...利用MATLAB有限差分法这类问题,就是从初始值出发,通过差分格式沿时间增加的方向,逐步求出微分方程的近似
  • 文章目录一、dsolve:解微分方程组1. 解一阶微分方程组2. 解二阶微分方程组3. 非常系数的二阶微分方程二、ode23:数值解微分方程 一、dsolve:解微分方程组 1. 解一阶微分方程组 使用 MATLAB解: 或者: % diff(y...
  • 如何使用MATLAB求解微分方程(组;Where ;Where ;When ;方法 特点 / 说明; 在数学中刚性方程是指一个微分方程其数值分析的只有在时间间隔很小时才会稳定只要时间间隔略大其就会不稳定 目前很难去精确地去定义哪些...
  • Matlab求解微分方程数值

    万次阅读 多人点赞 2017-08-01 11:52:16
    有三种方法求解微分方程数值: 欧拉法 改进欧拉法 龙格库塔法 接下来用一个练习来对比这三种求解方法。问题描述:用改进的Euler方法、MATLAB的ode45命令分别求下列初值问题的数值,并画图与精确对比,其中步长...
  • matlab解微分方程

    2021-05-24 20:08:37
    研究了使用matlab如何解微分方程

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,399
精华内容 3,359
关键字:

matlab求解微分方程

matlab 订阅