Matlab解微分方程(ODE+PDE)

合集下载

Matlab求解微分方程(组)及偏微分方程(组)

Matlab求解微分方程(组)及偏微分方程(组)

第四讲 Matlab 求解微分方程(组)理论介绍:Matlab 求解微分方程(组)命令 求解实例:Matlab 求解微分方程(组)实例实际应用问题通过数学建模所归纳得到的方程,绝大多数都是微分方程,真正能得到代数方程的机会很少.另一方面,能够求解的微分方程也是十分有限的,特别是高阶方程和偏微分方程(组).这就要求我们必须研究微分方程(组)的解法:解析解法和数值解法. 一.相关函数、命令及简介1.在Matlab 中,用大写字母D 表示导数,Dy 表示y 关于自变量的一阶导数,D2y 表示y 关于自变量的二阶导数,依此类推.函数dsolve 用来解决常微分方程(组)的求解问题,调用格式为:X=dsolve(‘eqn1’,’eqn2’,…)函数dsolve 用来解符号常微分方程、方程组,如果没有初始条件,则求出通解,如果有初始条件,则求出特解.注意,系统缺省的自变量为t2.函数dsolve 求解的是常微分方程的精确解法,也称为常微分方程的符号解.但是,有大量的常微分方程虽然从理论上讲,其解是存在的,但我们却无法求出其解析解,此时,我们需要寻求方程的数值解,在求常微分方程数值解方面,MATLAB 具有丰富的函数,我们将其统称为solver ,其一般格式为:[T,Y]=solver(odefun,tspan,y0)说明:(1)solver 为命令ode45、ode23、ode113、ode15s 、ode23s 、ode23t 、ode23tb 、ode15i 之一.(2)odefun 是显示微分方程'(,)y f t y =在积分区间tspan 0[,]f t t =上从0t 到ft 用初始条件0y 求解.(3)如果要获得微分方程问题在其他指定时间点012,,,,f t t t t 上的解,则令tspan 012[,,,]f t t t t =(要求是单调的).(4)因为没有一种算法可以有效的解决所有的ODE 问题,为此,Matlab 提供了多种求解器solver ,对于不同的ODE 问题,采用不同的solver.表1 Matlab中文本文件读写函数说明:ode23、ode45是极其常用的用来求解非刚性的标准形式的一阶微分方程(组)的初值问题的解的Matlab常用程序,其中:ode23采用龙格-库塔2阶算法,用3阶公式作误差估计来调节步长,具有低等的精度.ode45则采用龙格-库塔4阶算法,用5阶公式作误差估计来调节步长,具有中等的精度.3.在matlab命令窗口、程序或函数中创建局部函数时,可用内联函数inline,inline函数形式相当于编写M函数文件,但不需编写M-文件就可以描述出某种数学关系.调用inline函数,只能由一个matlab表达式组成,并且只能返回一个变量,不允许[u,v]这种向量形式.因而,任何要求逻辑运算或乘法运算以求得最终结果的场合,都不能应用inline函数,inline函数的一般形式为:FunctionName=inline(‘函数内容’, ‘所有自变量列表’)例如:(求解F(x)=x^2*cos(a*x)-b ,a,b是标量;x是向量)在命令窗口输入:Fofx=inline(‘x .^2*cos(a*x)-b ’ , ‘x ’,’a ’,’b ’); g= Fofx([pi/3 pi/3.5],4,1) 系统输出为:g=-1.5483 -1.7259注意:由于使用内联对象函数inline 不需要另外建立m 文件,所有使用比较方便,另外在使用ode45函数的时候,定义函数往往需要编辑一个m 文件来单独定义,这样不便于管理文件,这里可以使用inline 来定义函数. 二.实例介绍1.几个可以直接用Matlab 求微分方程精确解的实例 例1 求解微分方程2'2x y xy xe -+=程序:syms x y; y=dsolve(‘Dy+2*x*y=x*exp(-x^2)’,’x ’)例 2 求微分方程'0x xy y e +-=在初始条件(1)2y e =下的特解并画出解函数的图形.程序:syms x y; y=dsolve(‘x*Dy+y-exp(1)=0’,’y(1)=2*exp(1)’,’x ’);ezplot(y)例 3 求解微分方程组530tdx x y e dtdy x y dt⎧++=⎪⎪⎨⎪--=⎪⎩在初始条件00|1,|0t t x y ====下的特解并画出解函数的图形.程序:syms x y t[x,y]=dsolve('Dx+5*x+y=exp(t)','Dy-x-3*y=0','x(0)=1','y(0)=0','t')simple(x); simple(y)ezplot(x,y,[0,1.3]);axis auto2.用ode23、ode45等求解非刚性标准形式的一阶微分方程(组)的初值问题的数值解(近似解)例 4 求解微分方程初值问题2222(0)1dy y x xdx y ⎧=-++⎪⎨⎪=⎩的数值解,求解范围为区间[0,0.5].程序:fun=inline('-2*y+2*x^2+2*x','x','y'); [x,y]=ode23(fun,[0,0.5],1); plot(x,y,'o-')例 5 求解微分方程22'2(1)0,(0)1,(0)0d y dyy y y y dt dtμ--+===的解,并画出解的图形.分析:这是一个二阶非线性方程,我们可以通过变换,将二阶方程化为一阶方程组求解.令12,,7dyx y x dtμ===,则 121221212,(0)17(1),(0)0dx x x dtdx x x x x dt⎧==⎪⎪⎨⎪=--=⎪⎩ 编写M-文件vdp.m function fy=vdp(t,x)fy=[x(2);7*(1-x(1)^2)*x(2)-x(1)]; end在Matlab 命令窗口编写程序 y0=[1;0][t,x]=ode45(@vdp,[0,40],y0);或[t,x]=ode45('vdp',[0,40],y0); y=x(:,1);dy=x(:,2); plot(t,y,t,dy)练习与思考:M-文件vdp.m 改写成inline 函数程序? 3.用Euler 折线法求解Euler 折线法求解的基本思想是将微分方程初值问题00(,)()dyf x y dxy x y ⎧=⎪⎨⎪=⎩ 化成一个代数(差分)方程,主要步骤是用差商()()y x h y x h +-替代微商dydx,于是00()()(,())()k k k k y x h y x f x y x h y y x +-⎧=⎪⎨⎪=⎩记1,(),k k k k x x h y y x +=+=从而1(),k k y y x h +=+于是0011(),,0,1,2,,1(,).k k k k k k y y x x x h k n y y hf x y ++=⎧⎪=+=-⎨⎪=+⎩例 6 用Euler 折线法求解微分方程初值问题22(0)1dyx y dxy y ⎧=+⎪⎨⎪=⎩的数值解(步长h 取0.4),求解范围为区间[0,2].分析:本问题的差分方程为00110,1,0.4,0,1,2,,1(,).k k k k k k x y h x x h k n y y hf x y ++===⎧⎪=+=-⎨⎪=+⎩程序:>> clear >> f=sym('y+2*x/y^2'); >> a=0; >> b=2; >> h=0.4; >> n=(b-a)/h+1; >> x=0; >> y=1;>> szj=[x,y];%数值解 >> for i=1:n-1y=y+h*subs(f,{'x','y'},{x,y});%subs ,替换函数 x=x+h;szj=[szj;x,y]; end>>szj>> plot(szj(:,1),szj(:,2))说明:替换函数subs 例如:输入subs(a+b,a,4) 意思就是把a 用4替换掉,返回 4+b ,也可以替换多个变量,例如:subs(cos(a)+sin(b),{a,b},[sym('alpha'),2])分别用字符alpha 替换a 和2替换b ,返回 cos(alpha)+sin(2)特别说明:本问题可进一步利用四阶Runge-Kutta 法求解,Euler 折线法实际上就是一阶Runge-Kutta 法,Runge-Kutta 法的迭代公式为001112341213243(),,(22),6(,),0,1,2,,1(,),22(,),22(,).k k k k k k k k k k k k y y x x x h h y y L L L L L f x y k n h h L f x y L h h L f x y L L f x h y hL ++=⎧⎪=+⎪⎪=++++⎪⎪=⎪=-⎨⎪=++⎪⎪⎪=++⎪⎪=++⎩相应的Matlab 程序为:>> clear >> f=sym('y+2*x/y^2'); >> a=0; >> b=2; >> h=0.4; >> n=(b-a)/h+1; >> x=0; >> y=1;>> szj=[x,y];%数值解 >> for i=1:n-1l1=subs(f, {'x','y'},{x,y});替换函数 l2=subs(f, {'x','y'},{x+h/2,y+l1*h/2}); l3=subs(f, {'x','y'},{x+h/2,y+l2*h/2}); l4=subs(f, {'x','y'},{x+h,y+l3*h});y=y+h*(l1+2*l2+2*l3+l4)/6; x=x+h;szj=[szj;x,y]; end >>szj>> plot(szj(:,1),szj(:,2))练习与思考:(1)ode45求解问题并比较差异. (2)利用Matlab 求微分方程(4)(3)''20y y y -+=的解.(3)求解微分方程''2',2(1)0,030,(0)1,(0)0y y y y x y y --+=≤≤==的特解. (4)利用Matlab 求微分方程初值问题2''''00(1)2,|1,|3x x x y xy y y ==+===的解. 提醒:尽可能多的考虑解法 三.微分方程转换为一阶显式微分方程组Matlab 微分方程解算器只能求解标准形式的一阶显式微分方程(组)问题,因此在使用ODE 解算器之前,我们需要做的第一步,也是最重要的一步就是借助状态变量将微分方程(组)化成Matlab 可接受的标准形式.当然,如果ODEs 由一个或多个高阶微分方程给出,则我们应先将它变换成一阶显式常微分方程组.下面我们以两个高阶微分方程组构成的ODEs 为例介绍如何将它变换成一个一阶显式微分方程组.Step 1 将微分方程的最高阶变量移到等式左边,其它移到右边,并按阶次从低到高排列.形式为:()'''(1)'''(1)()'''(1)'''(1)(,,,,,,,,,,)(,,,,,,,,,,)m m n n m n x f t x x x x y y y y y g t x x x x y y y y ----⎧=⎨=⎩Step 2 为每一阶微分式选择状态变量,最高阶除外'''(1)123'''(1)123,,,,,,,,,m m n m m m m n x x x x x x x x x y x y x y x y--++++========注意:ODEs 中所有是因变量的最高阶次之和就是需要的状态变量的个数,最高阶的微分式不需要给它状态变量.Step 3 根据选用的状态变量,写出所有状态变量的一阶微分表达式''''122334123''12123,,,,(,,,,,),,(,,,,,)m m n m m m nm n x x x x x x x f t x x x x xx xg t x x x x +++++======练习与思考:(1)求解微分方程组**'''3312*'''3312()()22x x x y x r r y y y x y r r μμμμμμ⎧+-=+--⎪⎪⎨⎪=+--⎪⎩其中2r =1r =*1,μμ=-1/82.45,μ=(0) 1.2,x =(0)0,y ='(0)0,x ='(0) 1.049355751y =-(2)求解隐式微分方程组''''''''''''2235x y x y x y x y xy y ⎧+=⎨++-=⎩ 提示:使用符号计算函数solve 求'''',x y ,然后利用求解微分方程的方法 四.偏微分方程解法Matlab 提供了两种方法解决PDE 问题,一是使用pdepe 函数,它可以求解一般的PDEs,具有较大的通用性,但只支持命令形式调用;二是使用PDE 工具箱,可以求解特殊PDE 问题,PDEtoll 有较大的局限性,比如只能求解二阶PDE 问题,并且不能解决片微分方程组,但是它提供了GUI 界面,从复杂的编程中解脱出来,同时还可以通过File —>Save As 直接生成M 代码.1.一般偏微分方程(组)的求解(1)Matlab 提供的pdepe 函数,可以直接求解一般偏微分方程(组),它的调用格式为:sol=pdepe(m,@pdefun,@pdeic,@pdebc,x,t)@pdefun 是PDE 的问题描述函数,它必须换成标准形式:(,,)[(,,,)](,,,)m m u u u uc x t x x f x t u s x t u x t x x x-∂∂∂∂∂=+∂∂∂∂∂ 这样,PDE 就可以编写入口函数:[c,f,s]=pdefun(x,t,u,du),m,x,t 对应于式中相关参数,du 是u 的一阶导数,由给定的输入变量可表示出c,f,s 这三个函数.@pdebc 是PDE 的边界条件描述函数,它必须化为形式:(,,)(,,).*(,,,)0up x t u q x t u f x t u x∂==∂ 于是边值条件可以编写函数描述为:[pa,qa,pb,qb]=pdebc(x,t,u,du),其中a 表示下边界,b 表示上边界.@pdeic 是PDE 的初值条件,必须化为形式:00(,)u x t u =,故可以使用函数描述为:u0=pdeic(x)sol 是一个三维数组,sol(:,:,i)表示i u 的解,换句话说,k u 对应x(i)和t(j)时的解为sol(i,j,k),通过sol ,我们可以使用pdeval 函数直接计算某个点的函数值.(2)实例说明 求解偏微分2111222221220.024()0.17()u u F u u t xu u F u u tx ⎧∂∂=--⎪⎪∂∂⎨∂∂⎪=+-⎪∂∂⎩ 其中, 5.7311.46()xx F x e e -=-且满足初始条件12(,0)1,(,0)0u x u x ==及边界条件1(0,)0,u t x ∂=∂221(0,)0,(1,)1,(1,)0uu t u t t x∂===∂ 解:(1)对照给出的偏微分方程和pdepe 函数求解的标准形式,原方程改写为111221220.024()1.*()10.17u u F u u x u F u u u t x x ∂⎡⎤⎢⎥--⎡⎤⎡⎤⎡⎤∂∂∂=+⎢⎥⎢⎥⎢⎥⎢⎥-∂∂∂⎣⎦⎣⎦⎣⎦⎢⎥⎢⎥∂⎣⎦可见1121220.024()10,,,()10.17u F u u x m c f s F u u u x ∂⎡⎤⎢⎥--⎡⎤⎡⎤∂====⎢⎥⎢⎥⎢⎥-∂⎣⎦⎣⎦⎢⎥⎢⎥∂⎣⎦%目标PDE 函数function [c,f,s]=pdefun(x,t,u,du) c=[1;1];f=[0.024*du(1);0.17*du(2)];temp=u(1)-u(2);s=[-1;1].*(exp(5.73*temp)-exp(-11.46*temp)) end(2)边界条件改写为:下边界2010.*00f u ⎡⎤⎡⎤⎡⎤+=⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎣⎦上边界1110.*000u f -⎡⎤⎡⎤⎡⎤+=⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎣⎦%边界条件函数function [pa,qa,pb,qb]=pdebc(xa,ua,xb,ub,t) pa=[0;ua(2)]; qa=[1;0]; pb=[ub(1)-1;0]; qb=[0;1]; end(3)初值条件改写为:1210u u ⎡⎤⎡⎤=⎢⎥⎢⎥⎣⎦⎣⎦%初值条件函数 function u0=pdeic(x) u0=[1;0]; end(4)编写主调函数 clcx=0:0.05:1; t=0:0.05:2; m=0;sol=pdepe(m,@pdefun,@pdeic,@pdebc,x,t); subplot(2,1,1) surf(x,t,sol(:,:,1)) subplot(2,1,2) surf(x,t,sol(:,:,2))练习与思考: This example illustrates the straightforward formulation, computation, and plotting of the solution of a single PDE.2()u u t x xπ∂∂∂=∂∂∂ This equation holds on an interval 01x ≤≤ for times 0t ≥. The PDE satisfies the initial condition (,0)sin u x x π= and boundary conditions(0,)0;(1,)0t u u t e t xπ-∂=+=∂ 2.PDEtool 求解偏微分方程 (1)PDEtool (GUI )求解偏微分方程的一般步骤在Matlab 命令窗口输入pdetool ,回车,PDE 工具箱的图形用户界面(GUI)系统就启动了.从定义一个偏微分方程问题到完成解偏微分方程的定解,整个过程大致可以分为六个阶段Step 1 “Draw 模式”绘制平面有界区域Ω,通过公式把Matlab 系统提供的实体模型:矩形、圆、椭圆和多边形,组合起来,生成需要的平面区域.Step 2 “Boundary 模式”定义边界,声明不同边界段的边界条件.Step 3 “PDE 模式”定义偏微分方程,确定方程类型和方程系数c,a,f,d ,根据具体情况,还可以在不同子区域声明不同系数.Step 4 “Mesh 模式”网格化区域Ω,可以控制自动生成网格的参数,对生成的网格进行多次细化,使网格分割更细更合理.Step 5 “Solve 模式”解偏微分方程,对于椭圆型方程可以激活并控制非线性自适应解题器来处理非线性方程;对于抛物线型方程和双曲型方程,设置初始边界条件后可以求出给定时刻t 的解;对于特征值问题,可以求出给定区间上的特征值.求解完成后,可以返回到Step 4,对网格进一步细化,进行再次求解.Step 6 “View 模式”计算结果的可视化,可以通过设置系统提供的对话框,显示所求的解的表面图、网格图、等高线图和箭头梯形图.对于抛物线型和双曲线型问题的解还可以进行动画演示.(2)实例说明用法求解一个正方形区域上的特征值问题:12|0u u u u λ∂Ω⎧-∆-=⎪⎨⎪=⎩ 正方形区域为:11,1 1.x x -≤≤-≤≤(1)使用PDE工具箱打开GUI求解方程(2)进入Draw模式,绘制一个矩形,然后双击矩形,在弹出的对话框中设置Left=-1,Bottom=-1,Width=2,Height=2,确认并关闭对话框(3)进入Boundary模式,边界条件采用Dirichlet条件的默认值(4)进入PDE模式,单击工具栏PDE按钮,在弹出的对话框中方程类型选择Eigenmodes,参数设置c=1,a=-1/2,d=1,确认后关闭对话框(5)单击工具栏的 按钮,对正方形区域进行初始网格剖分,然后再对网格进一步细化剖分一次(6)点开solve菜单,单击Parameters选项,在弹出的对话框中设置特征值区域为[-20,20](7)单击Plot菜单的Parameters项,在弹出的对话框中选中Color、Height(3-D plot)和show mesh项,然后单击Done确认(8)单击工具栏的“=”按钮,开始求解。

