微分方程求解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
微分方程求解
一、 实验目的与要求
1.掌握用Matlab 求微分方程及其方程组解的方法; 2.学会求微分方程近似解的欧拉折线法;
3.学会建立一些简单问题的微分方程模型,并能运用Matlab 分析研究这些
问题。
二、 问题描述
对于很多实际问题,要直接找出所需的函数关系往往非常困难,但根据实际问题所提供的条件,有时却可以列出含有未知函数导数的关系式,这样的关系式就是所谓的微分方程。怎样利用微分方程求得所需未知函数,往往是我们解决实际问题经常需要面对的问题,即解微分方程。这里我们借用Matlab 对此问题进行简单探讨。 三、 问题分析
在处理关于微分方程的实际问题时,我们一般须先建立微分方程,再利用所学的数学知识解微分方程。事实上真正能找到精确解的微分方程只是很少一部分,大部分只能求近似解,即数值解。 四、 背景知识介绍
1. 求微分方程解析解的命令。 求微分方程解析解的命令为: dsolve (‘方程1’,‘方程2’,…,‘初始条件1’,‘初始条件2’,…,‘自变量’),
对于可用积分方法求解的微分方程和微分方程组,可以用dsolve 命令来求其通解和特解。
例1:要求方程043=-'+''y y y 的通解,可以输入以下语句Matlab 命令: 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 c o s s i n 212+=- 例3:解方程(
)
2
212
x 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,60240
='
==-'+''==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:求微分方程3,0
22=++='=x y
x y x y y 的近似解(40≤≤x )可用下
面的命令:
function f=odefun1(x,y) f=y^2*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-')
输出结果为:
函数()t y
y=的图像: