搜档网
当前位置:搜档网 › Matlab解微分方程(ODE+PDE)

Matlab解微分方程(ODE+PDE)

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为例介绍如何将之变换成一个一阶显式常微分方程组。

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.tic

4.[t,y]=ode45(@appollo,[0,20],x0,options);%t是时间点,y的第i列对应xi的值,t和y的行数相同

5.toc

6.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^3

18.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))^2

2.-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);toc

2.disp(['ode45计算的点数' num2str(length(t))])

(3)换用ode15s函数试试看看

1.tic;[t2,y2]=ode15s(odefun,tspan,x0,options);toc

2.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计算的点数356981

3.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).写出状态变量的一阶微分。只不过此时的x’’和y’’不再是显式的,我们使用fsolve 进行数值求解

(3)编写Matlab代码

1.[t,y]=ode45(@odefun,[0 3],[1 0 0 1]');

2.plot(t,y)

3.legend('x','x''','y','y''')

4.

5.function dy=odefun(t,x)

6.fun=@(dxy)[dxy(1)*sin(x(4))+dxy(2)^2+2*x(1)*x(3)-x(1)*dxy(1)*x(4)

7.x(1)*dxy(1)*dxy(2)+cos(dxy(2))-3*x(3)*x(2)];

8.options=optimset('display','off');

9.y=fsolve(fun,x([1,3]),options);%使用fsolve求解出x''和y''

10.dy=[x(2);y(1);x(4);y(2)];%状态变量一阶微分值

复制代码

================方法三================

方法二也有它的缺点,每一个点的x''和y''都需要独立计算,假如说数据量很大的话,那个叫难熬呀,并且有时可能是由于方程或者参数配置问题fsolve还有会出现罢工现象!

于是MathWorks为我们准备了ode15i函数,不过这个ode15i有点不好用,没有ode45等那么直接。

ode15i()调用格式如下

[y0mod,yp0mod,resnrm] = decic(odefun,t0,y0,fixed_y0,yp0,fixed_yp0,options...)

[T,Y,TE,YE,IE] = ode15i(odefun,tspan,y0mod,yp0mod,options...)

隐式ODEs不同于一般的显式ODEs,ode15i需要同时给出状态变量及其一阶导数的初值

(x0,dx0),它们不能任意赋值,只能有n个是独立的,其余的需要隐式方程求解(使用decic 函数),否则出现矛盾的初值条件。

输入参数:

odefun:微分方程,注意此时的函数变量有t(自变量),x(状态变量),dx(状态变量一阶导数)等三个

t0:自变量初值,必须与tspan(1)相等

y0:状态变量初值,题目给出几个就写几个,没给的自己猜测一个

fixed_y0:与y0的尺寸一样,表示对应位置的初值是给定的还是猜测的,如果给定则1,否则0

yp0:状态变量一阶导数初值,其它同y0

fixed_yp0:同理fixed_y0,不过此时对应的是yp0了

options:其它选项,具体查看帮助

tspan:自变量的范围,其中tspan(1)必须与t0一致

输出参数:

大部分同理ode45,这里就不具体说明了

下面我们以实例说明,对于下面的IDE,求解x

【解】

(1)选取状态变量

(2)写出状态变量的一阶微分。只不过此时的x’’和y’’不再是显式的

(3)书写odefun,注意此时多了一个dx变量,就是x的一阶导数

1.odefun=@(t,x,dx)[dx(1)-x(2)

2.dx(2)*sin(x(4))+dx(4)^2+2*x(1)*x(3)-x(1)*dx(2)*x(4)

3.dx(3)-x(4)

4.x(1)*dx(2)*dx(4)+cos(dx(4))-3*x(3)*x(2)];

(4)求解dx0

1.t0=0;%自变量初值

2.%对于x0和dx0中的题目给出的初值,如实写,没有给出的任意写

3.x0=[1 0 0 1]';%本题初值x0的都给出了,所以必须是这个

4.%初值x0中题目给出的,对应位置填1,否则为0

5.fix_x0=ones(4,1);%本题中x0都给出了,故全为1

6.dx0=[0 0 1 1]';%本题中初值dx0一个都没有给出,那么全部任意写

7.%初值dx0中题目给出的,对应位置填1,否则为0

8.fix_dx0=zeros(4,1);%本题中dx0一个没有给出,故全部为0

9.[x02,dx02]=decic(odefun,t0,x0,fix_x0,dx0,fix_dx0);

(5)求解微分方程

1.solution=ode15i(odefun,[0 2],x02,dx02)%x02和dx02是由decic输出参数

虽然我们上面的分析是完全正确,但是好像Matlab就是罢工,郁闷死了

其实对一些简单的ODEs压根没有必要通过decic函数来求解未知的初值,我们可以直接人

工算出x02和dx02,根据下面的式子

我们演示下,根据题目x0=[x1,x2,x3,x4]=[1 0 0 1],由第一个式子可以得出x1’=0,第三个式子有x3’=1,再联立第二四两个式子后有x2’=0,x4’=1,故

dx0=[x1’ ,x2’,x3’,x4’]=[0 0 1 1]

看了下,隐式ODEs数值求解的确麻烦的些,但是和前面的ode45没有本质的区别,decic 函数就是为了求解那些隐式中的状态变量的一阶导数,与我们方法二中的很相似,只不过这里直接调用罢了。

其实不管隐式还是显式ODEs,甚至DAE,都是可以使用ode15i求解,只不过此时将显式当隐式处理,或者说将代数约束看成一个隐式罢了!

这一条等到我们在介绍DAE的时候再验证!

当然大部分人都不会傻到这么做,有现成的函数不用,何必自找麻烦呢!但是对于了解和学习,我们可以试试。

[教程] 微分代数方程(DAE)的Matlab解法

所谓微分代数方程,是指在微分方程中,某些变量满足某些代数方程的约束。假设微分方

程的更一般形式可以写成

前面所介绍的ODEs数值解法主要针对能够转换为一阶常微分方程组的类型,故DAE就无法使用前面介绍的常微分方程解法直接求解,必须借助DAE的特殊解法。

其实对于我们使用Matlab求解DAE时,却没有太大的改变只需增加一个Mass参数即可。描述f(t,x)的方法和普通微分方程完全一致。

注意:ode15i没法设置Mass属性,换句话说除了ode15i外其他ode计算器都可以求解DAEs问题

1.当M(t,y)非奇异的时候,我们可以将微分方程等效的转换为y'=inv(M)*f(t,y),此时就是一个普通的ODE(当然我们可以将它当成DAEs处理),对任意一个给定的初值条件都有唯一的解

2.当m(t,y)奇异时,我们叫它为DAEs(微分代数方程),DAEs问题只有在同时提供状态变量初值y0和状态变量一阶导数初值py0,且满足M(t0,y0)*yp0=f(t0,y0)时才有唯一解,假如不满足上面的方程,DAEs解算器会将提供的y0和py0作为猜测初始值,并重新计算与提供初值最近的封闭初值

3.质量矩阵可是一个常数矩阵(稀疏矩阵),也可以是一个自定义函数的输出。但是ode23s 只能求解Mass是常数的DAEs

4.对于Mass奇异的DAEs问题,特别是设置MassSingular为yes时,只能ode15s和ode23t 解算器

5.对于DAE我们还有几个参数需要介绍

a.Mass:质量矩阵,不说了,这个是DAE的关键,后面看例子就明白了

b.MStateDependence:质量矩阵M(t,y)是否是y的函数,可以选择none|{weak}|strong,none表示M与y无关,weak和strong都表示与y相关

c.MvPattern:注意这个必须是稀疏矩阵,S(i,j)=1表示M(t,y)的第i行中任意元素都与第j个状态变量yi有关,否则为0

d.MassSingular:设置Mass矩阵是否奇异,当设置为yes时,只能使用ode15s和ode23t

e.InitialSlope:状态变量的一阶导数初值yp0,和y0具有相同的size,当使用ode15s 和ode23t时,该属性默认为0

下面我们以实例说明,看下面的例子,求解该方程的数值解

【解】

真是万幸,选取状态变量和求状态变量的一阶导数等,微分方程转换工作,题目已经帮我们完成。

可是细心的网友会发现,最后一个方程不是微分方程而是一个代数方程(这就是为什叫DAE 的原因),其实我们可以将它视为对三个状态变量的约束。

(1)用矩阵形式表示出该DAEs

(2)编写Matlab代码

1.odefun=@(t,x)[-0.2*x(1)+x(2)*x(3)+0.3*x(1)*x(2);

2. 2*x(1)*x(2)-5*x(2)*x(3)-2*x(2)*x(2);

3. x(1)+x(2)+x(3)-1];%微分方程组

4.M=[1 0 0;0 1 0;0 0 0];%质量矩阵

5.options=odeset('mass',M);%对以DAE问题,mass属性必须设置

6.x0=[0.8;0.1;0.1];%初值

7.[t,x]=ode15s(odefun,[0 20],x0,options);%这里好像不能使用ode45

8.figure('numbertitle','off','name','DAE demo—by Matlabsky')

9.plot(t,x)

10.legend('x1(t)','x2(t)','x3(t)')

复制代码

在介绍隐式ODEs时,我们说了ode15i也可以求解DAEs,原理就是将约束看成一个隐式,好,下面我们看看,验证下所说的:

1.odefun=@(t,x,dx)[dx(1)+0.2*x(1)-x(2)*x(3)-0.3*x(1)*x(2);

2. dx(2)-2*x(1)*x(2)+5*x(2)*x(3)+2*x(2)^2;

3. x(1)+x(2)+x(3)-1];

4.%状态变量初值,题目中给出

5.x0=[0.8;0.1;0.1];

6.%该初值全部给定,按理说应该全部为1,但是记住方程中有一个约束,故其实只有两个独立初

7.x0_fix=[1;0;1];%随意一个改为0都可以,比如[0;1;1]或者[1;1;0]

8.%状态变量一阶微分初值,题目没有给出,可以任意写

9.dx0=[1;1;1];

10.%该初值一个都没有给出,故全部为0

11.dx0_fix=[0;0;0];

12.%时间变量的初值

13.t0=0;

14.%计算相容初值

15.[x0,dx0]=decic(odefun,0,x0,x0_fix,dx0,dx0_fix);

16.[x0,dx0] % 相容初始条件

17.res=ode15i(odefun,[0,20],x0,dx0);

18.figure('numbertitle','off','name','DAE demo—by Matlabsky')

19.plot(res.x,res.y)

其实,有些简单DAEs是可以转换为ODEs的,由于代数方程只是状态变量的一个约束,假如约束充分的话,我们就可以使用消参的思想,将约束反代回ODEs中,这样就将那个约束方程消去了,最后只剩下那些微分方程了。

对于本例,我们只要通过第三个方程表示出

再将x3反代回前两个微分方程中则有

这个就是一个正常的ODEs了,好,下面我们就重新使用Matlab求解下看:

1.x0=[0.8;0.1];

2.odefun=@(t,x)[-0.2*x(1)+x(2)*(1-x(1)-x(2))+0.3*x(1)*x(2)

3.2*x(1)*x(2)-5*x(2)*(1-x(1)-x(2))-2*x(2)*x(2)];

4.[t,x]=ode45(odefun,[0,20],x0);

5.figure('numbertitle','off','name','DAE demo—by Matlabsky')

6.plot(t,x)

7.legend('x1(t)','x2(t)')

[教程] 延迟微分方程(DDE)的Matlab解法

延迟微分方程的一般形式为:

其中taui≥0为状态变量x(t)的延迟常数。

Matlab中提供了求解这类方程的隐式Runge-Katta算法dde23()函数,可以直接求解延迟微分方程,该函数的格式为:

sol = dde23(ddefun,tau,history,tspan,options)

输入参数:

ddefun:描述延迟微分方程的句柄

tau=[tau1,taou,….taun]:

history:描述t≤t0时的状态变量的值的函数,题目一般会直接给出

tspan:同理ode45

(完整版)偏微分方程的MATLAB解法

引言 偏微分方程定解问题有着广泛的应用背景。人们用偏微分方程来描述、解释或者预见各种自然现象,并用于科学和工程技术的各个领域fll。然而,对于广大应用工作者来说,从偏微分方程模型出发,使用有限元法或有限差分法求解都要耗费很大的工作量,才能得到数值解。现在,MATLAB PDEToolbox已实现对于空间二维问题高速、准确的求解过程。 偏微分方程 如果一个微分方程中出现的未知函数只含一个自变量,这个方程叫做常微分方程,也简称微分方程;如果一个微分方程中出现多元函数的偏导数,或者说如果未知函数和几个变量有关,而且方程中出现未知函数对几个变量的导数,那么这种微分方程就是偏微分方程。 常用的方法有变分法和有限差分法。变分法是把定解问题转化成变分问题,再求变分问题的近似解;有限差分法是把定解问题转化成代数方程,然后用计算机进行计算;还有一种更有意义的模拟法,它用另一个物理的问题实验研究来代替所研究某个物理问题的定解。虽然物理现象本质不同,但是抽象地表示在数学上是同一个定解问题,如研究某个不规则形状的物体里的稳定温度分布问题,由于求解比较困难,可作相应的静电场或稳恒电流场实验研究,测定场中各处的电势,从而也解决了所研究的稳定温度场中的温度分布问题。 随着物理科学所研究的现象在广度和深度两方面的扩展,偏微分方程的应用范围更广泛。从数学自身的角度看,偏微分方程的求解促使数学在函数论、变分法、级数展开、常微分方程、代数、微分几何等各方面进行发展。从这个角度说,偏微分方程变成了数学的中心。

一、MATLAB方法简介及应用 1.1 MATLAB简介 MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。 1.2 Matlab主要功能 数值分析 数值和符号计算 工程与科学绘图 控制系统的设计与仿真 数字图像处理 数字信号处理 通讯系统设计与仿真 财务与金融工程 1.3 优势特点 1) 高效的数值计算及符号计算功能,能使用户从繁杂的数学运算分析中解脱出来; 2) 具有完备的图形处理功能,实现计算结果和编程的可视化; 3) 友好的用户界面及接近数学表达式的自然化语言,使学者易于学习和掌握; 4) 功能丰富的应用工具箱(如信号处理工具箱、通信工具箱等) ,

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

第四讲 Matlab 求解微分方程(组) 理论介绍:Matlab 求解微分方程(组)命令 求解实例:Matlab 求解微分方程(组)实例 实际应用问题通过数学建模所归纳得到的方程,绝大多数都是微分方程,真正能得到代数方程的机会很少.另一方面,能够求解的微分方程也是十分有限的,特别是高阶方程和偏微分方程(组).这就要求我们必须研究微分方程(组)的解法:解析解法和数值解法. 一.相关函数、命令及简介 1.在Matlab 中,用大写字母D 表示导数,Dy 表示y 关于自变量的一阶导数,D2y 表示y 关于自变量的二阶导数,依此类推.函数dsolve 用来解决常微分方程(组)的求解问题,调用格式为: X=dsolve(‘eqn1’,’eqn2’,…) 函数dsolve 用来解符号常微分方程、方程组,如果没有初始条件,则求出通解,如果有初始条件,则求出特解. 注意,系统缺省的自变量为t 2.函数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 到f t

用MATLAB解常微分方程

实验四 求微分方程的解 一、问题背景与实验目的 实际应用问题通过数学建模所归纳而得到的方程,绝大多数都是微分方程,真正能得到代数方程的机会很少.另一方面,能够求解的微分方程也是十分有限的,特别是高阶方程和偏微分方程(组).这就要求我们必须研究微分方程(组)的解法,既要研究微分方程(组)的解析解法(精确解),更要研究微分方程(组)的数值解法(近似解). 对微分方程(组)的解析解法(精确解),Matlab 有专门的函数可以用,本实验将作一定的介绍. 本实验将主要研究微分方程(组)的数值解法(近似解),重点介绍 Euler 折线法. 二、相关函数(命令)及简介 1.dsolve ('equ1','equ2',…):Matlab 求微分方程的解析解.equ1、equ2、…为方程(或条件).写方程(或条件)时用 Dy 表示y 关于自变量的一阶导数,用用 D2y 表示 y 关于自变量的二阶导数,依此类推. 2.simplify(s ):对表达式 s 使用 maple 的化简规则进行化简. 例如: syms x simplify(sin(x)^2 + cos(x)^2) ans=1 3.[r,how]=simple(s):由于 Matlab 提供了多种化简规则,simple 命令就是对表达式 s 用各种规则进行化简,然后用 r 返回最简形式,how 返回形成这种形式所用的规则. 例如: syms x [r,how]=simple(cos(x)^2-sin(x)^2) r = cos(2*x) how = combine 4.[T,Y] = solver(odefun,tspan,y 0) 求微分方程的数值解. 说明: (1) 其中的 solver 为命令 ode45、ode23、ode113、ode15s 、ode23s 、ode23t 、ode23tb 之一. (2) odefun 是显式常微分方程:?????==0 0)() ,(y t y y t f dt dy (3) 在积分区间 tspan =],[0f t t 上,从0t 到f t ,用初始条件0y 求解.

用Matlab解微分方程

用Matlab 软件求解微分方程 1.解析解 (1)一阶微分方程 求21y dx dy +=的通解:dsolve('Dy=1+y^2','x') 求y x dx dy -+=21的通解:dsolve('Dy=1+x^2-y','x') 求?????=+=1 )0(12y y dx dy 的特解:dsolve('Dy=1+y^2',’y(0)=1’,'x') (2)高阶微分方程 求解???-='==-+'+''. 2)2(,2)2(,0)(222πππy y y n x y x y x 其中,21=n ,命令为: dsolve('x^2*D2y+x*Dy+(x^2-0.5^2)*y=0','y(pi/2)=2,Dy(pi/2)=-2/pi','x') 求042=-+'-'''x y y y 的通解,命令为: dsolve('D3y-2*Dy+y-4*x=0','x') 输出为: ans=8+4*x+C1*exp(x)+C2*exp(-1/2*(5^(1/2)+1)*x)+C3*exp(1/2*(5^(1/2)-1)*x) (3)一阶微分方程组 求???+-='+='). (3)(4)(),(4)(3)(x g x f x g x g x f x f 的通解:[f,g]=dsolve('Df=3*f+4*g','Dg=-4*f+3*g','x') 输出为: f =exp(3*x)*(cos(4*x)*C1+sin(4*x)*C2) g =-exp(3*x)*(sin(4*x)*C1-cos(4*x)*C2) 若再加上初始条件1)0(,0)0(==g f ,则求特解: [f,g]=dsolve('Df=3*f+4*g','Dg=-4*f+3*g','f(0)=0,g(0)=1','x') 输出为: f =exp(3*x)*sin(4*x) g =exp(3*x)*cos(4*x) 2.数值解 (1)一阶微分方程

MatlabPDE工具箱有限元法求解偏微分方程

在科学技术各领域中,有很多问题都可以归结为偏微分方程问题。在物理专业的力学、热学、电学、光学、近代物理课程中都可遇见偏微分方程。 偏微分方程,再加上边界条件、初始条件构成的数学模型,只有在很特殊情况下才可求得解析解。随着计算机技术的发展,采用数值计算方法,可以得到其数值解。 偏微分方程基本形式 而以上的偏微分方程都能利用PDE工具箱求解。 PDE工具箱 PDE工具箱的使用步骤体现了有限元法求解问题的基本思路,包括如下基本步骤: 1) 建立几何模型 2) 定义边界条件 3) 定义PDE类型和PDE系数 4) 三角形网格划分

5) 有限元求解 6) 解的图形表达 以上步骤充分体现在PDE工具箱的菜单栏和工具栏顺序上,如下 具体实现如下。 打开工具箱 输入pdetool可以打开偏微分方程求解工具箱,如下 首先需要选择应用模式,工具箱根据实际问题的不同提供了很多应用模式,用户可以基于适

当的模式进行建模和分析。 在Options菜单的Application菜单项下可以做选择,如下 或者直接在工具栏上选择,如下 列表框中各应用模式的意义为: ① Generic Scalar:一般标量模式(为默认选项)。 ② Generic System:一般系统模式。 ③ Structural Mech.,Plane Stress:结构力学平面应力。

④ Structural Mech.,Plane Strain:结构力学平面应变。 ⑤ Electrostatics:静电学。 ⑥ Magnetostatics:电磁学。 ⑦ Ac Power Electromagnetics:交流电电磁学。 ⑧ Conductive Media DC:直流导电介质。 ⑨ Heat Tranfer:热传导。 ⑩ Diffusion:扩散。 可以根据自己的具体问题做相应的选择,这里要求解偏微分方程,故使用默认值。此外,对于其他具体的工程应用模式,此工具箱已经发展到了Comsol Multiphysics软件,它提供了更强大的建模、求解功能。 另外,可以在菜单Options下做一些全局的设置,如下 l Grid:显示网格 l Grid Spacing…:控制网格的显示位置 l Snap:建模时捕捉网格节点,建模时可以打开 l Axes Limits…:设置坐标系范围 l Axes Equal:同Matlab的命令axes equal命令

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

第四讲Matlab求解微分方程(组) 理论介绍:Matlab求解微分方程(组)命令 求解实例:Matlab求解微分方程(组)实例 实际应用问题通过数学建模所归纳得到得方程,绝大多数都就是微分方程,真正能得到代数方程得机会很少、另一方面,能够求解得微分方程也就是十分有限得,特别就是高阶方程与偏微分方程(组)、这就要求我们必须研究微分方程(组)得解法:解析解法与数值解法、 一.相关函数、命令及简介 1、在Matlab中,用大写字母D表示导数,Dy表示y关于自变量得一阶导数,D2y 表示y关于自变量得二阶导数,依此类推、函数dsolve用来解决常微分方程(组)得求解问题,调用格式为: X=dsolve(‘eqn1’,’eqn2’,…) 函数dsolve用来解符号常微分方程、方程组,如果没有初始条件,则求出通解,如果有初始条件,则求出特解、 注意,系统缺省得自变量为t 2、函数dsolve求解得就是常微分方程得精确解法,也称为常微分方程得符号解、但就是,有大量得常微分方程虽然从理论上讲,其解就是存在得,但我们却无法求出其解析解,此时,我们需要寻求方程得数值解,在求常微分方程数值解方 面,MATLAB具有丰富得函数,我们将其统称为solver,其一般格式为: [T,Y]=solver(odefun,tspan,y0) 说明:(1)solver为命令ode45、ode23、ode113、ode15s、ode23s、ode23t、ode23tb、ode15i之一、 (2)odefun就是显示微分方程在积分区间tspan上从到用初始条件求解、 (3)如果要获得微分方程问题在其她指定时间点上得解,则令tspan(要求就是单调得)、 (4)因为没有一种算法可以有效得解决所有得ODE问题,为此,Matlab提供了多种求解器solver,对于不同得ODE问题,采用不同得solver、 表1 Matlab中文本文件读写函数

用Matlab软件求常微分方程的解或通解