ODE问题解析解及数值解的matlab实现

ODE问题解析解及数值解的matlab实现

龙源期刊网 ODE问题解析解及数值解的matlab实现作者:于丽妮来源:《电脑知识与技术》2012年第14期利用数学手段研究自然现象和社会现象或解决工程技术问题,如揭示质点运动规律的Newton第二定律和刻画回路电流或电压变化规律的基尔霍夫回路定律等。

一般先要建立数学模型,再对数学模型进行简化和求解,然后结合实际问题对结果进行分析和讨论。

数学模型中最常见的表达方式,是包含自变量和未知函数以及未知函数导数的的函数方程。

即微分方程,通常包括常微分方程(ODE)和偏微分方程(PDE)。

ODE是常微分方程的英文缩写,即ordinary diffrential equation,如果在微分方程中,自变量的个数只有一个,这就是ODE方程,例如形如F(x,y,y’,y")=0的方程就是一个二阶ODE方程。

对于常微分方程来说,能够求出解析解的是有限的,即不能通过等式左右同时积分求不定积分的方法求出,特别是高阶方程和偏微分方程,有的解还需要用插值方法继续计算,因此用解析法来求微分方程的数值解有时是不适宜的。

但是在给定条件下,可以求出常微分方程的数值解来逼近数值解,以完成对模型的研究。

这就要求我们必须研究微分方程的解法,既要研究微分方程的解析解法(精确解),更要研究微分方程的数值解法(近似解)。

ODE问题通常是对一动态过程(动态系统、动力系统)演化规律的描述,求解ODE问题就是要了解和掌握动态过程演化规律。

本文主要研究ODE问题解析解及数值解的matlab实现。

微分方程是一门实用性很强的学科,对于理论研究以及生活实际提出的微分方程问题,能够求出解析解的方程是有限的,因此将计算机应用到求微分方程解的问题是必要的。

本文详细介绍了常微分方程中解析解及数值解解法的理论基础,并用matlab加以实现。

微分方程数值解-matlab

微分方程数值解-matlab

解 输入命令 :
[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=simple(x) % 将x化简 y=simple(y) z=simple(z)
结 果 为:x = (c1-c2+c3+c2e -3t-c3e-3t)e2t y = -c1e-4t+c2e-4t+c2e-3t-c3e-3t+c1-c2+c3)e2t z = (-c1e-4t+c2e-4t+c1-c2+c3)e2t
9
但能求解析解的常微分方程是有限的, 但能求解析解的常微分方程是有限的,大多数的常 解析解的常微分方程是有限的 微分方程是给不出解析解的. 微分方程是给不出解析解的. 例
′ = x2 + y2 y
这个一阶微分方程就不能用初等函数及其积
分来表达它的解。 分来表达它的解。 例
y ′ = y y (0 ) = 1
MATLAB ODE初值问题的数值解 ODE初值问题的数值解 PDE问题的数值解 PDE问题的数值解
1
问题提出 倒葫芦形状容器壁上的刻度问题. 倒葫芦形状容器壁上的刻度问题.对于圆柱形状容 器壁上的容积刻度, 器壁上的容积刻度,可以利用圆柱体体积公式
D = π 2
2
V
H
其中直径D为常数. 其中直径D为常数. 对于几何形状不是规则的容器, 对于几何形状不是规则的容器,比如倒葫芦形状容 器壁上如何标出刻度呢? 器壁上如何标出刻度呢?下表是经过测量得到部分 容器高度与直径的关系. 容器高度与直径的关系.

matlab偏微分方程

matlab偏微分方程

matlab偏微分方程Matlab可以用于求解偏微分方程(PDE)。

以下是一些示例:1. 热传导方程热传导方程描述了温度随时间和空间的变化,由以下方程给出:$\frac{\partial T}{\partial t} = \alpha \frac{\partial^2 T}{\partialx^2}$在Matlab中,可以使用“pdepe”函数来求解这个问题。

具体来说,需要指定初始条件和边界条件,并设置物理参数。

2. 波动方程波动方程描述了波的传播,由以下方程给出:$\frac{\partial^2 u}{\partial t^2} = c^2 \frac{\partial^2 u}{\partialx^2}$在Matlab中,可以使用“pdepe”函数来求解这个问题。

需要指定初始条件和边界条件,并设置物理参数。

3. Navier-Stokes方程Navier-Stokes方程描述了流体的运动,由以下方程给出:$\frac{\partial u}{\partial t} + u \cdot \nabla u = -\frac{1}{\rho}\nabla p + \nu \nabla^2 u$在Matlab中,可以使用PDE工具箱进行求解。

需要指定初始条件、边界条件和物理参数。

4. Schrödinger方程Schrödinger方程描述了量子力学中的波函数演化,由以下方程给出:$i \hbar \frac{\partial \psi}{\partial t} = -\frac{\hbar^2}{2m}\nabla^2 \psi + V(x) \psi$在Matlab中,可以使用PDE工具箱或ODE工具箱进行求解。

需要指定初始条件、边界条件和物理参数。

以上仅是部分示例,Matlab还可以用于求解其他类型的偏微分方程。

《应用matlab的pdetoolbox求解偏微分方程综合实验》

《应用matlab的pdetoolbox求解偏微分方程综合实验》

《应用matlab的pdetoolbox求解偏微分方程综合实验》编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望(《应用matlab的pdetoolbox求解偏微分方程综合实验》)的内容能够给您的工作和学习带来便利。

同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。

本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为《应用matlab的pdetoolbox求解偏微分方程综合实验》的全部内容。

2011届信计专业学生综合实验题目(要求按照所附开题报告表的格式填写提交开题报告。

一个小组选做一题,小组全体成员共同完成,每个小组只提交一份实验报告,按照出力多少排名。

提交时间在本学期18周以前.)3 应用Matlab 的PDE Toolbox 求解偏微分方程熟悉Matlab 的PDE 工具箱的功能,并用其求解具有工程背景的偏微分方程,要求分别对三种类型方程:抛物型、椭圆形和双曲型。

阐述清楚如下方法:1、这里我们先脱离问题所含有的工程背景,分别举三个例子,大致的说明一下如何使用Matlab 的PDE 工具箱来求解三种类型的偏微分方程。

(1)椭圆形方程: 考虑一块圆形金属片,中心挖去一正方形,外边界满足Neumann 条件,内边界满足Dirichlet条件:考虑到入射波以方向,所以上式可以写成这样得到求解这个入射波的定解问题:这里取波长为0。

1。

现在用GUI 来求解上述这个问题,并最终获得其解得图形:图1 初始网格、加密以及网格剖分数据图 2解的三维图形Ω=+∇⋅∇-in f au u c ,)(.),(xik e y x v r π-=-=x -,ikx e r -=),(y x r ⎪⎪⎩⎪⎪⎨⎧-=-=∂∂-=-==+∆--外边界上内边界上在区域内,60,,0602i ik n ree r r k r xi ikx ,60=kλ图3 解的二维动画图附录1:二维动画的Matlab程序(2)抛物型方程:考虑一个圆柱形放射性杆,其左端供热,右端保持常温,侧面与环境有热交换。

matlab 循环语句

matlab 循环语句

matlab 循环语句
Matlab一种用于常微分方程(ODE)和偏微分方程(PDE)数值求解的高级开发工具,它可以轻松地创建数据流量图。

循环语句是Matlab语言中最重要的结构之一。

循环语句可以节省计算空间,而且有助于提高程序的效率和可读性。

Matlab 中有两种基本的循环结构:“for”和“while”循环。

“for”循环是用于执行指定次数的语句的循环结构。

它根据在程序中定义的特定参数来重复执行指定的语句。

这个循环通常用于在给定的范围内重复执行操作,例如遍历数组中的每个元素。

“while”循环不断重复执行一组语句,直到某个条件被满足。

这种循环结构可以用来在某个特定条件被满足前不断迭代,从而得到最终计算结果。

Matlab提供了一些更高级的循环构造,如“break”循环,它可以用来中断for循环或while循环;“continue”循环,它可以跳过for循环或while循环中余下的部分;和“switch-case”循环,它用来在多种可能的情况中选择某个特定的行为。

Matlab 中的循环语句是基于动态程序设计语言(DPDL)的精炼形式,具有易读性和清晰的结构。

循环语句可以用来消除一些枯燥和重复性的代码,因此它们可以让程序以更简洁的方式完成。

Matlab环语句的使用方式有多种,可以极大地提高程序的可读性和可维护性。

此外,它还可以减少计算时间和资源使用量,从而使程序更快。

此,Matlab环语句是程序开发过程中不可或缺的关键部
分,它可以用于处理复杂的问题。

用MATLAB求解微分方程

用MATLAB求解微分方程
用MATLAB求解微分方程
1. 微分方程的解析解
求微分方程(组)的解析解命令:
dsolve(‘方程1’, ‘方程2’,…‘方程n’, ‘初始条件’, ‘自变量’)
结 果:u = tan(t-c)
解 输入命令:dsolve('Du=1+u^2','t')
STEP2
STEP1
解 输入命令: y=dsolve('D2y+4*Dy+29*y=0','y(0)=0,Dy(0)=15','x')
导弹追踪问题
设位于坐标原点的甲舰向位于x轴上点A(1, 0)处的乙舰发射导弹,导弹头始终对准乙舰.如果乙舰以最大的速度v0(是常数)沿平行于y轴的直线行驶,导弹的速度是5v0,求导弹运行的曲线方程.又乙舰行驶多远时,导弹将它击中? 解法一(解析法)
由(1),(2)消去t整理得模型:
解法二(数值解)
结 果 为:x = (c1-c2+c3+c2e -3t-c3e-3t)e2t y = -c1e-4t+c2e-4t+c2e-3t-c3e-3t+c1-c2+c3)e2t z = (-c1e-4t+c2e-4t+c1-c2+c3)e2t
2、取t0=0,tf=12,输入命令: [T,Y]=ode45('rigid',[0 12],[0 1 1]); plot(T,Y(:,1),'-',T,Y(:,2),'*',T,Y(:,3),'+')
3、结果如图
图中,y1的图形为实线,y2的图形为“*”线,y3的图形为“+”线.

