微分方程求解

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

微分方程求解

一、实验目的与要求

1.掌握用Matlab求微分方程及其方程组解的方法;

2.学会求微分方程近似解的欧拉折线法;

3.学会建立一些简单问题的微分方程模型,并能运用Matlab分析研究这些问题。

二、问题描述

对于很多实际问题,要直接找出所需的函数关系往往非常困难,但根据实际问题所提供的条件,有时却可以列出含有未知函数导数的关系式,这样的关系式就是所谓的微分方程。怎样利用微分方程求得所需未知函数,往往是我们解决实际问题经常需要面对的问题,即解微分方程。这里我们借用Matlab对此问题进行简单探讨。

三、问题分析

在处理关于微分方程的实际问题时,我们一般须先建立微分方程,再利用所学的数学知识解微分方程。事实上真正能找到精确解的微分方程只是很少一部分,大部分只能求近似解,即数值解。

四、试验过程

1.求微分方程解析解的命令。

求微分方程解析解的命令为:

dsolve(‘方程1’,‘方程2’,…,‘初始条件1’,‘初始条件2’,…,‘自变量’),对于可用积分方法求解的微分方程和微分方程组,可以用dsolve命令来求其通解和特解。

例1:要求方程0

y

+''y

y的通解,可以输入以下语句Matlab命令:

4

-'

3=

dsolve ('D2y+3*Dy-4*y=0', 'x')

运行结果:ans =C1*exp(-4*x)+C2*exp(x)

即 x x e C e C y 241+=-

注:求一阶用D 表示,二阶导数用D2表示,三阶导数用D3表示,以此类推。如果自变量没有选定,默认自变量为’t ’。

例2:解方程054=+'+''y y y

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

运行结果: ans =C1*exp(-2*x)*sin(x)+C2*exp(-2*x)*cos(x) 即: ()x C x C e y x cos sin 212+=- 例3:解方程()

2

212x xe xy y x =+'+

dsolve ('(1+x^2)*Dy+2*x*y=x*exp(x^2)','x')

运行结果:ans =(1/2*exp(x^2)+C1)/(1+x^2)

即: 2

1

1212

x C e y x ++=

如果要求微分方程的初值问题:10,602400

='==-'+''==x x y y

y y y ,可

输入以下语句

dsolve ('D2y+4*Dy-2*y=0','y(0)=6','Dy(0)=10','x') 运行结果: ans =

(3+11/6^(1/2))*exp((-2+6^(1/2))*x)+(-11/6^(1/2)+3)*exp(-(2+6^(1/2))*x)

即: ()()x

62x 6261136113--+-⎪⎪⎭⎫ ⎝⎛-+⎪⎪⎭⎫ ⎝⎛+=e

e y

2.求微分方程数值解。

求微分方程数值解命令为ode45,ode23,ode15s 。

对于不可以用积分方法求解的微分方程初值问题,可以用ode45,ode23,ode15s 命令求特解。

例4:求微分方程20

,3x y yx y x y ='=++=的近似解(40≤≤x )可用下

面的命令:

function f=odefun1(x,y)

f=y*x+y+x^2;

[x,y]=ode45('odefun1',[0,4],3);

plot ( x , y , ' r - ' )

输出结果为:

例5:解初值问题()10,1=++-='y t y y dsolve('Dy=-y+t+1','y(0)=1')

输出结果:ans =t+exp(-t) 即: t e t y -+=

现在我们用数值求解命令求解后和解析解比较

function f=odefun2(t,y) f=-y+t+1;

t=0:0.1:1; y=t+exp(-t); plot(t,y,'b-') hold on

[t,y]=ode45('odefun2',[0,1],1); plot(t,y,'r.')

hold off

输出结果:

例6:求初值问题()()1,1,02sin ='==++''ππy y x y y 解:设y y y y '==21,,则原方程可化为

()()⎪⎩⎪

⎨⎧==--='='1

,12sin 21

12

21ππy y x y y y y Matlab 语言:

function f=odefun3(x,y) f=[y(2);-y(1)-sin(2*x)];

[x,y]=ode45('odefun3',[pi,2*pi],[1,1]); plot(x,y(:,1),'r-')

输出结果:

利用ode45命令还可以求解耦合微分方程,所谓耦合微分方程,方程组中的未知函数是相互影响的,相互依赖的,其中的一个求解会影响到另一个求解,下面求一对耦合微分方程的数值解:

例7:解方程组

()()

()()()

()

-

-

=

'

=

'

t x

t y

t

y

t y

t

x

sin

01

.0

其中()()1.2

,

0=

=y

x

Matlab语句:

function f=odefun4(t,y)

f=[y(2),-0.01*y(2)-sin(y(1))]';

[t,y]=ode15s('odefun4',[0,100],[0,2.1]); 函数()t x

x=的图像:

plot(t,y(:,1),'r-')

输出结果为:

相关文档
最新文档