用 Matlab 求解微分方程.ppt

上传人:m**** 文档编号:567915146 上传时间:2024-07-22 格式:PPT 页数:28 大小:239KB
返回 下载 相关 举报
用 Matlab 求解微分方程.ppt_第1页
第1页 / 共28页
用 Matlab 求解微分方程.ppt_第2页
第2页 / 共28页
用 Matlab 求解微分方程.ppt_第3页
第3页 / 共28页
用 Matlab 求解微分方程.ppt_第4页
第4页 / 共28页
用 Matlab 求解微分方程.ppt_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《用 Matlab 求解微分方程.ppt》由会员分享,可在线阅读,更多相关《用 Matlab 求解微分方程.ppt(28页珍藏版)》请在金锄头文库上搜索。

1、用用 Matlab 求解微分方程求解微分方程 借助 Matlab 软件,可以方便地求出微分方程(组)的解析解和数值解。 微分方程(组)的解析解微分方程(组)的解析解 求微分方程(组)解析解的命令为dsolve(eqn1, eqn2, ., x)其中“eqni”表示第 i 个方程,“x”表示微分方程(组)中的自变量,默认时自变量为 t。此外,在“eqni”表示的方程式中,用 D 表示求微分,D2、D3 等表示求高阶微分,任何 D 后所跟的字母表示因变量。 例 8.5.1 求解一阶微分方程 dy/dx = 1 + y2。 求通解输入:dsolve(Dy=1+y2, x)输出:ans = tan(x

2、+C1)求特解输 入 : dsolve(Dy=1+y2, y(0)=1, x)输出:ans = tan(x+1/4*pi)例 8.5.2 求解下列微分方程的通解及 y(0) = 0 和 y (0) = 15 条件下的特解 求通解输入:y=dsolve(D2y+4*Dy+29*y=0, x)输出:y = C1*exp(-2*x)*sin(5*x)+C2*exp(-2*x)*cos(5*x)求特解输入:y=dsolve(D2y+4*Dy+29*y=0, y(0)=0, Dy(0)=15, x)输出:y = 3*exp(-2*x)*sin(5*x)例 8.5.3 求解下列微分方程组 求通解 方式一

3、输入: 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 = C2*exp(-t)+C3*exp(2*t) y = C2*exp(-t)+C3*exp(2*t)+exp(-2*t)*C1 z = C3*exp(2*t)+exp(-2*t)*C1方式二输入: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 = C2/exp(t)+C3*ex

4、p(t)2 y = C2*exp(-t)+C3*exp(2*t)+exp(-2*t)*C1 z = C3*exp(2*t)+exp(-2*t)*C1求特解 输入: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, x(0)=0, y(0)=1, z(0)=2, t); x=simple(x) % 将x化简 y=simple(y) z=simple(z) 输出:x = exp(2*t)-exp(-t) y = exp(2*t)-exp(-t)+exp(-2*t) z = exp(2*t)+exp(-2*t)微分方程(组)的数值解

5、微分方程(组)的数值解 事实上,能够求得解析解的微分方程或微分方程组少之又少,多数情况下需要求出微分方程(组)的数值解。 Matlab中求微分方程数值解的函数有五个:ode45,ode23,ode113,ode15s,ode23s。调用格式为t, x = solver (f, ts, x0, options) 需要特别注意的是: solver 可以取以上五个函数之一,不同的函数代表不同的内部算法:ode23 运用组合的 2/3 阶龙格库塔费尔贝算法,ode45 运用组合的 4/5 阶龙格库塔费尔贝算法。通通常常使使用用函数函数 ode45; f 是由待解方程写成的m文件的文件名; ts=t0,

6、 tf,t0、tf为自变量的初值和终值; x0为函数的初值; options 用于设定误差限(可以缺省,缺省时设定为相对误差 103,绝对误差 106),程序为options = odeset(reltol, rt, abstol, at)其中rt和at分别为设定的相对误差和绝对误差; 在解 n 个未知函数的方程组时,x0、x 均为 n 维向量,m 文件中待解方程组应以 x 的分量形式写成; 使用 Matlab 软件求数值解时,高阶微分方程必须等价地变换成一阶微分方程组。 例 8.5.4 求解下列微分方程解:令 y1 = x,y2 = y1,则微分方程变为一阶微分方程组: (1) 建立 m 文

7、件 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); (2) 取 t0=0,tf=3000,输入命令: T,Y=ode15s(vdp1000,0 3000,2 0); plot(T,Y(:,1),-)运行程序,得到如图的结果。 例 8.5.5 求解下列微分方程组(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);

8、 dy(3)=-0.51*y(1)*y(2);(2) 取 t0=0,tf=12,输入命令: T,Y=ode45(rigid,0 12,0 1 1); plot(T,Y(:,1),-,T,Y(:,2),*,T,Y(:,3),+) 运行程序,得到如图的结果。图中,y1 的图形为实线,y2 的图形为“*”线,y3 的图形为“+”线。例 8.5.6 导弹追踪问题导弹追踪问题 设位于坐标原点的甲舰向位于 x 轴上点 A(1, 0) 处的乙舰发射导弹,导弹头始终对准乙舰。如果乙舰以最大的速度 v0(是常数)沿平行于 y 轴的直线行驶,导弹的速度是 5v0,求导弹运行的曲线方程。又乙舰行驶多远时,导弹将它击

9、中?解:如图所示,假设导弹在 t 时刻的位置为P(x(t), y(t),乙舰位于 Q(1, v0t)。由于导弹头始终对准乙舰,故此时直线 PQ 就是导弹的轨迹曲线弧 OP 在点 P 处的切线, 于是有 即又根据题意,弧 OP 的长度为 |AQ| 的 5 倍,于是 消去 t,得到导弹追踪模型如下: 下面求解这个初值问题。 解法一 解析解 利用微分方程初值问题的解析解法,得导弹的运行轨迹为: 参见下图。 根据题意,乙舰始终沿平行于 y 轴的直线 x = 1 行驶,且由上式知,当 x = 1 时 y = 5/24,故当乙舰航行到点 (1, 5/24) 处时被导弹击中。同时可求得被击中时间为:t =

10、y/v0 = 5/24v0;若 v0 = 1,则在 t = 0.21 处被击中。 解法二 数值解 令 y1 = y,y2 = y1,将先前给出的导弹追踪模型化为一阶微分方程组 (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=ode45(eq1,x0 xf,0 0); plot(x,y(:,1), b.) hold on y=0:0.01:2; plot(1,y, b*) 运行程序,得到如图所示的结果。从而得出结论:导弹大致在 (1, 0.2) 处击中乙舰。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号