matlab中differential equation editor元件

matlab中differential equation editor元件

在MATLAB 中,有一个图形用户界面(GUI)工具,称为"Differential Equation Editor"(微分方程编辑器),用于创建和解决微分方程。

以下是使用Differential Equation Editor 的基本步骤:1.打开Differential Equation Editor:•在MATLAB 命令窗口中输入dde并按Enter。

•或者,你可以在MATLAB 工具栏的"APPS" 标签中找到"Differential Equation Editor"。

2.在Differential Equation Editor 中定义微分方程:•在左侧的"Initial Conditions" 部分定义初始条件。

•在右侧的"Differential Equations" 部分定义微分方程。

3.选择方程类型:•对于常微分方程(ODE),选择"Ordinary Differential Equations (ODEs)"。

•对于偏微分方程(PDE),选择"Partial Differential Equations (PDEs)"。

4.输入方程:•输入你的微分方程或选择已有的模型。

•如果是ODE,通常采用如y' = f(t, y) 的形式。

•如果是PDE,输入适当的偏导数和方程。

5.定义初始条件:•输入初始条件,例如t0 和y0。

6.配置求解器选项:•选择求解器和其他求解参数,例如求解时间范围等。

7.单击"Solve" 按钮:•单击"Solve" 按钮来解决你的微分方程。

8.查看结果:•查看Differential Equation Editor 中的解,并在MATLAB 命令窗口中检查结果。

Matlab微分方程的解法

Matlab微分方程的解法

-0.5
-0.55
-0.6
-0.65
-0.7
-0.75
-0.8
-0.85
-0.9
-0.95
-1
0
0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9
1
time t0=0,tt=1
图3 给定新的初始数据,由函数xprim2定义的ODE解的图形
(d) 求解下面方程组并不难:
x x x x ì ' = - 0.1
在下面的初值问题中,有两个未知函数:x1(t)和x2(t),并用以下式子表达其微... 页码,1/11
Matlab关于微分方程的解法
MATLAB使用龙格-库塔-芬尔格(Runge-Kutta-Fehlberg)方法来解ODE问题。在有限点内计算求解。而 这些点的间距有解的本身来决定。当解比较平滑时,区间内使用的点数少一些,在解变化很快时,区间内应使 用较多的点。 为了得到更多的有关何时使用哪种解法和算法的信息,推荐使用helpdesk。所有求解方程通用的语法或句法在 命令集中头两行给出。时间间隔将以向量t=[t0,tt]给出。 命令ode23可以求解(2,3)阶的常微分方程组,函数ode45使用(4,5)阶的龙格-库塔-芬尔格方法。注意,在这种情 况下x’是x的微分不是x的转置。 在命令集中solver将被诸如ode45函数所取代。
0.6
0.55
0.5
0
0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9
1
time t0=0,tt=1
图1 由函数xprim1定义的ODE解的图形
(b) 解下面的ODE过程是等价的:
ïíìx' = x2
ïîx(0) = 1

matlab 多元微分方程组

matlab 多元微分方程组

matlab 多元微分方程组MATLAB多元微分方程组多元微分方程组是数学中的一个研究重点,也是现代科学中的重要工具。

MATLAB是一种高级的数学软件,具有优秀的运算功能,可以方便地求解多元微分方程组。

下面,我们就来介绍MATLAB求解多元微分方程组的方法。

一、多元微分方程组的定义多元微分方程组是指由多个未知函数构成的微分方程组,其一般形式为:dy1/dx=f1(x,y1,y2,…,yn)dy2/dx=f2(x,y1,y2,…,yn)…dyn/dx=fn(x,y1,y2,…,yn)其中,y1,y2,…,yn是未知函数,x是自变量,f1,f2,…,fn是已知函数。

二、MATLAB求解多元微分方程组的方法MATLAB求解多元微分方程组的方法有多种,下面我们来逐一介绍。

1.ode45函数ode45函数是MATLAB中常用的求解微分方程的函数,在有助于数值解的情况下,可以求解多元微分方程组。

ode45函数可以求解常微分方程组,参数设置比较简单,使用方便。

其一般形式为:[T,Y]=ode45(odefun,tspan,y0);其中,T是时间数组,Y是多元函数数组,odefun是方程组,tspan是时间段,y0是初始值。

2.pdepe函数pdepe函数是MATLAB中求解偏微分方程的函数。

如果有需要求解偏微分方程组的情况,可以将多元微分方程组转化为偏微分方程组再进行求解。

该函数需要设置PDE模型、边界条件和初值条件等参数,使用比较灵活。

其一般形式为:sol=pdepe(m,pdefun,icfun,bcfun,x,t);其中,pdefun是偏函数,icfun是初值条件函数,bcfun是边界条件函数,m是空间维度,x是空间数组,t是时间数组,sol是输出的解。

以上就是MATLAB求解多元微分方程组的常用方法,可以按需选择适合的方式进行求解。

三、总结多元微分方程组是高等数学中的重要内容,MATLAB可以有效地求解多元微分方程组,并且解题速度很快。

matlab的ode函数

matlab的ode函数

matlab的ode函数MATLAB的ode函数是一个强大的工具,用于求解常微分方程(Ordinary Differential Equations,ODE)。

它可以用于求解各种类型的ODE问题,包括一阶方程和高阶方程、线性和非线性方程、初值问题和边值问题。

ode函数的基本形式是yprime=odefun(t,y),其中t是独立变量,y是未知函数。

odefun是一个用户自定义的函数,它描述了ODE的右侧。

一般来说,odefun应该返回yprime的值,即ODE的右侧函数的值。

ode函数根据ODE的性质和求解精度,选择合适的求解方法。