《高等数学》实验报告 实验人员:系(班): 学号: 姓名: 实验地点:电教楼五号机房 实验名称:Matlab 高等数学实验 实验时间:2014-6-3 16:30--18:30 实验名称:用Matlab 软件求常微分方程的解(或通解) 实验目的:熟练掌握Matlab 软件求常微分方程的解(或通解) 实验内容:(给出实验程序与运行结果) 1、求微分方程的特解. 1、?? ?? ?===+-10)0(,6)0(034'2 2y y y dx dy dx y d 程序:>> dsolve('D2y-4*Dy+3*y','y(0)=6,Dy(0)=10','x') ans = 4*exp(x)+2*exp(3*x) 吕梁学院《高等数学》实验报告 情况试高中

2、?? ???===++0)0(,2)0(044'2 2y y y dx dy dx y d 程序:>>dsolve('4*D2y+4*Dy+y','y(0)=2,Dy(0)=0','x') ans = 2*exp(-1/2*x)+exp(-1/2*x)*x 3、?? ???===++15)0(',0)0(029422y y y dx dy dx y d 程序:>>dsolve('D2y+4*Dy+29*y=0','y(0)=9,Dy(0)=15','x') ans = 33/5*exp(-2*x)*sin(5*x)+9*exp(-2*x)*cos(5*x) 4、?? ???===+-3)0(',0)0(013422y y y dx dy dx y d 程序:>>dsolve('D2y-4*dy+13*y=0','y(0)=0','Dy(0)=3','x') ans = 3/13*sin(13^(1/2)*x)*13^(1/2)-4/13*cos(13^(1/2)*x)*dy+4/13*dy 5、?? ???-===--5)0(',0)0(04322y y y dx dy dx y d 程序:>>dsolve('D2y-3*Dy-4*y','y(0)=0,Dy(0)=-5','x') ans = exp(-x)-exp(4*x)

有限差分法求解偏微分方程MATLAB

南京理工大学 课程考核论文 课程名称:高等数值分析 论文题目:有限差分法求解偏微分方程姓名:罗晨 学号: 成绩: 有限差分法求解偏微分方程

一、主要内容 1.有限差分法求解偏微分方程,偏微分方程如一般形式的一维抛物线型方程: 22(,)()u u f x t t x αα??-=??其中为常数 具体求解的偏微分方程如下: 22001 (,0)sin()(0,)(1,)00 u u x t x u x x u t u t t π???-=≤≤?????? =??? ==≥??? 2.推导五种差分格式、截断误差并分析其稳定性; 3.编写MATLAB 程序实现五种差分格式对偏微分方程的求解及误差分析; 4.结论及完成本次实验报告的感想。 二、推导几种差分格式的过程: 有限差分法(finite-difference methods )是一种数值方法通过有限个微分方程近似求导从而寻求微分方程的近似解。有限差分法的基本思想是把连续的定解区域用有限个离散点构成的网格来代替;把连续定解区域上的连续变量的函数用在网格上定义的离散变量函数来近似;把原方程和定解条件中的微商用差商来近似,积分用积分和来近似,于是原微分方程和定解条件就近似地代之以代数方程组,即有限差分方程组,解此方程组就可以得到原问题在离散点上的近似解。 推导差分方程的过程中需要用到的泰勒展开公式如下: ()2100000000()()()()()()()......()(()) 1!2!! n n n f x f x f x f x f x x x x x x x o x x n +'''=+-+-++-+- (2-1) 求解区域的网格划分步长参数如下:

MATLAB求解常微分方程数值解

利用MATLAB求解常微分方程数值解

目录 1. 内容简介 (1) 2. Euler Method(欧拉法)求解 (1) 2.1. 显式Euler法和隐式Euler法 (2) 2.2. 梯形公式和改进Euler法 (3) 2.3. Euler法实用性 (4) 3. Runge-Kutta Method(龙格库塔法)求解 (5) 3.1. Runge-Kutta基本原理 (5) 3.2. MATLAB中使用Runge-Kutta法的函数 (7) 4. 使用MATLAB求解常微分方程 (7) 4.1. 使用ode45函数求解非刚性常微分方程 (8) 4.2. 刚性常微分方程 (9) 5. 总结 (9) 参考文献 (11) 附录 (12) 1. 显式Euler法数值求解 (12) 2. 改进Euler法数值求解 (12) 3. 四阶四级Runge-Kutta法数值求解 (13) 4.使用ode45求解 (14)

1.内容简介 把《高等工程数学》看了一遍,增加对数学内容的了解,对其中数值解法比较感兴趣,这大概是因为在其它各方面的学习和研究中经常会遇到数值解法的问题。理解模型然后列出微分方程,却对着方程无从下手,无法得出精确结果实在是让人难受的一件事情。 实际问题中更多遇到的是利用数值法求解偏微分方程问题,但考虑到先从常微分方程下手更为简单有效率,所以本文只研究常微分方程的数值解法。把一个工程实际问题弄出精确结果远比弄清楚各种细枝末节更有意思,因此文章中不追求非常严格地证明,而是偏向如何利用工具实际求解出常微分方程的数值解,力求将课程上所学的知识真正地运用到实际方程的求解中去,在以后遇到微分方程的时候能够熟练运用MATLAB得到能够在工程上运用的结果。 文中求解过程中用到MATLAB进行数值求解,主要目的是弄清楚各个函数本质上是如何对常微分方程进行求解的,对各种方法进行MATLAB编程求解,并将求得的数值解与精确解对比,其中源程序在附录中。最后考察MATLAB中各个函数的适用范围,当遇到实际工程问题时能够正确地得到问题的数值解。 2.Euler Method(欧拉法)求解 Euler法求解常微分方程主要包括3种形式,即显式Euler法、隐式Euler法、梯形公式法,本节内容分别介绍这3种方法的具体内容,并在最后对3种方法精度进行对比,讨论Euler法的实用性。 本节考虑实际初值问题 使用解析法,对方程两边同乘以得到下式

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

第四讲 Matlab 求解微分方程(组) 理论介绍:Matlab 求解微分方程(组)命令 求解实例:Matlab 求解微分方程(组)实例 实际应用问题通过数学建模所归纳得到的方程,绝大多数都是微分方程,真正能得到代数方程的机会很少.另一方面,能够求解的微分方程也是十分有限的,特别是高阶方程和偏微分方程(组).这就要求我们必须研究微分方程(组)的解法:解析解法和数值解法. 一.相关函数、命令及简介 1.在Matlab 中,用大写字母D 表示导数,Dy 表示y 关于自变量的一阶导数,D2y 表示y 关于自变量的二阶导数,依此类推.函数dsolve 用来解决常微分方程(组)的求解问题,调用格式为: X=dsolve(‘eqn1’,’eqn2’,…) 函数dsolve 用来解符号常微分方程、方程组,如果没有初始条件,则求出通解,如果有初始条件,则求出特解. 注意,系统缺省的自变量为t 2.函数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 到f t 用初始条件0y 求解. (3)如果要获得微分方程问题在其他指定时间点012,,, ,f t t t t 上的解,则令 tspan 012[,,,]f t t t t =(要求是单调的). (4)因为没有一种算法可以有效的解决所有的ODE 问题,为此,Matlab 提供

(完整版)实验七用matlab求解常微分方程

实验七 用matlab 求解常微分方程 一、实验目的: 1、熟悉常微分方程的求解方法,了解状态方程的概念; 2、能熟练使用dsolve 函数求常微分方程(组)的解析解; 3、能熟练应用ode45\ode15s 函数分别求常微分方程的非刚性、刚性的数值解; 4、掌握绘制相图的方法 二、预备知识: 1.微分方程的概念 未知的函数以及它的某些阶的导数连同自变量都由一已知方程联系在一起的方程称为微分方程。如果未知函数是一元函数,称为常微分方程。常微分方程的一般形式为 0),,",',,()(=n y y y y t F Λ 如果未知函数是多元函数,成为偏微分方程。联系一些未知函数的一组微分方程组称为微分方程组。微分方程中出现的未知函数的导数的最高阶解数称为微分方程的阶。若方程中未知函数及其各阶导数都是一次的,称为线性常微分方程,一般表示为 ) ()(')()(1)1(1)(t b y t a y t a y t a y n n n n =++++--Λ 若上式中的系数 n i t a i ,,2,1),(Λ=均与t 无关,称之为常系数。 2.常微分方程的解析解 有些微分方程可直接通过积分求解.例如,一解常系数常微分方程1+=y dt dy 可化为 dt y dy =+1,两边积分可得通解为 1-=t ce y .其中c 为任意常数.有些常微分方程可用一些技巧,如分离变量法,积分因子法,常数变异法,降阶法等可化为可积分的方程而求得解析解. 线性常微分方程的解满足叠加原理,从而他们的求解可归结为求一个特解和相应齐次微分方程的通解.一阶变系数线性微分方程总可用这一思路求得显式解。高阶线性常系数微分方程可用特征根法求得相应齐次微分方程的基本解,再用常数变异法求特解。 一阶常微分方程与高阶微分方程可以互化,已给一个n 阶方程 ),,",',()1()(-=n n y y y t f y Λ 设 ) 1(21,,',-===n n y y y y y y Λ,可将上式化为一阶方程组 ?????????====-),,,,(''''2113221n n n n y y y t f y y y y y y y ΛΛ 反过来,在许多情况下,一阶微分方程组也可化为高阶方程。所以一阶微分方程组与高阶常微分方程的理论与方法在许多方面是相通的,一阶常系数线性微分方程组也可用特征根法求解。 3.微分方程的数值解法 除常系数线性微分方程可用特征根法求解,少数特殊方程可用初等积分法求解外,大部分微分方程无限世界,应用中主要依靠数值解法。考虑一阶常微分方程初值问题

用Matlab件求常微分方程解(或通解)

用Matlab件求常微分方程解(或通解)

————————————————————————————————作者:————————————————————————————————日期:

《高等数学》实验报告 实验人员:系(班): 学号: 姓名: 实验地点:电教楼五号机房 实验名称:Matlab 高等数学实验 实验时间:2014-6-3 16:30--18:30 实验名称:用Matlab 软件求常微分方程的解(或通解) 实验目的:熟练掌握Matlab 软件求常微分方程的解(或通解) 实验内容:(给出实验程序与运行结果) 一、求微分方程的特解. 1、?? ???===+-10)0(,6)0(034'22y y y dx dy dx y d 程序:>> dsolve('D2y-4*Dy+3*y','y(0)=6,Dy(0)=10','x') ans = 4*exp(x)+2*exp(3*x) 吕梁学院《高等数学》实验报告

2、?? ???===++0)0(,2)0(044'22y y y dx dy dx y d 程序:>>dsolve('4*D2y+4*Dy+y','y(0)=2,Dy(0)=0','x') ans = 2*exp(-1/2*x)+exp(-1/2*x)*x 3、?? ???===++15)0(',0)0(029422y y y dx dy dx y d 程序:>>dsolve('D2y+4*Dy+29*y=0','y(0)=9,Dy(0)=15','x') ans = 33/5*exp(-2*x)*sin(5*x)+9*exp(-2*x)*cos(5*x) 4、?? ???===+-3)0(',0)0(013422y y y dx dy dx y d 程序:>>dsolve('D2y-4*dy+13*y=0','y(0)=0','Dy(0)=3','x') ans = 3/13*sin(13^(1/2)*x)*13^(1/2)-4/13*cos(13^(1/2)*x)*dy+4/13*dy 5、?? ???-===--5)0(',0)0(04322y y y dx dy dx y d 程序:>>dsolve('D2y-3*Dy-4*y','y(0)=0,Dy(0)=-5','x') ans = exp(-x)-exp(4*x)

matlab求解常微分方程.docx

用matlab求解常微分方程 在MATLAB中,由函数dsolve()解决常微分方程(组)的求解问题,其具体格式如下:r 二dsolve('eql,eq2,???字condl,cond2,?.?;V) 匕ql,eq2,???*为微分方程或微分方程组,,condl,cond2,.??;是初始条件或边界条件,P是独立变量,默认的独立变量是讥 函数dsolve用来解符号常微分方程、方程组,如果没有初始条件,则求出通解,如果有初始条件,则求出特解。 dy _1 例1:求解常微分方程莎一石的MATLAB程序为: dsolve(* Dy=l/(x+y) 1r!x1), 注意,系统缺省的自变量为t,因此这里要把自变量写明。其中:Y=lambertw(X)表示函数关系Y*exp(Y)二X。 例2:求解常微分方程E'-y— 0的MATLAB程序为: Y2=dsolve(1y*D2y-Dy A2=01, 1x f) Y2=dsolve(!D2y*y-Dy A2=0 J )

我们看到有两个解,其中一个是常数0。 dx 心 ? —+ 5x + y = e dt 空_兀_3『= g2f 例3:求常微分方程组〔力 ' 通解的MATLAB 程序为: [X,Y]=dsolve(f Dx+5*x+y=exp(t),Dy-x-3*y=exp(2*t) 1, 111 ) [X,Y]=dsolve(1 Dx+2 *x-Dy=l0 * cos(t),Dx+Dy+2 *y=4 *exp(- 2*t) T ,f x(0)=2,y(0)=0f ,f t T ) 以上这些都是常微分方程的精确解法,也称为常微分方程的符号解。但是,我们知 道,有大量的常微分方程虽然从理论上讲,其解是存在的,但我们却无法求出其解析 解,此吋,我们需要寻求方程的数值解,在求常微分方程数值解方面,MATLAB 具有丰 富的函数,我们将其统称为solver,其一般格式为: i°cosr, 7 =2 例4:求常微分方程组 y = 0 z 通解的MATLAB 程序为:

《偏微分方程概述及运用matlab求解偏微分方程常见问题》要点

北京航空航天大学 偏微分方程概述及运用matlab求解微分方 程求解常见问题 姓名徐敏 学号57000211 班级380911班 2011年6月

偏微分方程概述及运用matlab求解偏微分 方程常见问题 徐敏 摘要偏微分方程简介,matlab偏微分方程工具箱应用简介,用这个工具箱解方程的过程是:确定待解的偏微分方程;确定边界条件;确定方程所在域的几何形状;划分有限元;解方程 关键词MATLAB 偏微分方程程序 如果一个微分方程中出现的未知函数只含有一个自变量,这个方程叫做常微分方程,也简称微分方程:如果一个微分方程中出现多元函数的偏导数,或者说如果未知函数和几个变量有关,而且方程中出现未知函数对几个变量的导数,那么这种微分方程就是偏微分方程。 一,偏微分方程概述 偏微分方程是反映有关的未知变量关于时间的导数和关于空间变量的导数之间制约关系的等式。许多领域中的数学模型都可以用偏微分方程来描述,很多重要的物理、力学等学科的基本方程本身就是偏微分方程。早在微积分理论刚形成后不久,人们就开始用偏微分方程来描述、解释或预见各种自然现象,并将所得到的研究方法和研究成果运用于各门科学和工程技术中,不断地取得了显著的成效,显示了偏微分方程对于人类认识自然界基本规律的重要性。逐渐地,以物

理、力学等各门科学中的实际问题为背景的偏微分方程的研究成为传统应用数学中的一个最主要的内容,它直接联系着众多自然现象和实际问题,不断地提出和产生出需要解决的新课题和新方法,不断地促进着许多相关数学分支(如泛函分析、微分几何、计算数学等)的发展,并从它们之中引进许多有力的解决问题的工具。偏微分方程已经成为当代数学中的一个重要的组成部分,是纯粹数学的许多分支和自然科学及工程技术等领域之间的一座重要的桥梁。 在国外,对偏微分方程的应用发展是相当重视的。很多大学和研究单位都有应用偏微分方程的研究集体,并得到国家工业、科学部门及军方、航空航天等方面的大力资助。比如在国际上有重大影响的美国的Courant研究所、法国的信息与自动化国立研究所等都集中了相当多的偏微分方程的研究人员,并把数学模型、数学方法、应用软件及实际应用融为一体,在解决实际课题、推动学科发展及加速培养人才等方面都起了很大的作用。 在我国,偏微分方程的研究起步较晚。但解放后,在党和国家的大力号召和积极支持下,我国偏微分方程的研究工作发展比较迅速,涌现出一批在这一领域中做出杰出工作的数学家,如谷超豪院士、李大潜院士等,并在一些研究方向上达到了国际先进水平。但总体来说,偏微分方程的研究队伍的组织和水平、研究工作的广度和深度与世界先进水平相比还有很大的差距。因此,我们必须继续努力,大力加强应用偏微分方程的研究,逐步缩小与世界先进水平的差距 二,偏微分方程的内容

MATLABEuler法解常微分方程

Euler法解常微分方程 Euler法解常微分方程算法: Step 1 分别取积分上限、积分下限、步长 Step 2计算判断是否成立,成立转到Step 3,否则继续进行Step 4 Step 3 计算 Step 4 Euler法解常微分方程算程序: function euler2(fun,y0,A,h) %fun--y' %y0---初值 %A----x取值范围 %a----x左区间端点值 %b----x右区间端点值 %h----给定步长 x=min(A); b=max(A); y=y0; while x

Step 3 (1)做显性Euler预测 (2)将带入 Step 4计算判断是否成立,成立返回Step 3,否则继续进行Step 5 Step 5 改进Euler法解常微分方程算程序: function gaijineuler2(fun,y0,A,h) %fun--y' %y0---初值 %A----x取值范围 %a----x左区间端点值 %b----x右区间端点值 %h----给定步长 a=min(A); b=max(A); x=a:h:b; y(1)=y0; for i=1:length(x)-1 w1=feval(fun,x(i),y(i)); y(i+1)=y(i)+h*w1; w2=feval(fun,x(i+1),y(i+1)); y(i+1)=y(i)+h*(w1+w2)/2; end x=x' y=y' 例:用改进Euler法计算下列初值问题(取步长h=0.25) 输入:fun=inline('-x*y^2') gaijineuler2(fun,2,[0 5],0.25) 得到: x = 0.2500 0.5000 0.7500 1.0000 1.2500 1.5000 1.7500 2.0000 2.2500 2.5000 2.7500

数学应用软件作业6-用Matlab求解微分方程(组)的解析解和数值解

数学应用软件作业6-用Matlab 求解微分方程(组)的解析解和数值解

注:上机作业文件夹以自己的班级姓名学号命名,文件夹包括如下上机报告和Matlab程序。 上机报告模板如下: 佛山科学技术学院 上机报告 课程名称数学应用软件 上机项目用Matlab求解微分方程(组)的解析解和数值解 专业班级姓名学号 一. 上机目的 1.了解求微分方程(组)的解的知识。 2.学习Matlab中求微分方程的各种解的函数,如 dsolve命令、ode45函数等等,其中注意把方程化为新的方程的形式。 3.掌握用matlab编写程序解决求解微分方程的问 题。 二. 上机内容 1、求高阶线性齐次方程:y’’’-y’’-3y’+2y=0。 2、求常微分方程组

2 210cos,2 24,0 t t t dx dy x t x dt dt dx dy y e y dt dt = - = ? +-== ?? ? ?++== ?? 3、求解 分别用函数ode45和ode15s计算求解,分别画出图形,图形分别标注标题。 4、求解微分方程 ,1 )0( ,1 '= + + - =y t y y 先求解析解,在[0,1]上作图; 再用ode45求数值解(作图的图形用“o”表示),在同一副图中作图进行比较,用不同的颜色表示。 三. 上机方法与步骤 给出相应的问题分析及求解方法,并写出Matlab 程序,并有上机程序显示截图。 题1:直接用命令dsolve求解出微分方程的通解。 Matlab程序:

dsolve('D3y-D2y-3*Dy+2*y','x') 题2:将微分方程组改写为 5cos2exp(2) 5cos2exp(2) (0)2,(0)0 dx t t x y xt dy t t x y dt x y ? =+--- ? ? ? =-+-+- ? ? == ? ? ? , 再用命令dsolve求解微分方程的通解。 Matlab程序: 建立timu2.m如下: [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') x=simple(x) y=simple(y)

matlab简介(解常微分方程绘制函数图像)

MATLAB简介 MATLAB是矩阵实验室(Matrix Laboratory)的简称,是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境。 一、基本功能 MATLAB是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。 MATLAB和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。 MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。在新的版本中也加入了对C,FORTRAN,C++,JAVA的支持。可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用,此外许多的MATLAB爱好者都编写了一些经典的程序,用户可以直接进行下载就可以用。 二、特点 1) 高效的数值计算及符号计算功能,能使用户从繁杂的数学运算分析中解脱出来; 2) 具有完备的图形处理功能,实现计算结果和编程的可视化; 3) 友好的用户界面及接近数学表达式的自然化语言,使学者易于学习和掌握; 4) 功能丰富的应用工具箱(如信号处理工具箱、通信工具箱等) ,为用户提供了大量方便实用的处理工具。 三、优势 1.友好的工作平台编程环境 MATLAB由一系列工具组成。这些工具方便用户使用MATLAB的函数和文件,其中许多工具采用的是图形用户界面。包括MATLAB桌面和命令窗口、历史命令窗口、编辑器和调试器、路径搜索和用于用户浏览帮助、工作空间、文件的浏览器。随着MATLAB的商业化以及软件本身的不断升级,MATLAB的用户界面也越来越精致,更加接近Windows的标准界面,人机交互性更强,操作更简单。 2.强大的科学计算机数据处理能力 MATLAB是一个包含大量计算算法的集合。其拥有600多个工程中要用到的数学运算函数,可以方便的实现用户所需的各种计算功能,可以用它来代替底层编程语言,如C和C++ 。在计算要求相同的情况下,使用MATLAB的编程工作量会大大减少。

