用MATLAB求解微分方程及微分方程组
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
0.2573]
0
2
4
6
8
10
12
14
16
18
模型2:慢速饮酒时,体液中酒精含量的变化率
dx k2x a dt x (0) 0
其中
a
M T
M为饮酒的总量,T为饮酒的时间
则有;
x
a k2
(1 e
k 2t
)
注意:
1、在解n个未知函数的方程组时,x0和x均为n维向量, m-文件中的待解方程组应以x的分量形式写成. 2、使用Matlab软件求数值解时,高阶微分方程必须 等价地变换成一阶微分方程组.
例4
d 2x dx 2 1000 (1 x ) x 0 2 dt dt x (0 ) 2; x ' (0 ) 0
(2)
(3)
3.因乙舰以速度v0沿直线x=1运动,设v0=1,则w=5,X=1,Y=t
因此导弹运动轨迹的参数方程为:
5 dx (1 x ) dt 2 2 (1 x ) ( t y ) 5 dy (t y ) 2 2 (1 x ) ( t y ) dt x (0) 0, y (0) 0
解 输入命令 :
[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
解 输入命令: y=dsolve('D2y+4*Dy+29*y=0','y(0)=0,Dy(0)=15','x') 运行结果为 : y =3e-2xsin(5x)
例 3 求微分方程组的通解.
dx 2x 3 y 3z dt dy 4x 5 y 3z dt dz 4 x 4 y 2 z dt
当x 1时 y
5 24
,即当乙舰航行到点 (1,
y v0 5 24 v 0
5 24
) 处时被导弹击中.
被击中时间为: t
. 若 v0=1, 则在 t=0.21 处被击中.
解法二(数值解) 令y1=y,y2=y1’,将方程(3)化为一阶微分方程组。
(1 x ) y ' ' 1 5 1 y
即 y Me
k 1t
模型2:快速饮酒后,体液中酒精含量的变化率
dx k 2 x k 1 Me dt x (0) 0
k 1t
用Matlab求解模型2:
syms x y k1 k2 M t x=dsolve('Dx+k2*x=k1*M*exp(-k1*t)','x(0)=0','t') 运行结果: M*k1/(-k1+k2)*exp(-k2*t+t*(-k1+k2))-exp(-k2*t)*M*k1/(-k1+k2) 即:
4. 解导弹运动轨迹的参数方程
建立m-文件eq2.m如下: function dy=eq2(t,y) dy=zeros(2,1); dy(1)=5*(1-y(1))/sqrt((1-y(1))^2+(t-y(2))^2); dy(2)=5*(t-y(2))/sqrt((1-y(1))^2+(t-y(2))^2); 取t0=0,tf=2,建立主程序chase2.m如下: [t,y]=ode45('eq2',[0 2],[0 0]); Y=0:0.01:2; plot(1,Y,'-'), hold on plot(y(:,1),y(:,2),'*')
2. 由于弹头始终对准乙舰,故导弹的速度平行于乙舰与导弹头位置的差向量,
dx dt X x , 0 即: Y y dy dt w dx ( X x) dt 2 2 ( X x ) (Y y ) 消去λ 得: dy w (Y y ) 2 2 dt ( X x ) (Y y )
1 0.8 0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1 0 2 4 6 8 10 12
解
1、建立m-文件rigid.m如下: function dy=rigid(t,y) dy=zeros(3,1); dy(1)=y(2)*y(3); dy(2)=-y(1)*y(3); dy(3)=-0.51*y(1)*y(2);
用MATLAB求解微分方程
1. 微分方程的解析解
求微分方程(组)的解析解命令: dsolve(‘方程1’, ‘方程2’,…‘方程n’, ‘初始条件’, ‘自变量’)
记号: 在表达微分方程时,用字母 D 表示求微分,D2、D3 等 表示求高阶微分.任何 D 后所跟的字母为因变量,自变量可以指 定或由系统规则选定为确省. 例如,微分方程
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的图形为“+”线.
导弹追踪问题 设位于坐标原点的甲舰向位于x轴上点A(1, 0)处的乙舰 发射导弹,导弹头始终对准乙舰.如果乙舰以最大的速度 v0(是常数)沿平行于y轴的直线行驶,导弹的速度是5v0,求 导弹运行的曲线方程.又乙舰行驶多远时,导弹将它击中? 解法一(解析法)
当x 1时y
5 24
,即当乙舰航行到点 (1,
5 24
) 处时被导弹击中.
被击中时间为: t
y v0
5 24 v 0
. 若 v0=1, 则在 t=0.21 处被击中.
轨迹图如下
例: 饮酒模型
模型1:快速饮酒后,胃中酒精含量的变化率
dy k1 y dt y (0 ) M
M=64000/490 =130.6122 (毫克/百毫升)
建立函数文件: function f=curvefun1(k,t) f=k(1)*64000/490*(exp(-k(2)*t)-exp(-k(1)*t))/(k(1)-k(2)) 输入拟合数据:
t=[0 0.25 0.5 0.75 1 1.5 2 2.5 3 3.5 4 4.5 5 6 7 8 9 10 11 12 13 14 15 16]; c=[0 30 68 75 82 82 77 68 68 58 51 50 41 38 35 28 25 18 15 12 10 7 7 4];
假设导弹在 t 时刻的位置为 P(x(t), y(t)),乙舰位于 Q (1, v 0 t ) .
由于导弹头始终对准乙舰,故此时直线 PQ 就是导弹的轨迹曲线弧 OP 在点 P 处的切线, 即有 即
y' v0t y 1 x
v 0 t (1 x ) y ' y
(1)
又根据题意,弧 OP 的长度为 AQ 的 5 倍, 即
2. 用Matlab求常微分方程的数值解
[t,x]=solver(’f’,ts,x0,options)
自变 量值 函数 值
ode45 ode23 ode113 ode15s ode23s
由待解 方程写 成的m文件名
ts=[t0,tf], 函数的 初值 t0、tf为自 变量的初 值和终值
ode23:组合的2/3阶龙格-库塔-芬尔格算法 ode45:运用组合的4/5阶龙格-库塔-芬尔格算法 用于设定误差限(缺省时设定相对误差10-3, 绝对误差10-6), 命令为:options=odeset(’reltol’,rt,’abstol’,at), rt,at:分别为设定的相对误差和绝对误差.
任取k1、k2的一组初始值:k0=[2,1];
输入命令: k=lsqcurvefit('curvefun1',k0,t,c) 运行结果为: k =[ 1.3240 作图表示求解结果: t1=0:0.1:18; f=curvefun1(k,t1); plot(t,c,'ko',t1,f,'r-')
90 80 70 60 50 40 30 20 10 0
2
1.建立m-文件eq1.m function dy=eq1(x,y) dy=zeros(2,1); dy(1)=y(2); dy(2)=1/5*sqrt(1+y(1)^2)/(1-x); 2. 取x0=0,xf=0.9999,建立主程序ff6.m如下: x0=0,xf=0.9999 [x,y]=ode15s('eq1',[x0 xf],[0 0]); plot(x,y(:,1),’b.') hold on y=0:0.01:2; plot(1,y,’b*') 结论: 导弹大致在(1,0.2)处击中乙舰
-0.5 -1 -1.5 -2 -2.5 0
500
1000
1500
2000
2500
3000
2、取t0=0,tf=3000,输入命令: [T,Y]=ode15s('vdp1000',[0 3000],[2 0]); plot(T,Y(:,1),'-')
例5
解微分方程组.
y1 ' y 2 y 3 y 2 ' y1 y 3 y 3 ' 0 . 51 y 1 y 2 y 1 ( 0 ) 0 , y 2 ( 0 ) 1, y 3 ( 0 ) 1
x Mk 1 k1 k 2 (e
k 2t
e
k 1t
)
用以下一组数据拟合上述模型中的参数k1、k2:
时间(小时) 酒精含量 时间(小时) 酒精含量 0.25 30 6 38 0.5 68 7 35 0.75 75 8 28 1 82 9 25 1.5 82 10 18 2 77 11 15 2.5 68 12 12 3 68 13 10 3.5 58 14 7 4 51 15 7 4.5 50 16 4 5 41
x
0
1 y ' dx 5 v 0 t
2
(2)
由(1),(2)消去t整理得模型:
(1 x ) y " 1 5 1 y'
2
(3)
初值条件为: y ( 0 ) 0
解即为导弹的运行轨迹:
y 5 8
4
y ' (0) 0
(1 x )
5
5 12
6
(1 x )
5
5 24
例1 求
du dt
d
2
y
2
0 应表达为:D2y=0.
2
dx
1 u
的通解.
解 输入命令:dsolve('Du=1+u^2','t')
运行结果:u = tan(t-c)
例 2 求微分方程的特解.
d 2 y dy 4 29 y 0 2 dx dx y ( 0 ) 0 , y ' ( 0 ) 15
y '1 y 2 1 2 y2 ' 1 y 1 /( 1 x ) 5
解法三(建立参数方程求数值解)
设时刻t乙舰的坐标为(X(t),Y(t)),导弹的坐标为(x(t),y(t)). dx 2 dy 2 2 ( ) ( ) w 1.设导弹速度恒为 w ,则 (1) dt dt
解: 令 y1=x,y2=y1’
则微分方程变为一阶微分方程组:
y1 ' y 2 2 y 2 ' 1000 (1 y 1 ) y 2 y 1 y (0) 2, y (0 ) 0 1 2
3、结果如图
2 1.5wenku.baidu.com1 0.5 0
1、建立m-文件vdp1000.m如下: function dy=vdp1000(t,y) dy=zeros(2,1); dy(1)=y(2); dy(2)=1000*(1-y(1)^2)*y(2)-y(1);