MATLAB中最常用的方法是ode45,它基于Runge-Kutta-Fehlberg方法。

ode45可以处理各种类型的ODE问题,并且在准确性和效率之间取得了良好的平衡。

除了ode45之外,MATLAB还提供了其他几种求解ODE的函数。

例如,ode23使用比ode45更低阶的Runge-Kutta方法,但通常更快。

ode113使用更高阶的方法来提供更高的准确性,但可能更慢。

此外,MATLAB还提供了一些特殊类型的ode函数,如ode15i用于求解含有隐式方程的ODE,ode23s用于求解刚性(stiff)ODE,ode23t用于求解带有时间延迟的ODE等。

除了求解ODE,ode函数还可以用于求解偏微分方程(Partial Differential Equations,PDE)的时间部分。

对于这种情况,可以使用pdepe函数。

总结起来,MATLAB的ode函数是一个灵活且强大的求解ODE的工具,可以用于各种类型和复杂度的ODE问题。

它提供了多种求解方法,可以平衡准确性和效率。

无论是初学者还是专业用户,ode函数都是一个不可或缺的工具,用于解决ODE相关的问题。

偏微分方程(PDEs)的MATLAB数值解法

偏微分方程(PDEs)的MATLAB数值解法

偏微分方程的MATLAB求解精讲©MA TLAB求解微分/偏微分方程,一直是一个头大的问题,两个字,“难过”,由于MA TLAB对LaTeX的支持有限,所有方程必须化成MA TLAB可接受的标准形式,不支持像其他三个数学软件那样直接傻瓜式输入,这个真把人给累坏了!不抱怨了,还是言归正传,回归我们今天的主体吧!MA TLAB提供了两种方法解决PDE问题,一是pdepe()函数,它可以求解一般的PDEs,据用较大的通用性,但只支持命令行形式调用。

二是PDE工具箱,可以求解特殊PDE问题,PDEtool有较大的局限性,比如只能求解二阶PDE问题,并且不能解决偏微分方程组,但是它提供了GUI界面,从繁杂的编程中解脱出来了,同时还可以通过File->Save As直接生成M代码一、一般偏微分方程组(PDEs)的MA TLAB求解 (3)1、pdepe函数说明 (3)2、实例讲解 (4)二、PDEtool求解特殊PDE问题 (6)1、典型偏微分方程的描述 (6)(1)椭圆型 (6)(2)抛物线型 (6)(3)双曲线型 (6)(4)特征值型 (7)2、偏微分方程边界条件的描述 (8)(1)Dirichlet条件 (8)(2)Neumann条件 (8)3、求解实例 (9)一、一般偏微分方程组(PDEs)的MATLAB 求解1、pdepe 函数说明MA TLAB 语言提供了pdepe()函数,可以直接求解一般偏微分方程(组),它的调用格式为sol=pdepe(m,@pdefun,@pdeic,@pdebc,x,t)【输入参数】@pdefun :是PDE 的问题描述函数,它必须换成下面的标准形式(,,)[(,,,)](,,,)()m m u u u uc x t x x f x t u s x t u x t x x x−∂∂∂∂∂=+∂∂∂∂∂式1 这样,PDE 就可以编写下面的入口函数 [c,f,s]=pdefun(x,t,u,du)m,x,t 就是对应于(式1)中相关参数,du 是u 的一阶导数,由给定的输入变量即可表示出出c,f,s 这三个函数@pdebc :是PDE 的边界条件描述函数,必须先化为下面的形式(,,)(,,).*(,,,)0up x t u q x t u f x t u x∂+=∂ 于是边值条件可以编写下面函数描述为 [pa,qa,pb,qb]=pdebc(x,t,u,du)其中a 表示下边界,b 表示下边界@pdeic :是PDE 的初值条件,必须化为下面的形式00(,)u x t u =我们使用下面的简单的函数来描述为 u0=pdeic(x)m,x,t :就是对应于(式1)中相关参数【输出参数】sol :是一个三维数组,sol(:,:,i)表示u i 的解,换句话说u k 对应x(i)和t(j)时的解为sol(i,j,k)通过sol ,我们可以使用pdeval()直接计算某个点的函数值2、实例讲解试求解下面的偏微分2111222221220.024()0.17()u u F u u t xu u F u u tx ∂∂=−− ∂∂ ∂∂ =−− ∂∂ 其中, 5.7311.46()x x F x e e −=−,且满足初始条件12(,0)1,(,0)0u x u x ==及边界条件1221(0,)0,(0,)0,(1,)1,(1,)0u ut u t u t t x x∂∂====∂∂【解】(1)对照给出的偏微分方程,根据标注形式,则原方程可以改写为111222120.024()1.*1()0.17u u F u u x u u F u u t t x ∂−−∂∂∂=+ ∂−∂∂∂可见m=0,且1122120.024()1,,1()0.17u F u u x c f s u F u u x ∂−− ∂===∂−∂%% 目标PDE 函数function [c,f,s]=pdefun (x,t,u,du) c=[1;1];f=[0.024*du(1);0.17*du(2)]; temp=u(1)-u(2);s=[-1;1].*(exp(5.73*temp)-exp(-11.46*temp));(2)边界条件改写为12011010.*.*00000u f f u −+=+=下边界上边界%% 边界条件函数function [pa,qa,pb,qb]=pdebc(xa,ua,xb,ub,t) %a 表示下边界,b 表示上边界 pa=[0;ua(2)];qa=[1;0]; pb=[ub(1)-1;0]; qb=[0;1];(3)初值条件改写为1210u u =%% 初值条件函数function u0=pdeic(x) u0=[1;0];(4)最后编写主调函数 clcx=0:0.05:1; t=0:0.05:2; m=0;sol=pdepe(m,@pdefun,@pdeic,@pdebc,x,t);figure('numbertitle','off','name','PDE Demo ——by Matlabsky') subplot(211)surf(x,t,sol(:,:,1)) title('The Solution of u_1') xlabel('X') ylabel('T') zlabel('U') subplot(212)surf(x,t,sol(:,:,2)) title('The Solution of u_2') xlabel('X') ylabel('T') zlabel('U')二、PDEtool 求解特殊PDE 问题MATLAB 的偏微分工具箱(PDE toolbox)可以比较规范的求解各种常见的二阶偏微分方程,但是惋惜的是只能求解特殊二阶的PDE 问题,并且不支持偏微分方程组!PDE toolbox 支持命令行形式求解PDE 问题,但是要记住那些命令以及调用形式真的很累人,还好MATLAB 提供了GUI 可视交互界面pdetool ,在pdetool 中可以很方便的求解一个PDE 问题,并且可以帮我们直接生成M 代码(File->Save As)。

MATLAB中的数学建模方法及应用

MATLAB中的数学建模方法及应用

MATLAB中的数学建模方法及应用引言数学建模作为一门重要的学科,已经成为了现代科学研究和工程实践中不可或缺的一部分。

而在数学建模过程中,数值计算和数据分析是关键步骤之一。

MATLAB作为一种强大的数学计算软件,在数学建模领域得到了广泛应用。

本文将介绍MATLAB中常用的数学建模方法,并探讨一些实际应用案例。

一、线性模型线性模型是数学建模中最基础的一种模型,它假设系统的响应是线性的。

在MATLAB中,我们可以通过矩阵运算和线性代数的知识来构建和求解线性模型。

例如,我们可以使用MATLAB中的线性回归函数来拟合一条直线到一组数据点上,从而得到一个线性模型。

二、非线性模型与线性模型相对应的是非线性模型。

非线性模型具有更强的表达能力,可以描述更为复杂的系统。

在MATLAB中,我们可以利用优化工具箱来拟合非线性模型。

例如,我们可以使用MATLAB中的非线性最小二乘函数来优化模型参数,使得模型与实际数据拟合程度最好。

三、微分方程模型微分方程模型在科学研究和工程实践中广泛应用。

在MATLAB中,我们可以使用ODE工具箱来求解常微分方程(ODE)。

通过定义初始条件和微分方程的表达式,MATLAB可以使用多种数值方法来求解微分方程模型。

例如,我们可以利用MATLAB中的欧拉法或者龙格-库塔法来求解微分方程。

四、偏微分方程模型偏微分方程(PDE)模型是描述空间上的变化的数学模型。

在MATLAB中,我们可以使用PDE工具箱来求解常见的偏微分方程模型。

通过定义边界条件和初始条件,MATLAB可以通过有限差分或有限元等方法来求解偏微分方程模型。

例如,我们可以利用MATLAB中的热传导方程求解器来模拟物体的温度分布。