用matlab求解常微分方程

实验六 用matlab 求解常微分方程 1.微分方程的概念 未知的函数以及它的某些阶的导数连同自变量都由一已知方程联系在一起的方程称为微分方程。如果未知函数是一元函数,称为常微分方程。常微分方程的一般形式为 0),,",',,()(=n y y y y t F 如果未知函数是多元函数,成为偏微分方程。联系一些未知函数的一组微分方程组称为微分方程组。微分方程中出现的未知函数的导数的最高阶解数称为微分方程的阶。若方程中未知函数及其各阶导数都是一次的,称为线性常微分方程,一般表示为 )()(')()(1)1(1)(t b y t a y t a y t a y n n n n =++++-- 若上式中的系数n i t a i ,,2,1),( =均与t 无关,称之为常系数。 2.常微分方程的解析解 有些微分方程可直接通过积分求解.例如,一解常系数常微分方程1+=y dt dy 可化为 dt y dy =+1,两边积分可得通解为 1-=t ce y .其中c 为任意常数.有些常微分方程可用一些技巧,如分离变量法,积分因子法,常数变异法,降阶法等可化为可积分的方程而求得解析解. 线性常微分方程的解满足叠加原理,从而他们的求解可归结为求一个特解和相应齐次微分方程的通解.一阶变系数线性微分方程总可用这一思路求得显式解。高阶线性常系数微分方程可用特征根法求得相应齐次微分方程的基本解,再用常数变异法求特解。 一阶常微分方程与高阶微分方程可以互化,已给一个n 阶方程 ),,",',()1()(-=n n y y y t f y 设)1(21,,',-===n n y y y y y y ,可将上式化为一阶方程组 ?????????====-),,,,(''''2113221n n n n y y y t f y y y y y y y 反过来,在许多情况下,一阶微分方程组也可化为高阶方程。所以一阶微分方程组与高阶常微分方程的理论与方法在许多方面是相通的,一阶常系数线性微分方程组也可用特征根法求解。 3.微分方程的数值解法 除常系数线性微分方程可用特征根法求解,少数特殊方程可用初等积分法求解外,大部分微分方程无限世界,应用中主要依靠数值解法。考虑一阶常微分方程初值问题 ???=<<=000)()),(,()('y t y t t t t y t f t y f

利用matlab编写S函数求解微分方程

利用matlab编写S函数求解微分方程自动化专业综合设计报告 自动化专业综合设计报告

函数求解微S编写设计题目:利用 matlab 分方程 自动化系统仿真实验室所在 实验室: 郭卫平 指导教师: 律迪迪学生姓名 200990519114 班级文自0921 学号 成绩评定: 自动化专业综合设计报告

一、设计目的 了解使用simulink的扩展工具——S-函数,s函数可以利用matlab的丰富资源,而不仅仅局限于simulink提供的模块,而用c或c++等语言写的s函数还可以实现对硬件端口的操作,还可以操作windows API 等的,它的魅力在于完美结合了simulink 框图简洁明快的特点和编程灵活方便的优点,提供了增强和扩展sinulink能力的强大机制,同时也是使用RTW实现实时仿真的关键。 二、设计要求 求解解微分方程 y'=y-2x/y 自动化专业综合设计报告 y(0)=1 要求利用matlab编写S函数求解 三、设计内容(可加附页) 【步骤1】获取状态空间表达式。

在matlab中输入 dsolve(‘Dy=y-2*x/y','y(0)=1', 'x') 得到 y=(2*x+1).^(1/2); 【步骤2】建立s函数的m文件。 利用21·用S函数模板文件。 以下是修改之后的模板文件sfuntmpl.m 的内容。 function [sys,x0,str,ts] = sfuntmpl(t,x,u,flag) %SFUNTMPL S-function M-file General template define you can With % M-file S-functions, you own ordinary differential system equations (ODEs), discrete % equations, and/or just about any type of algorithm to be used within a %

相关主题