第5讲 用MATLAB求解微分方程及微分方程组讲解
第五讲 Matlab求解微分方程

第五讲 Matlab求解微分方程教学目的:学会用MATLAB求简单微分方程的解析解、数值解,加深对微分方程概念和应用的理解;针对一些具体的问题,如追击问题,掌握利用软件求解微分方程的过程;了解微分方程模型解决问题思维方法及技巧;体会微分方程建摸的艺术性.教学重点:利用机理分析建模微分方程模型,掌握追击问题的建模方法,掌握利用MATLAB求解数值解.教学难点:利用机理分析建模微分方程模型,通过举例,结合图形以及与恰当的假设突破教学难点.1微分方程相关函数(命令)及简介因为没有一种算法可以有效地解决所有的ODE 问题,为此,Matlab 提供了多种求解器Solver,对于不同的ODE 问题,采用不同的Solver.阶常微分方程(组)的初值问题的解的 Matlab 的常用程序,其中:ode23 采用龙格-库塔2 阶算法,用3 阶公式作误差估计来调节步长,具有低等的精度.ode45 则采用龙格-库塔4 阶算法,用5 阶公式作误差估计来调节步长,具有中等的精度.2 求解微分方程的一些例子2.1 几个可以直接用 Matlab 求微分方程精确解的例子:例1:求解微分方程22x xe xy dxdy-=+,并加以验证. 求解本问题的Matlab 程序为:syms x y %line1 y=dsolve('Dy+2*x*y=x*exp(-x^2)','x') %line2 diff(y,x)+2 *x*y-x*exp(-x^2) %line3 simplify(diff(y,x)+2*x*y-x*exp(-x^2)) %line4说明:(1) 行line1是用命令定义x,y 为符号变量.这里可以不写,但为确保正确性,建议写上;(2) 行line2是用命令求出的微分方程的解:1/2*exp(-x^2)*x^2+exp(-x^2)*C1(3) 行line3使用所求得的解.这里是将解代入原微分方程,结果应该为0,但这里给出:-x^3*exp(-x^2)-2*x*exp(-x^2)*C1+2*x*(1/2*exp(-x^2)*x^2+exp(-x^2)*C1)(4) 行line4 用 simplify() 函数对上式进行化简,结果为 0, 表明)(x y y =的确是微分方程的解.例2:求微分方程0'=-+x e y xy 在初始条件e y 2)1(=下的特解,并画出解函数的图形.求解本问题的 Matlab 程序为: syms x yy=dsolve('x*Dy+y-exp(x)=0','y(1)=2*exp(1)','x') ezplot(y)微分方程的特解为:y=1/x*exp(x)+1/x* exp (1) (Matlab 格式),即xe e y x+=,此函数的图形如图 1:图1 y 关于x 的函数图象2.2 用ode23、ode45等求解非刚性的标准形式的一阶常微分方程(组)的初值问题的数值解(近似解).例3:求解微分方程初值问题⎪⎩⎪⎨⎧=++-=1)0(2222y xx y dx dy 的数值解,求解范围为区间[0, 0.5].fun=inline('-2*y+2*x^2+2*x','x','y'); [x,y]=ode23(fun,[0,0.5],1); x'; y'; plot(x,y,'o-') >> x' ans =0.0000 0.0400 0.0900 0.1400 0.1900 0.2400 0.2900 0.3400 0.3900 0.4400 0.4900 0.5000>> y' ans =1.0000 0.9247 0.8434 0.7754 0.7199 0.6764 0.6440 0.6222 0.6105 0.6084 0.6154 0.6179 图形结果为图 2.图2 y 关于x 的函数图像3 常微分在实际中的应用 3.1 导弹追踪问题1、符号说明,w ,乙舰的速率恒为v 0;设时刻t 乙舰的坐标为((),())X t Y t ,导弹的坐标为((),())x t y t ;当零时刻,((0),(0))(1,0)X Y =,((0),(0))(0,0)x y =.建立微分方程模型.202,01(0)0,'(0)0v d yk x dx w y y ⎧⎪⎪= =<<⎨⎪⎪==⎩由微分方程模型解得11(1)(1)11(),12(1)2(1)2(1)2(1)k k x x y x k k k k k +-+--=-+-≠+-+-++代入题设的数据1/5k =,得到导弹的运行轨迹为4655555(1)(1)81224y x x =--+-+当1=x 时245=y ,即当乙舰航行到点)245,1(处时被导弹击中. 被击中时间为:00245v v y t ==. 若v 0=1, 则在t =0.21处被击中. 利用MALAB 作图如图3.clear, x=0:0.01:1; y=-5*(1-x).^(4/5)/8+5*(1-x).^(6/5)/12+5/24; plot(x,y,'*')图3导弹运行轨迹(解析法) 图4两种方法对比的导弹运行轨迹2、数值方法求解.设导弹速率恒为w ,则得到参数方程为⎪⎪⎩⎪⎪⎨⎧--+-=--+-=)()()()()()(2222y Y y Y x X wdt dy x X y Y x X w dt dx因乙舰以速度0v 沿直线1x =运动,设01v =,5,1,w X Y t ===,因此导弹运动轨迹的参数方程为:⎪⎪⎪⎩⎪⎪⎪⎨⎧==--+-=--+-=0)0(,0)0()()()1(5)1()()1(52222y x y t y t x dtdyx y t x dt dxMATLAB 求解数值解程序如下,结果见图4 t0=0,tf=0.21;[t,y]=ode45('eq2',[t0 tf],[0 0]); X=1;Y=0:0.001:0.21;plot(X,Y,'-') plot(y(:,1),y(:,2),'*'),hold onx=0:0.01:1; y=-5*(1-x).^(4/5)/8+5*(1-x).^(6/5)/12+5/24; plot(x,y,'r')很明显数值计算的方法比较简单而且适用. 3.2 蚂蚁追击问题(1)建立平面直角坐标系.以正多边形的中心为原点, 设正多边形的一个顶点为起始点, 连接此点和原点作x 轴. 根据x 轴作出相应的y 轴; 选取足够小的t ∆进行采样.(2)在每一时刻t ,计算每只蚂蚁在下一时刻t t +∆时的坐标.不妨设甲追逐对象是乙,在时间t 时,甲的坐标为A 11(,)x y ,乙的坐标为B 22(,)x y .甲在t t +∆时在'A 点(如图1), 其坐标为11(cos ,sin )x v t y v t θθ+∆+∆,其中2221212121cos ,sin ,()()x x y yd x x y y d dθθ--===-+-. 同理,依次计算下一只蚂蚁在t t +∆时的坐标.通过间隔t ∆进行采样,得到新一轮各个蚂蚁在一个新的正多边形位置坐标.(4)重复2)步,直到d 充分小为止.(5)连接每只蚂蚁在各时刻的位置,就得到所求的轨迹.用MALAB 求解并作图,函数zhuJi(x,y)在附录一定义,如图6 t=[1:8]; s=7*exp(t.*2*pi/length(t)*i); x=real(s); y=imag(s);zhuJi(x,y)图6当蚂蚁为7只时的图形习题1. 求微分方程0sin 2')1(2=-+-x xy y x 的通解.2. 求微分方程x e y y y x sin 5'2''=+-的通解.3. 求微分方程组'A 11,(,)A x y 22,(,)B x y dθ图1 在采样时间内,相连蚂蚁追击⎪⎪⎩⎪⎪⎨⎧=-+=++00y x dtdy y x dtdx在初始条件0|,1|00====t t y x 下的特解,并画出解函数()y f x =的图形.4. 分别用 ode23、ode45 求上述第 3 题中的微分方程初值问题的数值解(近似解),求解区间为[0,2]t ∈.利用画图来比较两种求解器之间的差异.4 参考文献:[1] Mastering Matlab 6, D. Hanselman, B. Littlefield, 清华大学出版,2002[2] 赵静等编.数学建模与数学实验(第3版).北京:高等教育出版社.2008. [3] 姜启源编. 数学模型(第二版).北京:高等教育出版社.1993.[4] 石勇国. 蚂蚁追击问题与等角螺线. 宜宾学院学报. 2008,(6): 23-25. [5] 张伟年,杜正东,徐冰.常微分方程.北京:高等教育出版社.2006.5 附录附录一:zhuji(x,y)的M 文件 function zhuji(x,y) clf v=1; dt=0.05;x(length(x)+1)=x(1);y(length(y)+1)=y(1); plot(x,y,'*') holdfor it=1:1000for i=1:length(x)-1d=sqrt((x(i)-x(i+1))^2+(y(i)-y(i+1))^2); x(i)=x(i)+v*dt*(x(i+1)-x(i))/d; y(i)=y(i)+v*dt*(y(i+1)-y(i))/d; endplot(x,y,'.') hold onx(length(x))=x(1); y(length(y))=y(1); end。
使用Matlab进行微分方程求解的方法

使用Matlab进行微分方程求解的方法引言微分方程是数学中非常重要的一部分,广泛应用于物理、经济、工程等领域。
对于大部分微分方程的解析解往往难以求得,而数值解法则成为了一种常用的解决手段。
Matlab作为一种强大的科学计算软件,也提供了丰富的工具和函数用于求解微分方程,本文将介绍一些常见的使用Matlab进行微分方程求解的方法。
一、数值求解方法1. 欧拉方法欧拉方法是最简单的一种数值求解微分方程的方法,它将微分方程的微分项用差分的方式进行近似。
具体的公式为:y(n+1) = y(n) + hf(x(n), y(n))其中,y(n)表示近似解在第n个点的值,h为步长,f(x, y)为微分方程的右端项。
在Matlab中使用欧拉方法进行求解可以使用ode113函数,通过设定不同的步长,可以得到不同精度的数值解。
2. 中点法中点法是较为精确的一种数值求解微分方程的方法,它的计算公式为:k1 = hf(x(n), y(n))k2 = hf(x(n) + h/2, y(n) + k1/2)y(n+1) = y(n) + k2中点法通过计算两个斜率的平均值来得到下一个点的值,相较于欧拉方法,中点法能提供更精确的数值解。
3. 4阶龙格库塔法龙格库塔法是一类高阶数值求解微分方程的方法,其中4阶龙格库塔法是最常用的一种。
它的计算公式为:k1 = hf(x(n), y(n))k2 = hf(x(n) + h/2, y(n) + k1/2)k3 = hf(x(n) + h/2, y(n) + k2/2)k4 = hf(x(n) + h, y(n) + k3)y(n+1) = y(n) + (k1 + 2k2 + 2k3 + k4)/64阶龙格库塔法通过计算多个斜率的加权平均值来得到下一个点的值,相较于欧拉方法和中点法,它的精度更高。
二、Matlab函数和工具除了可以使用以上的数值方法进行微分方程求解之外,Matlab还提供了一些相关的函数和工具,方便用户进行微分方程的建模和求解。
用MATLAB求解微分方程及微分方程组

例 3 求微分方程组的通解. dx dt 2 x 3 y 3 z dy 4 x 5 y 3z dt dz 4 x 4 y 2 z dt
任取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
0.2573]
0
2
46Leabharlann 81012
14
16
18
模型2:慢速饮酒时,体液中酒精含量的变化率
dx k2 x a dt x(0) 0
其中
M a T
M为饮酒的总量,T为饮酒的时间
则有;
a x (1 e k 2 t ) k2
5 5 ) 处时被导弹击中. 当 x 1时 y ,即当乙舰航行到点 (1, 24 24 y 5 被击中时间为: t . 若 v0=1, 则在 t=0.21 处被击中. v0 24v0
轨迹图如下
例: 饮酒模型
模型1:快速饮酒后,胃中酒精含量的变化率
dy k1 y dt y (0) M
5 5 ) 处时被导弹击中. 当 x 1时 y ,即当乙舰航行到点 (1, 24 24 y 5 被击中时间为 : t . 若 v0=1, 则在 t=0.21 处被击中. v0 24v0
用Matlab求解微分方程

解微分⽅程有两种解,⼀种是解析解,⼀种是数值解,这两种分别对应不同的解法利⽤dsolve 函数进⾏求解syms x;s = dsolve('eq1,eq2,...', ’cond1,cond2,...', 'v');%eq :微分⽅程%cond :条件%v :独⽴变量%形如:⽅程:y'= f(t,y),初值:y(t0) = y0dsolve('Du = 1+ u^2','t')ans =tan(C2 + t)1i-1i求的解析解s = dsolve('D2y=3*y+2*x','x');% D2y ⽤以表⽰y 的⼆阶导数,默认是以t 为⾃变量的,所以最好指明⾃变量为x.syms y(x);s = dsolve([diff(y,x,2) == 3*y+2*x], [y(0) == 5])% diff 内依次是函数、⾃变量、微分阶数,⽅程⽤==表⽰相等⽽不是赋值求初值问题s = dsolve('Dy = y - 2*t / y','y(0) =1');求边界问题s = dsolve('x*D2y - 3*Dy =x^2','y(1)=0','y(5) = 0','x');求解⽅程s=dsolve('D2y =cos(2*x) - y','y(0) =1','Dy(0) = 0','x');simplify(s);(eqn,cond,‘IgnoreAnalyticConstraints’,false) %设置不化简结果求解⽅程组[f,g]= dsolve('Df = f + g','Dg = -f + g','f(0)=1','g(0) = 2','x');⽤Matlab 求解微分⽅程⽤Matlab 求解微分⽅程解析解1.求解析解2.初值问题3.边界问题4.⾼阶⽅程5.⽅程组问题⼀些例⼦dsolve('D2y+4*Dy+29*y = 0','y(0) = 0','Dy(0)= 15 ','x')ans =3*sin(5*x)*exp(-2*x)[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 =C7*exp(2*t) + C8*exp(-t)y =C7*exp(2*t) + C8*exp(-t) + C9*exp(-2*t)z =C7*exp(2*t) + C9*exp(-2*t)%可以对其进⾏简化操作x = simplify(x)x = C7*exp(2*t) + C8*exp(-t)y = simplify(y)y =exp(-2*t)*(C9 + C8*exp(t) + C7*exp(4*t))%龙格库塔法(Runge-Kutta 法)xfun=@(t,x)0.3.*x.*(1-x/8); %定义赋值函数r=0.3,k=8[tout,xout]=ode45(fun,[0,40],0.1) %⽅程数值解,四五阶RK 法[tout,xout]=ode23(xfun,[t0,tfinal],x0) %⼆三阶RK 法%%ode 系列数值求解形如 / = ( , )的微分⽅程组, 并绘图。
matlab_微分方程求解

解
du 的通解. = 1 + u 2 的通解 dt 输入命令: 输入命令:u=dsolve('Du=1+u^2','t')
结果:u = tan (t+c1)
例如求下例微分方程的特解。 例如求下例微分方程的特解。
dy = e x , y (0) = e dx
命令窗口中输入: 在Matlab命令窗口中输入: 命令窗口中输入 y=dsolve('Dy=exp(x)','y(0)=exp(1)','x') 输出结果为: 输出结果为: y =exp(x)-1+exp(1) 如想画出函数在自变量x在区间 如想画出函数在自变量 在区间 [-10,10]的函数图像,可在 的函数图像, 的函数图像 命令窗口中输入: 命令窗口中输入: ezplot(y,[-10,10])
例2
求微分方程的特解. 求微分方程的特解
d 2 y dy 2 + 4 + 29 y = 0 dx dx y (0) = 0, y ' (0) = 15
输入命令: 解 输入命令 y=dsolve('D2y+4*Dy+29*y=0','y(0)=0,Dy(0)=15','x') 结 果 为 : y =3*exp(-2*x)*sin(5*x) 作图命令: 作图命令:ezplot(y,[1.0,4])
1、微分方程的解析解 、
求微分方程( 求微分方程(组)的解析解命令: 的解析解命令 dsolve(‘方程 ‘方程 方程1’, 方程 方程2’,…‘方程 ‘初始条件’, ‘自变量’) 方程n’, 初始条件 初始条件’ 自变量 自变量’ 方程 方程
Matlab软件求解微分方程_170419

matlab函数定义格式总结matlab中函数定义的一些内容:1, 函数定义格式在matlab中应该做成M文件,文件名要和你文件里的function后面的函数名一致在File新建一个M-file在M-file里编辑函数格式为:function [输出实参表]=函数名(输入实参数)注释部分函数体语句return语句(可以有可以没有)如果是文件中的子函数,则可以任意取名,也可以在同一个文件中定义多个子函数例:function [max,min]=mymainfun(x) %主函数n=length(x);max=mysubfun1(x,n);min=mysubfun2(x);function r=mysubfun1(x,n) %子函数1x1=sort(x);function r=mysubfun2(x) %子函数2x1=sort(x);r=x1(1);Matlab自定义函数的五种方法1、函数文件+调用命令文件:需单独定义一个自定义函数的M文件;2、函数文件+子函数:定义一个具有多个自定义函数的M文件;3、Inline:无需M文件,直接定义;4、Syms+subs:无需M文件,直接定义;5、字符串+subs:无需M文件,直接定义.1、函数文件+调用函数文件:定义多个M文件:%调用函数文件:myfile.mclearclcfor t=1:10y=mylfg(t);fprintf(‘M^(1/3)=%6.4f\n’,t,y);end%自定义函数文件: mylfg.mfunction y=mylfg(x) %注意:函数名(mylfg)必须与文件名(mylfg.m)一致Y=x^(1/3);注:这种方法要求自定义函数必须单独写一个M文件,不能与调用的命令文件写在同一个M文件中。
2、函数文件+子函数:定义一个具有多个子函数的M文件%命令文件:funtry2.mfunction []=funtry2()y=lfg2(t)fprintf(‘M^(1/3)=%6.4f\n’);Endfunction y=lfg2(x)Y= x^(1/3);%注:自定义函数文件funtry2.m中可以定义多个子函数function。
Matlab微分方程的解法

-0.5
-0.55
-0.6
-0.65
-0.7
-0.75
-0.8
-0.85
-0.9
-0.95
-1
0
0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9
1
time t0=0,tt=1
图3 给定新的初始数据,由函数xprim2定义的ODE解的图形
(d) 求解下面方程组并不难:
x x x x ì ' = - 0.1
在下面的初值问题中,有两个未知函数:x1(t)和x2(t),并用以下式子表达其微... 页码,1/11
Matlab关于微分方程的解法
MATLAB使用龙格-库塔-芬尔格(Runge-Kutta-Fehlberg)方法来解ODE问题。在有限点内计算求解。而 这些点的间距有解的本身来决定。当解比较平滑时,区间内使用的点数少一些,在解变化很快时,区间内应使 用较多的点。 为了得到更多的有关何时使用哪种解法和算法的信息,推荐使用helpdesk。所有求解方程通用的语法或句法在 命令集中头两行给出。时间间隔将以向量t=[t0,tt]给出。 命令ode23可以求解(2,3)阶的常微分方程组,函数ode45使用(4,5)阶的龙格-库塔-芬尔格方法。注意,在这种情 况下x’是x的微分不是x的转置。 在命令集中solver将被诸如ode45函数所取代。
0.6
0.55
0.5
0
0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9
1
time t0=0,tt=1
图1 由函数xprim1定义的ODE解的图形
(b) 解下面的ODE过程是等价的:
ïíìx' = x2
ïîx(0) = 1
如何使用MATLAB求解微分方程学习资料

如何使用MATLAB求解微分方程学习资料MATLAB是一种强大的数值计算和科学编程平台,可以用于求解微分方程和微分方程组。
在使用MATLAB求解微分方程之前,需要掌握一些基础知识,包括MATLAB的基本语法和常用的求解微分方程的技术。
下面是一些学习资料和步骤,帮助您使用MATLAB求解微分方程。
1.学习MATLAB基本语法和操作:首先,您需要学习MATLAB的基本语法和常用操作。
您可以参考MATLAB的官方文档、教程和手册,以及MATLAB的在线资源和视频教程。
这些资源可以帮助您掌握MATLAB的基本操作,建立良好的编程习惯。
2.学习求解微分方程的方法:在使用MATLAB求解微分方程之前,您需要了解一些常用的求解微分方程的方法,例如数值方法和解析方法。
数值方法包括欧拉法、龙格-库塔法、四阶龙格-库塔法等;解析方法包括分离变量法、线性微分方程的常系数齐次法和非齐次法等。
您可以参考微积分的教科书、在线资源和视频教程,掌握这些方法。
3. 使用MATLAB求解一阶微分方程:一阶微分方程是最简单的微分方程形式。
您可以首先尝试使用MATLAB求解一阶微分方程。
MATLAB提供了几个函数来求解一阶微分方程,例如ode45、ode23、ode113等。
您可以使用这些函数来解决特定的一阶微分方程,并观察结果。
可以使用plot 函数绘制微分方程的解,以获得更直观的理解。
4.使用MATLAB求解高阶微分方程:一旦您熟悉了使用MATLAB求解一阶微分方程的方法,您可以尝试使用同样的方法来求解高阶微分方程。
在求解高阶微分方程时,您需要将其转化为一组一阶微分方程。
例如,对于二阶线性微分方程,您可以引入一个新的变量来表示未知函数的导数,然后将其转化为一组一阶微分方程。
然后,您可以使用相同的求解函数来求解这组一阶微分方程。
5. 使用MATLAB求解微分方程组:对于多元微分方程组,MATLAB提供了更多的函数来求解。
例如,ode45s可以用于求解刚体动力学方程,ode23t可以用于求解刚体动力学方程。
matlab求微分方程组的解析解

matlab求微分方程组的解析解(实用版)目录1.引言2.MATLAB 求微分方程组的解析解的方法3.示例:求解一阶微分方程组4.示例:求解二阶微分方程组5.总结正文一、引言微分方程组在数学建模和实际问题中有着广泛的应用,求解微分方程组对于理解问题的内在机制和预测未来发展趋势具有重要意义。
在众多数学软件中,MATLAB 凭借其强大的数值计算和图形绘制功能,成为求解微分方程组的常用工具。
本文将介绍如何使用 MATLAB 求解微分方程组的解析解。
二、MATLAB 求微分方程组的解析解的方法MATLAB 求解微分方程组的解析解主要依赖于符号计算函数和数值计算函数。
其中,符号计算函数主要用于求解微分方程组的解析解,数值计算函数则用于求解微分方程组的数值解。
在使用这些函数时,需要确保符号计算和数值计算的顺序,以避免计算错误。
三、示例:求解一阶微分方程组考虑如下一阶微分方程组:```dy/dx = x + ydz/dx = x - z```我们可以使用 MATLAB 的符号计算函数`symfun`和`symvar`来求解该方程组。
首先,定义符号变量 x、y、z 和 p(表示参数),然后使用`symfun`函数创建微分方程组的符号表达式。
接着,利用`symvar`函数求解微分方程组,并将结果转换为数值形式。
最后,使用`plot`函数绘制解的图形。
四、示例:求解二阶微分方程组考虑如下二阶微分方程组:```x"" + 3x" + 2x = 0y"" + 3y" + 2y = 0```我们可以使用 MATLAB 的符号计算函数`symfun`和`symvar`来求解该方程组。
首先,定义符号变量 x、y 和 p(表示参数),然后使用`symfun`函数创建微分方程组的符号表达式。
接着,利用`symvar`函数求解微分方程组,并将结果转换为数值形式。
最后,使用`plot`函数绘制解的图形。
利用matlab代码循环定步长求解微分方程

一、概述微分方程是描述自然界现象和工程问题最常用的数学模型之一。
在工程和科学领域中,求解微分方程是一项至关重要的工作,通常该过程可能比较繁琐。
本文将利用MATLAB代码对微分方程进行求解,通过循环定步长的方法,得到更精确的解析结果。
二、微分方程的求解微分方程在工程和科学领域中具有广泛的应用,例如在物理、化学、生物、经济学、电子工程等领域。
通常,微分方程可以表示为:dy/dx = f(x, y)其中,y是未知函数,x是自变量,f(x, y)是已知的函数。
为了求解微分方程,需要确定初始条件y(x0) = y0,其中x0和y0是已知的数值。
如果微分方程是线性的,通常可以通过解析方法求解。
但如果微分方程是非线性的,就必须借助数值计算工具来求解。
三、MATLAB代码的循环定步长方法MATLAB是一款功能强大的数学软件,具有丰富的数值计算函数和工具箱。
利用MATLAB编写代码求解微分方程,可以有效地提高计算的准确性和效率。
下面是利用MATLAB代码的循环定步长方法求解微分方程的一般步骤:1. 定义微分方程在MATLAB中定义微分方程的函数形式,例如:function dydx = myode(x, y)dydx = ...end2. 设定初始条件在MATLAB中设定微分方程的初始条件,例如:x0 = ...y0 = ...3. 设定步长和终止条件设定求解微分方程的步长和终止条件,例如:h = ...xfinal = ...4. 循环求解微分方程利用for循环或while循环,对微分方程进行迭代求解,直到达到终止条件。
在每一步中,将当前得到的结果保存下来,更新x和y的值。
5. 绘制结果利用MATLAB的绘图函数,绘制微分方程的解曲线。
可以通过绘制不同步长下的解曲线,分析步长对结果的影响。
四、案例分析以一阶非线性微分方程dy/dx = x^2 + y^2为例,使用MATLAB代码的循环定步长方法求解。
我们定义微分方程的函数形式:function dydx = myode(x, y)dydx = x^2 + y^2;end设定初始条件:x0 = 0;y0 = 1;设定步长和终止条件:h = 0.1;xfinal = 1;利用循环定步长方法求解微分方程:x = x0;y = y0;while x < xfinalk1 = h * myode(x, y);k2 = h * myode(x + h/2, y + k1/2);k3 = h * myode(x + h/2, y + k2/2);k4 = h * myode(x + h, y + k3);y = y + 1/6 * (k1 + 2*k2 + 2*k3 + k4);x = x + h;disp([x, y]);end绘制微分方程的解曲线:x = x0:h:xfinal;y = ...;plot(x, y);五、总结通过MATLAB代码的循环定步长方法,能够有效地求解微分方程并得到精确的解析结果。
matlab微分方程组的解法

一、引言1.1 MATLAB在微分方程组求解中的应用MATLAB作为一种强大的数学工具,被广泛应用于微分方程组的求解与模拟分析。
1.2 本文的研究目的和意义本文旨在探讨MATLAB在求解微分方程组方面的应用方法,帮助读者更好地理解和运用MATLAB进行微分方程组的解法,从而提高数学建模和工程仿真的效率与精度。
二、微分方程组的基本概念2.1 微分方程组的定义微分方程组是由多个未知函数及其偏导数构成的方程组。
常见的微分方程组可以分为线性微分方程组与非线性微分方程组。
2.2 微分方程组的求解方法求解微分方程组的方法包括解析解法、数值解法和符号解法。
而MATLAB在微分方程数值解法中具有独特的优势。
三、MATLAB在微分方程组求解中的基本操作3.1 MATLAB中微分方程组的表示在MATLAB中,微分方程组可以使用符号表达式或者函数形式表示,便于进行数值求解和仿真分析。
3.2 MATLAB中微分方程组的数值求解利用MATLAB中的ode45、ode23等求解微分方程组的函数,可以快速地求得微分方程组的数值解,并且可以灵活地控制求解的精度和速度。
3.3 MATLAB中微分方程组的图像绘制MATLAB提供了丰富的绘图函数,能够直观地展现微分方程组的数值解,帮助用户更直观地理解微分方程组的解法结果。
四、 MATLAB在微分方程组求解中的应用实例4.1 简单的线性微分方程组求解通过一个简单的线性微分方程组的求解实例,展示MATLAB在微分方程组求解中的基本操作和方法。
4.2 复杂的非线性微分方程组求解通过一个包含非线性项的微分方程组求解实例,展示MATLAB在处理复杂微分方程组时的应用能力。
五、MATLAB在微分方程组求解中的进阶应用5.1 高阶微分方程组的数值求解MATLAB可以利用符号运算工具箱对高阶微分方程组进行符号求解,也可以通过数值求解的方式得到高阶微分方程组的数值解。
5.2 特定约束条件下的微分方程组求解MATLAB可以通过引入特定的约束条件,对微分方程组进行求解,满足实际应用中的各种约束条件。
matlab 求解常微分方程组

一、概述随着科技的发展,数学在各个领域中都扮演着非常重要的角色。
微分方程作为数学中的一个重要分支,在物理、工程、生物等领域都有着广泛的应用。
而 MATLAB 作为一个强大的数学软件工具,可以帮助我们快速高效地求解各种类型的微分方程组,从而为各领域的研究和应用提供有力的支持。
本文将详细介绍如何使用 MATLAB 求解常微分方程组的方法及步骤。
二、常微分方程组的定义常微分方程组是指这样一类微分方程组:一个或多个未知函数及其导数的方程组。
一般形式为:dx1/dt=f1(t,x1,x2,...,xn),dx2/dt=f2(t,x1,x2,...,xn),..., dxn/dt=fn(t,x1,x2,...,xn)。
其中x1,x2,...,xn 是未知函数,t是自变量,f1,f2,...,fn 是关于 t 和x1,x2,...,xn 的已知函数。
三、求解常微分方程组的方法MATLAB 提供了多种方法来求解常微分方程组,常用的方法有:欧拉法、四阶龙格库塔法、常微分方程组函数 ode45、ode23、ode113 等。
下面将分别介绍各种方法的具体步骤。
四、使用欧拉法求解常微分方程组欧拉法是一种简单粗糙的数值解法,通过分割等间距的步长满足微分方程初值问题。
其具体步骤如下:1. 定义微分方程组的初始条件和步长:x0=[x1(0),x2(0),...,xn(0)],h=步长。
2. 使用欧拉法逐步逼近微分方程组的解:for i=1:Nt(i)=t(i-1)+h;x(:,i+1)=x(:,i)+h*f(t(i),x(:,i));end其中 x(:,i)=[x1(i),x2(i),...,xn(i)] 为微分方程组在第 i 个时间节点的解。
五、使用四阶龙格库塔法求解常微分方程组四阶龙格库塔法是一种常用的数值解法,通过多次近似来计算微分方程组的数值解。
其具体步骤如下:1. 定义微分方程组的初始条件和步长:x0=[x1(0),x2(0),...,xn(0)],h=步长。
matlab求解微分方程组

matlab求解微分方程组
Matlab 是一种非常强大的工具,可以用来求解各种微分方程组。
它可以解决复杂的微分方程组,有助于我们快速获得精确的解决方案。
Matlab 提供了一系列函数,用于求解微分方程组。
其中最常用的
函数是 ode45、ode15s 和 ode23s。
它们可以用来求解常微分方程组,也可以用来求解非线性方程组。
首先,我们需要准备好微分方程组的初始条件。
然后,我们可以
使用 Matlab 的 ode45 函数来求解微分方程组。
ode45 函数可以求
解常微分方程组,它使用 Runge-Kutta 方法来求解方程组。
使用 ode45 函数求解微分方程组的步骤如下:
1. 首先,我们需要准备好微分方程组的初始条件,并将其输入到Matlab 中。
2. 然后,我们需要定义一个 Matlab 函数,用于定义微分方程组。
3. 接下来,我们可以使用 ode45 函数来求解微分方程组。
ode45 函数的第一个参数是 Matlab 函数,用于定义微分方程组;第二个参数是初始条件;第三个参数是微分方程组的解的范围。
4. 最后,我们可以使用 Matlab 的 plot 函数来绘制微分方程组的解。
Matlab 提供了很多有用的函数,可以用来求解微分方程组。
它的运算速度快,可以让我们获得更准确的解决方案。
使用 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 =++++--若上式中的系数ni t a i ,,2,1),( =均与t 无关,称之为常系数。
2.常微分方程的解析解有些微分方程可直接通过积分求解.例如,一解常系数常微分方程1+=y dt dy可化为dt y dy=+1,两边积分可得通解为1-=tce y .其中c 为任意常数.有些常微分方程可用一些技巧,如分离变量法,积分因子法,常数变异法,降阶法等可化为可积分的方程而求得解析解.线性常微分方程的解满足叠加原理,从而他们的求解可归结为求一个特解和相应齐次微分方程的通解.一阶变系数线性微分方程总可用这一思路求得显式解。
高阶线性常系数微分方程可用特征根法求得相应齐次微分方程的基本解,再用常数变异法求特解。
一阶常微分方程与高阶微分方程可以互化,已给一个n 阶方程),,",',()1()(-=n n y y y t f y设)1(21,,',-===n n y y y y y y ,可将上式化为一阶方程组⎪⎪⎪⎩⎪⎪⎪⎨⎧====-),,,,(''''2113221n n nn y y y t f y yy y y y y反过来,在许多情况下,一阶微分方程组也可化为高阶方程。
MATLAB求解常微分方程

的数值解, x1 (0) = 1, x1 (0) = 1, x 2 (0) = 2, x 2 (0) = 2 ,并绘制出轨迹曲线。
引入 u1 = x1 , u 2 = x1 , u 3 = x 2 , u 4 = x 2 , 可写出如下的隐式方程标准型为
• •
•
•
• u1 − u 2 = 0 • 2 • − u3 2 2 2 sin( ) + 5 =0 u u u u u 2 4 1 3 2 u 4 cos(u1 ) + t u1u 3 − e • 可用下面的程序求解: u 3 − u 4 = 0 • u u + u• u sin(u 2 ) + cos(u• u ) − sin t = 0 4 2 1 4 3 2 3
x ' = − y − z y ' = x + ay 将 a,b,c 作为附加参数, 给定微分方程组 z ' = b + ( x − c) z
选定 a=0.2,b=0.5,c=10 时,绘制出状态变量的三维图。
用下面的程序求解:
f=inline('[-x(2)-x(3);x(1)+a*x(2);b+(x(1)-c)*x(3)]',... 't','x','flag','a','b','c');%flag不可省去,用于占位 [t,x]=ode45(f,[0,100],[0;0;0],[],0.2,0.5,10); plot3(x(:,1),x(:,2),x(:,3));grid
Hale Waihona Puke = e −5t cos(2t + 1) + 5 , 试求出下面微分方
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
模型1:快速饮酒后,胃中酒精含量的变化率
dy dt
k1 y
y(0) M
即 y Me k1t
模型2:快速饮酒后,体液中酒精含量的变化率
dx dt
k2
x
k1Mek1t
x(0) 0
用Matlab求解模型2: syms x y k1 k2 M t x=dsolve('Dx+k2*x=k1*M*exp(-k1*t)','x(0)=0','t')
时间(小时) 6
78
9 10 11 12 13 14
酒精含量 38 35 28 25 18 15 12 10 7
M=64000/490 =130.6122 (毫克/百毫升)
15 16 74
建立函数文件: function f=curvefun1(k,t) f=k(1)*64000/490*(exp(-k(2)*t)-exp(-k(1)*t))/(k(1)-k(2)) 输入拟合数据:
两边对x求导得模型:
(1 x) y" 1 5
1 y'2
(3)
初值条件为: y(0) 0 y'(0) 0
解即为导弹的运行轨迹:y源自5(1
x)
4 5
5
6
(1 x) 5
5
8
12
24
当 x 1时 y 5 ,即当乙舰航行到点 (1, 5 ) 处时被导弹击中.
24
24
被击中时间为: t
y=0:0.01:.2;
plot(1,y,'b*')
结论: 导弹大致在(1,0.2)处击中乙舰
当 x 1时 y 5 ,即当乙舰航行到点(1, 5 ) 处时被导弹击中.
24
24
被击中时间为:t y v0
5 24v0
.
若 v0=1,
则在 t=0.21 处被击中.
轨迹图如下
例: 饮酒模型
dy=zeros(2,1);
dy(1)=y(2);
dy(2)=1/5*sqrt(1+y(1)^2)/(1-x);
2. 取x0=0,xf=1.5,建立主程序ff6.m如下:
x0=0;xf=1.5;
[x,y]=ode45('eq1',[x0 xf],[0 0]);
plot(x,y(:,1),'b.')
hold on
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:分别为设定的相对误差和绝对误差.
注意:
1、在解n个未知函数的方程组时,x0和x均为n维向量, m-文件中的待解方程组应以x的分量形式写成.
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
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的图形为“+”线.
3z 3z 2z
dt
解 输入命令 :
[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
y2
'
1000(1
y12
)
y2
y1
2 1.5
y1(0) 2, y2 (0) 0
1 0.5
0
1、建立m-文件vdp1000.m如下:
-0.5
-1
function dy=vdp1000(t,y)
-1.5
dy=zeros(2,1);
-2
-2.5
0
dy(1)=y(2);
dy(2)=1000*(1-y(1)^2)*y(2)-y(1);
运行结果: M*k1/(-k1+k2)*exp(-k2*t+t*(-k1+k2))-exp(-k2*t)*M*k1/(-k1+k2)
即:
x Mk1 (ek2t ek1t ) k1 k2
用以下一组数据拟合上述模型中的参数k1、k2:
时间(小时) 0.25 0.5 0.75 1 1.5 2 2.5 3 3.5 4 4.5 5 酒精含量 30 68 75 82 82 77 68 68 58 51 50 41
解 输入命令: y=dsolve('D2y+4*Dy+29*y=0','y(0)=0,Dy(0)=15','x') 运行结果为 : y =3e-2xsin(5x)
例 3 求微分方程组的通解.
dx
dt dy
dt dz
2x 4x 4x
3y 5y 4y
输入命令: k=lsqcurvefit('curvefun1',k0,t,c) 运行结果为: k =[ 1.3240 0.2573]
作图表示求解结果: 90
80
t1=0:0.1:18;
f=curvefun1(k,t1);
70
plot(t,c,'ko',t1,f,'r-') 60
50
40
30
20
10
0
0
2
4
6
8
10
12
14
16
18
模型2:慢速饮酒时,体液中酒精含量的变化率
dx dt
k2
x
a
x(0) 0
其中 a M T
M为饮酒的总量,T为饮酒的时间
则有; x a (1 ek2t ) k2
例如,微分方程
d2y dx2
0 应表达为:D2y=0.
例 1 求 du 1 u 2 的通解. dt
解 输入命令:dsolve('Du=1+u^2','t') 运行结果:u = tan(t-c)
例 2 求微分方程的特解.
d 2 y 4 dy 29 y 0 dx2 dx y(0) 0, y' (0) 15
导弹追踪问题
设位于坐标原点的甲舰向位于x轴上点A(1, 0)处的乙舰 发射导弹,导弹头始终对准乙舰.如果乙舰以最大的速度v0( 是常数)沿平行于y轴的直线行驶,导弹的速度是5v0,求导弹 运行的曲线方程.又乙舰行驶多远时,导弹将它击中?
解法一(解析法)
假设导弹在 t 时刻的位置为 P(x(t), y(t)),乙舰位于Q(1, v0t) .
用MATLAB求解微分方程
1. 微分方程的解析解
求微分方程(组)的解析解命令: dsolve(‘方程1’, ‘方程2’,…‘方程n’, ‘初始条件’, ‘自变量’)
记号: 在表达微分方程时,用字母 D 表示求微分,D2、D3 等 表示求高阶微分.任何 D 后所跟的字母为因变量,自变量可以指 定或由系统规则选定为确省.
y v0
5 24v0
.
若 v0=1,
则在 t=0.21 处被击中.
解法二(数值解)
令y1=y,y2=y1’,将方程(3)化为一阶微分方程组。
(1 x) y'' 1 1 y 2 5
1.建立m-文件eq1.m
y'1
y2
'
y2 1
5
1 y12
/(1 x)
function dy=eq1(x,y)
y3' 0.51y1 y2
y1(0) 0, y2 (0) 1, y3(0) 1
解 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);
2、使用Matlab软件求数值解时,高阶微分方程必须 等价地变换成一阶微分方程组.