五、曲线拟合与数据插值曲线拟合和数据插值是数学建模过程中常见的任务。

在MATLAB中,我们可以使用拟合和插值工具箱来实现这些任务。

通过输入一系列数据点,MATLAB可以通过多项式拟合或者样条插值等方法来生成一个模型函数。

matlab解微积分方程

matlab解微积分方程

matlab解微积分方程使用Matlab解微积分方程微积分方程是数学中的重要概念,广泛应用于物理学、工程学、经济学等领域。

解微积分方程是研究微积分方程的一个重要问题,而Matlab作为一种强大的数值计算软件,可以有效地解决微积分方程。

Matlab提供了多种求解微积分方程的方法,包括欧拉法、龙格-库塔法、四阶龙格-库塔法等。

这些方法可以用来求解常微分方程、偏微分方程以及一些特殊类型的微积分方程。

我们来看看如何使用Matlab求解常微分方程。

常微分方程是一种只涉及一个自变量的微分方程,可以表示为dy/dx = f(x, y),其中f(x, y)是已知的函数。

在Matlab中,可以使用ode45函数来求解常微分方程。

下面以一个简单的一阶常微分方程为例,来演示如何使用Matlab求解。

假设我们要求解方程dy/dx = x + y,且初始条件为y(0) = 1。

首先,我们需要定义方程的函数形式,即f(x, y) = x + y。

然后,使用ode45函数来求解:```function dydx = myode(x, y)dydx = x + y;end[t, y] = ode45(@myode, [0, 1], 1);```上述代码中,myode函数定义了方程的函数形式,ode45函数用于求解微分方程,[0, 1]表示求解的时间范围,1表示初始条件。

最后,得到的结果存储在变量t和y中,t表示时间,y表示方程的解。

除了常微分方程,Matlab还可以求解偏微分方程。

偏微分方程是一种涉及多个自变量的微分方程,可以表示为∂u/∂t = f(x, y, t, u, ∂u/∂x, ∂u/∂y)。

在Matlab中,可以使用pdepe函数来求解偏微分方程。

假设我们要求解一个简单的二维热传导方程,即∂u/∂t = ∂^2u/∂x^2 + ∂^2u/∂y^2,且初始条件为u(x, y, 0) = sin(x)sin(y),边界条件为u(0, y, t) = 0,u(π, y, t) = 0,u(x, 0, t) = 0,u(x, π, t) = 0。

matlab解偏微分方程

matlab解偏微分方程

matlab解偏微分方程偏微分方程(PDE)是描述物理系统和工程问题中的变化和变形的基本方程之一。

它们是数学方程,可以用来解决流体力学、热传递、电磁场和结构分析等领域的问题。

在MATLAB中,可以使用PDE工具箱来求解偏微分方程。

PDE工具箱是MATLAB中的一个工具箱,用于求解偏微分方程。

它提供了多种方法来求解PDE,如有限元方法、有限差分方法、谱方法等。

PDE工具箱还提供了可视化工具,可以帮助用户更好地理解方程的解。

以下是PDE工具箱的使用步骤:1. 创建偏微分方程使用PDE工具箱,可以通过选择预定义的模型或手动创建方程来定义偏微分方程。

预定义的模型包括泊松方程、热传导方程、斯托克斯方程等。

手动创建方程要求用户提供方程的系数和初始条件。

2. 定义边界条件通过定义边界条件,可以限制方程的解在特定区域内。

通常,边界条件与实际问题的物理特征有关。

例如,泊松方程的边界条件可以是Dirichlet、Neumann或Robin条件。

3. 离散化空间和时间PDE工具箱使用离散化方法来计算偏微分方程的解。

在离散化过程中,空间和时间被分割成小的网格。

离散化方法的选择取决于所使用的数值方法。

4. 求解方程完成离散化后,PDE工具箱可以求解偏微分方程。

求解器的选取依赖于方程的类型和分析目的。

例如,稳态问题可以使用静态求解器,而动态问题可以使用显式和隐式求解器。

5. 可视化解PDE工具箱提供了多种工具来可视化解。

用户可以使用等值线、箭头和图形等来显示解的不同方面。

此外,PDE工具箱还提供了交互式工具,使用户可以更改参数以观察不同的解。

总之,MATLAB的PDE工具箱提供了一个方便的方式来解决偏微分方程。

通过使用这个工具箱,用户可以创建、定义、求解和可视化偏微分方程。

matlab偏微分方程组求解

matlab偏微分方程组求解

matlab偏微分方程组求解(实用版)目录1.MATLAB 求解偏微分方程组的概述2.偏微分方程组的格式和类型3.MATLAB 求解偏微分方程组的方法4.常用的 MATLAB 求解偏微分方程组的工具箱5.MATLAB 求解偏微分方程组的步骤和示例正文一、MATLAB 求解偏微分方程组的概述偏微分方程组在数学、物理、工程等领域有着广泛的应用,而 MATLAB 作为一款强大的数学软件,提供了丰富的函数和工具箱来求解偏微分方程组。

本文将介绍如何使用 MATLAB 求解偏微分方程组。

二、偏微分方程组的格式和类型偏微分方程组的格式一般为:u/x = f(x, y, u)u/y = g(x, y, u)u/z = h(x, y, u)其中,u 是未知函数,x、y、z 是自变量,f、g、h 是已知函数。

偏微分方程组的类型可以根据未知函数的个数、方程的阶数、方程的形式等进行分类。

常见的类型有一阶方程组、二阶方程组、高阶方程组、线性方程组、非线性方程组等。

三、MATLAB 求解偏微分方程组的方法MATLAB 求解偏微分方程组的主要方法有以下几种:1.符号计算法:使用 MATLAB 内置的符号计算函数,如 sym、syms、subs 等,可以方便地表示和操作偏微分方程组。

2.数值计算法:使用 MATLAB 的数值计算函数,如 ode45、ode23、ode113 等,可以求解数值形式的偏微分方程组。

3.图形可视化法:使用 MATLAB 的图形函数,如 plot、contour 等,可以直观地显示偏微分方程组的解。

四、常用的 MATLAB 求解偏微分方程组的工具箱MATLAB 中有多个工具箱可以用于求解偏微分方程组,常用的有:1.ODE Toolbox:包含求解常微分方程(ODE)和偏微分方程(PDE)的函数。

2.PDE Toolbox:专门用于求解偏微分方程的工具箱,提供了丰富的PDE 求解器和可视化工具。

3.Finite Element Toolbox:用于求解有限元方法的偏微分方程组。

Matlab解微分方程(ODE+PDE)

Matlab解微分方程(ODE+PDE)

常微分方程:1 ODE解算器简介(ode**)2 微分方程转换3 刚性/非刚性问题(Stiff/Nonstiff)4 隐式微分方程(IDE)5 微分代数方程(DAE)6 延迟微分方程(DDE)7 边值问题(BVP) 偏微分方程(PDEs)Matlab解法偏微分方程:1 一般偏微分方程组(PDEs)的命令行求解2 特殊偏微分方程(PDEs)的PDEtool求解3 陆君安《偏微分方程的MATLAB解法先来认识下常微分方程(ODE)初值问题解算器(solver)[T,Y,TE,YE,IE] = odesolver(odefun,tspan,y0,options)sxint = deval(sol,xint)Matlab中提供了以下解算器:输入参数:odefun:微分方程的Matlab语言描述函数,必须是函数句柄或者字符串,必须写成Matlab规范格式(也就是一阶显示微分方程组),这个具体在后面讲解tspan=[t0 tf]或者[t0,t1,…tf]:微分变量的范围,两者都是根据t0和tf的值自动选择步长,只是前者返回所有计算点的微分值,而后者只返回指定的点的微分值,一定要注意对于后者tspan必须严格单调,还有就是两者数据存储时使用的内存不同(明显前者多),其它没有任何本质的区别y0=[y(0),y’(0),y’’(0)…]:微分方程初值,依次输入所有状态变量的初值,什么是状态变量在后面有介绍options:微分优化参数,是一个结构体,使用odeset可以设置具体参数,详细内容查看帮助输出参数:T:时间列向量,也就是ode**计算微分方程的值的点Y:二维数组,第i列表示第i个状态变量的值,行数与T一致在求解ODE时,我们还会用到deval()函数,deval的作用就是通过结构体solution计算t 对应x值,和polyval之类的很相似!参数格式如下:sol:就是上次调用ode**函数得道的结构体解xint:需要计算的点,可以是标量或者向量,但是必须在tspan范围内该函数的好处就是如果我想知道t=t0时的y值,不需要重新使用ode计算,而直接使用上次计算的得道solution就可以[教程] 微分方程转换为一阶显示微分方程组方法好,上面我们把Matlab中的常微分方程(ODE)的解算器讲解的差不多了,下面我们就具体开始介绍如何使用上面的知识吧!现实总是残酷的,要得到就必须先付出,不可能所有的ODE一拿来就可以直接使用,因此,在使用ODE解算器之前,我们需要做的第一步,也是最重要的一步,借助状态变量将微分方程组化成Matlab可接受的标准形式(一阶显示常微分方程)!如果ODEs由一个或多个高阶微分方程给出,则我们应先将其变换成一阶显式常微分方程组!下面我们以两个高阶微分方程构成的ODEs为例介绍如何将之变换成一个一阶显式常微分方程组。

dsolve在matlab中的作用

dsolve在matlab中的作用

dsolve在matlab中的作用dsolve在matlab中的作用一、简介dsolve是matlab中的一个函数,用于求解常微分方程(ODE)或偏微分方程(PDE)。

通过使用dsolve函数,可以得到给定微分方程的解析解或数值解。

该函数提供了一种快速且准确地求解微分方程的方法,可以应用于各种科学和工程领域。

二、常微分方程(ODE)的求解1. 一阶常微分方程的求解dsolve函数可以用来求解形如dy/dx=f(x,y)的一阶常微分方程。

其中,f(x,y)是已知函数。

通过输入这个微分方程到dsolve函数中,可以得到该微分方程的解析解。

考虑以下一阶常微分方程:dy/dx = x^2 + y^2。

为了求解这个微分方程,我们可以使用以下代码:```syms x y;eqn = diff(y,x) == x^2 + y^2;sol = dsolve(eqn);```在上述代码中,首先定义了符号变量x和y,并使用diff函数定义了待求导数dy/dx。

然后将该表达式与等式右侧的函数x^2 + y^2进行比较,并将结果赋给eqn变量。

通过调用dsolve函数并传递eqn作为参数,可以得到这个一阶常微分方程的解析解。

2. 高阶常微分方程的求解除了一阶常微分方程,dsolve函数还可以用于求解高阶常微分方程。

考虑以下二阶常微分方程:d^2y/dx^2 + 2*dy/dx + y = 0。

为了求解这个微分方程,可以使用以下代码:```syms x y;eqn = diff(y,x,2) + 2*diff(y,x) + y == 0;sol = dsolve(eqn);```在上述代码中,首先定义了符号变量x和y,并使用diff函数定义了待求导数d^2y/dx^2和dy/dx。

然后将这两个表达式与等式右侧的函数进行比较,并将结果赋给eqn变量。

通过调用dsolve函数并传递eqn作为参数,可以得到这个二阶常微分方程的解析解。

MATLAB在微分方程中的应用

MATLAB在微分方程中的应用

Abstract: In the article, we discuss the application of MATLAB in differential equations, including solving method by symbol and by numerical of ordinary differential equations, and finite element method of partial differentia equation. We provide some functional command of solving differential equations in MATLAB, in order to solve function we compile M file on the basis of algorithm, we get the result as same as theoretical estimate. Key words: MATLAB;Ordinary Differential Equation; Partial Differential Equation;Euler Method; Finite Element Method.
烟台大学毕业论文(设计) 前言
现代的科学、技术、工程中的大量数学模型都可以用微分方程来描述,很多近代自然 科学的基本方程本身就是微分方程。从微积分理论形成以来,人们就一直用微分方程来描 述、解释或预见各种自然现象,不断地取得显著成效。遗憾的是,绝大多数微分方程(特 别是偏微分方程)定解问题的解不能以实用的解析形式来表示,这就产生了理论与应用的 矛盾:一方面,人们建立了大量实用的数学模型,列出了反映客观现象的微分方程;另一 方面,人们又无法得到这些方程的准确解以定量地描述客观过程。 随着电子计算机的出现和发展,解决上述矛盾的一门学科−−微分方程的数值方法得 到了前所未有的发展和应用。今天,需要掌握和应用微分方程数值方法的已不再限于数学 专业人员和专门从事科学和工程计算的人员,大量从事力学、物理学、天文学方面的科研 人员,航空、土木、船舶、机械、电机、电子等领域的工程技术人员,甚至连金融工程、 风险投资等非科技领域都把这门学科作为自己领域的一种重要研究手段和方法。 从20世纪80年代以来,世界各国所开发的数学类科技软件多达几十种,在我国流行的 数学软件主要有四种:MATLAB、Mathematica、Maple和M athCAD。其中,MATLAB有 着其它几种数学软件无法比拟的优势和适用面,近几年,MATLAB已成为科学工作者首 选的数学软件。目前关于MAT LAB语言和应用的书籍在国际上数以千计,但从其覆盖面 和应用水平来说,往往难以达到日益增长的MATLAB使言在应用数学的各个分支的应用、计算和求解的书籍。本 文旨在填补就微分方程方面的空白,重点是微分方程数值解法方面,以帮助微分方程求解 工作者掌握MATLAB在这方面的功能,避免重复性的劳动,尽快地“站在巨人肩上”开 展工作。 本 文 把 微 分 方 程 求 解 和MATLAB有 机 的 结 合 起 来 , 全 面 介 绍 了 微 分 方 程 的 求 解 在MATLAB中的实现,使得让数学基础不深厚的读者同样能轻易利用MATLAB解决较 高深的微分方程问题。

matlab 求解偏微分方程

matlab 求解偏微分方程

matlab 求解偏微分方程使用MATLAB求解偏微分方程摘要:偏微分方程(partial differential equation, PDE)是数学中重要的一类方程,广泛应用于物理、工程、经济、生物等领域。

MATLAB 是一种强大的数值计算软件,提供了丰富的工具箱和函数,可以用来求解各种类型的偏微分方程。

本文将介绍如何使用MATLAB来求解偏微分方程,并通过具体案例进行演示。

引言:偏微分方程是描述多变量函数的方程,其中包含了函数的偏导数。

一般来说,偏微分方程可以分为椭圆型方程、双曲型方程和抛物型方程三类。

求解偏微分方程的方法有很多,其中数值方法是最常用的一种。

MATLAB作为一种强大的数值计算软件,提供了丰富的工具箱和函数,可以用来求解各种类型的偏微分方程。

方法:MATLAB提供了多种求解偏微分方程的函数和工具箱,包括pdepe、pdetoolbox和pde模块等。

其中,pdepe函数是用来求解带有初始条件和边界条件的常微分方程组的函数,可以用来求解一维和二维的偏微分方程。

pdepe函数使用有限差分法或有限元法来离散化偏微分方程,然后通过求解离散化后的常微分方程组得到最终的解。

案例演示:考虑一维热传导方程的求解,偏微分方程为:∂u/∂t = α * ∂^2u/∂x^2其中,u(x,t)是温度分布函数,α是热扩散系数。

假设初始条件为u(x,0)=sin(pi*x),边界条件为u(0,t)=0和u(1,t)=0。

我们需要定义偏微分方程和边界条件。

在MATLAB中,可以使用匿名函数来定义偏微分方程和边界条件。

然后,我们使用pdepe函数求解偏微分方程。

```matlabfunction [c,f,s] = pde(x,t,u,DuDx)c = 1;f = DuDx;s = 0;endfunction u0 = uinitial(x)u0 = sin(pi*x);endfunction [pl,ql,pr,qr] = uboundary(xl,ul,xr,ur,t)pl = ul;ql = 0;pr = ur;qr = 0;endx = linspace(0,1,100);t = linspace(0,0.1,10);m = 0;sol = pdepe(m,@pde,@uinitial,@uboundary,x,t);u = sol(:,:,1);surf(x,t,u);xlabel('Distance x');ylabel('Time t');zlabel('Temperature u');```在上述代码中,我们首先定义了偏微分方程函数pde,其中c、f和s分别表示系数c、f和s。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

常微分方程:1 ODE解算器简介(ode**)2 微分方程转换3 刚性/非刚性问题(Stiff/Nonstiff)4 隐式微分方程(IDE)5 微分代数方程(DAE)6 延迟微分方程(DDE)7 边值问题(BVP) 偏微分方程(PDEs)Matlab解法偏微分方程:1 一般偏微分方程组(PDEs)的命令行求解2 特殊偏微分方程(PDEs)的PDEtool求解3 陆君安《偏微分方程的MATLAB解法先来认识下常微分方程(ODE)初值问题解算器(solver)[T,Y,TE,YE,IE] = odesolver(odefun,tspan,y0,options)sxint = deval(sol,xint)Matlab中提供了以下解算器:输入参数:odefun:微分方程的Matlab语言描述函数,必须是函数句柄或者字符串,必须写成Matlab规范格式(也就是一阶显示微分方程组),这个具体在后面讲解tspan=[t0 tf]或者[t0,t1,…tf]:微分变量的范围,两者都是根据t0和tf的值自动选择步长,只是前者返回所有计算点的微分值,而后者只返回指定的点的微分值,一定要注意对于后者tspan必须严格单调,还有就是两者数据存储时使用的内存不同(明显前者多),其它没有任何本质的区别y0=[y(0),y’(0),y’’(0)…]:微分方程初值,依次输入所有状态变量的初值,什么是状态变量在后面有介绍options:微分优化参数,是一个结构体,使用odeset可以设置具体参数,详细内容查看帮助输出参数:T:时间列向量,也就是ode**计算微分方程的值的点Y:二维数组,第i列表示第i个状态变量的值,行数与T一致在求解ODE时,我们还会用到deval()函数,deval的作用就是通过结构体solution计算t 对应x值,和polyval之类的很相似!参数格式如下:sol:就是上次调用ode**函数得道的结构体解xint:需要计算的点,可以是标量或者向量,但是必须在tspan范围内该函数的好处就是如果我想知道t=t0时的y值,不需要重新使用ode计算,而直接使用上次计算的得道solution就可以[教程] 微分方程转换为一阶显示微分方程组方法好,上面我们把Matlab中的常微分方程(ODE)的解算器讲解的差不多了,下面我们就具体开始介绍如何使用上面的知识吧!现实总是残酷的,要得到就必须先付出,不可能所有的ODE一拿来就可以直接使用,因此,在使用ODE解算器之前,我们需要做的第一步,也是最重要的一步,借助状态变量将微分方程组化成Matlab可接受的标准形式(一阶显示常微分方程)!如果ODEs由一个或多个高阶微分方程给出,则我们应先将其变换成一阶显式常微分方程组!下面我们以两个高阶微分方程构成的ODEs为例介绍如何将之变换成一个一阶显式常微分方程组。

step1.将微分方程的最高阶变量移到等式的左边,其他移到右边,并按阶次从低到高排列,假如说两个高阶微分方程最后能够显式的表达成如下所示:我们说过现实总是残酷的,有时方程偏偏是隐式的,没法写成上面的样子,不用担心Matlab 早就为我们想到了,这个留在后面的隐式微分方程数值求解中再详细讲解!step2.为每一阶微分式选择状态变量,最高阶除外从上面的变换,我们注意到,ODEs中所有因变量的最高阶次之和就是需要的状态变量的个数,最高阶的微分式(比如上面的x (m)和y(n))不需要给它一个状态变量step3.根据上面选用的状态变量,写出所有状态变量的一阶微分的表达式注意到,最高阶次的微分式的表达式直接就是step1中的微分方程好,到此为止,一阶显式常微分方程组,变化顺利结束,接下来就是Matlab编程了。

请记住上面的变化很重要,Matla中所有微分方程的求解都需要上面的变换。

下面通过一个实例演示ODEs的转换和求解【解】真是万幸,该ODEs已经帮我们完成了step1,我们只需要完成step2和step3了(1)选择一组状态变量(2)写出所有状态变量的一阶微分表达式(4)有了数学模型描述,则可以立即写出相应的Matlab代码了(这里我们优先选择ode45)1.x0=[1.2;0;0;-1.04935751];%x0(i)对应与xi的初值2.options=odeset('reltol',1e-8);%该命令的另一种写法是options=odeset;options.reltol=1e-8;3.tic4.[t,y]=ode45(@appollo,[0,20],x0,options);%t是时间点,y的第i列对应xi的值,t和y的行数相同5.toc6.plot(y(:,1),y(:,3))%绘制x1和x3,也就是x和y的图形7.title('Appollo卫星运动轨迹')8.xlabel('X')9.ylabel('Y')10.11.function dx=appollo(t,x)12.mu=1/82.45;13.mustar=1-mu;14.r1=sqrt((x(1)+mu)^2+x(3)^2);15.r2=sqrt((x(1)-mustar)^2+x(3)^2);16.dx=[x(2)17.2*x(4)+x(1)-mustar*(x(1)+mu)/r1^3-mu*(x(1)-mustar)/r2^318.x(4)19.-2*x(2)+x(3)-mustar*x(3)/r1^3-mu*x(3)/r2^3];[教程] 刚性/非刚性问题(Stiff/Nonstiff)的Matlab解法在工程实践中,我们经常遇到一些ODEs,其中某些解变换缓慢,另一些变化很快,且相差悬殊的微分方程,这就是所谓的刚性问题(Stiff),对于所有解的变化相当我们则称为非刚性问题(Nonstiff)。

对于刚性问题一般不适合使用ode45这类函数求解。

由于非刚性问题我们使用的多比较多,我们就不多说,下面主要讲解下Stiff看一个例子,考虑下面的微分方程【解】题目中已经帮我们完成了方程组转换,下面我们就直接编程了(1)编写微分方程函数1.odefun=@(t,x)[0.04*(1-x(1))-(1-x(2))*x(1)+0.0001*(1-x(2))^22.-1e4*x(1)+3000*(1-x(2))^2];3.x0=[0 1];4.tspan=[0 100];5.options=odeset('reltol',1e-6,'abstol',1e-8);(2)对于这个刚性问题,我们先使用ode45函数试试(反正我们是没有信心等待它,太慢了)1.tic;[t,y]=ode45(odefun,tspan,x0,options);toc2.disp(['ode45计算的点数' num2str(length(t))])(3)换用ode15s函数试试看看1.tic;[t2,y2]=ode15s(odefun,tspan,x0,options);toc2.disp(['ode15s计算的点数' num2str(length(t2))])(4)绘图看看结果1.figure('numbertitle','off','name','Stiff ODEs Demo—by Matlabsky')2.subplot(121)3.title('Using ode45')4.plot(t,y)5.subplot(122)6.plot(t2,y2)7.title('Using ode15s')运行的结果如下,我们可以比较下ode45和ode15s的差距1.Elapsed time is 171.005688 seconds.2.ode45计算的点数3569813.Elapsed time is 0.397287 seconds.4.ode15s计算的点数188[教程] 隐式微分方程(IDE)的Matlab解法上帝不会总是那么仁慈的,不是所有的ODEs都是可以直接显式的表达成下面的样子比如,下面的隐式微分方程组那该如何办呢?在这里我们介绍三种解决方法,但是前两者是技巧方法,没有使用Mathworks专为IDE开发的ode15i函数:================方法一================使用符号计算函数solve()求解出x’’和y’’的表达式,不就可以了吗?那好,我们下面试试看看【解】(1)求解表达式1.2.>> [d2x,d2y]=solve('d2x+2*dy*x-2*d2y','d2x*dy+3*dx*d2y+x*dy-y-5','d2x','d2y')%d2x表示x的二阶导数,其它同理3.4.d2x =5.6.-2*(3*dy*x*dx-5+dy*x-y)/(3*dx+2*dy)7.8.d2y =9.10.(2*dy^2*x+5-dy*x+y)/(3*dx+2*dy)也就是说原来的ODEs可以重新写成也就是说step1完成了,接下来的就比较简单了(2).选取状态变量(3).写出状态变量的一阶微分表达式(4).写Matlab程序进行数值求解1.myode=@(t,x)[x(2)2.-2*(3*x(1)*x(2)*x(4)-5+x(4)-x(3))/(3*x(2)+2*x(4))3.x(4)4.(2*x(4)^2*x(1)+5-x(4)*x(1)+x(3))/(3*x(2)+2*x(4))]5.[t,y]=ode45(myode,[0,20],x0);================方法二================但是solve()函数也不是万能的,对有些完全隐式,solve()可能压根没法求解出它们的具体表达式,那此时该怎么办呢?天无绝人之路,车到山前必有路,下面我们分析下数值解法的本质。

其实Matlab要求我们先将ODEs转化为显式的一阶微分方程组,就是为了便于计算状态变量一阶微分函数值(注意只需要它的值)!虽然现在我们没有解析的得到各个状态变量一阶微分的表达式,但是我们只要求出每个点的对应的所有状态变量一阶微分值即可。

这个思想就是在Matlab没有提供ode15i()函数之前,大家唯一能使用的方法,下面我们以一个例子说明下对于这样的ODEs难道你还想将它化为那个一阶显式微分方程组吗,别费劲了!【解】(1)好,我们同样的需要一组状态变量(2).写出状态变量的一阶微分。

相关文档
最新文档