分数阶微分方程的数值解法及其MATLAB实现
用Matlab解微分方程

用Matlab 软件求解微分方程1.解析解(1)一阶微分方程 求21y dxdy +=的通解:dsolve('Dy=1+y^2','x') 求y x dxdy -+=21的通解:dsolve('Dy=1+x^2-y','x') 求⎪⎩⎪⎨⎧=+=1)0(12y y dx dy 的特解:dsolve('Dy=1+y^2',’y(0)=1’,'x')(2)高阶微分方程 求解⎩⎨⎧-='==-+'+''.2)2(,2)2(,0)(222πππy y y n x y x y x 其中,21=n ,命令为: dsolve('x^2*D2y+x*Dy+(x^2-0.5^2)*y=0','y(pi/2)=2,Dy(pi/2)=-2/pi','x') 求042=-+'-'''x y y y 的通解,命令为:dsolve('D3y-2*Dy+y-4*x=0','x')输出为:ans=8+4*x+C1*exp(x)+C2*exp(-1/2*(5^(1/2)+1)*x)+C3*exp(1/2*(5^(1/2)-1)*x)(3)一阶微分方程组求⎩⎨⎧+-='+=').(3)(4)(),(4)(3)(x g x f x g x g x f x f 的通解:[f,g]=dsolve('Df=3*f+4*g','Dg=-4*f+3*g','x') 输出为: f =exp(3*x)*(cos(4*x)*C1+sin(4*x)*C2)g =-exp(3*x)*(sin(4*x)*C1-cos(4*x)*C2)若再加上初始条件1)0(,0)0(==g f ,则求特解:[f,g]=dsolve('Df=3*f+4*g','Dg=-4*f+3*g','f(0)=0,g(0)=1','x')输出为: f =exp(3*x)*sin(4*x)g =exp(3*x)*cos(4*x)2.数值解(1)一阶微分方程⎪⎩⎪⎨⎧=≤≤-=.1)0(,10,2y x y x y dxdy 现以步长h=0.1用“4阶龙格—库塔公式”求数值解: 先建立“函数M —文件”:function f=eqs1(x,y)f=y-2*x/y;再命令: 格式为:[自变量,因变量]=ode45(‘函数文件名’,节点数组,初始值) 命令为: [x,y]=ode45('eqs1',0:0.1:1,1)若还要画图,就继续命令: plot(x,y)(2)一阶微分方程组⎪⎩⎪⎨⎧==+-='≤≤-+='.3.0)0(,2.0)0(,2sin ,10,2cos 21212211y y y y x y x y y x y 只须向量化,即可用前面方法: function f=eqs2(x,y)f=[cos(x)+2*y(1)-y(2);sin(x)-y(1)+2*y(2)];将此函数文件,以文件名eqs2保存后,再下命令:[x,y]=ode45('eqs2',0:0.1:1,[0.2;0.3])(注:输出的y 是矩阵,第i 列为函数i y 的数值解)要画图,继续命令:hold on,plot(x,y(:,1)),plot(x,y(:,2)),hold off(3)高阶微分方程先化成一阶微分方程组,再用前面方法。
微分方程的Matlab求解ppt课件

注意: 1、在解n个未知函数的方程组时,x0和x均为n维向量,
m-文件中的待解方程组应以x的分量形式写成.
2、使用Matlab软件求数值解时,高阶微分方程必须 变换成等价的一阶微分方程组.
例4
d2x dt 2
1000(1
x2
)
dx dt
x
0
x(0) 2; x'(0) 0
解: 令 y1=x,y2=y1’
由待解 方程写 成的m-
ts=[t0,tf], t0、tf为自
函数的 初值
变量的初
文件名 值和终值
ode23:组合的2/3阶龙格-库塔-芬尔格算法 ode45:运用组合的4/5阶龙格-库塔-芬尔格算法
用于设定误差限(缺省时设定相对误差10-3, 绝对误差10-6), 命令为:options=odeset(’reltol’,rt,’abstol’,at), rt,at:分别为设定的相对误差和绝对误差.
z = (-C1+exp(4*t)*C1-2*exp(4*t)+C2+exp(4*t)*C3)*exp(-2*t)
用Matlab软件求常微分方程的数值解
[t,x]=solver(’f’,ts,x0,options)
自变 函数 量值 值
ode45 ode23 ode113 ode15s ode23s
微分方程的数值解法matlab(四阶龙格—库塔法)

解析解: x x x1 3 2(((ttt))) 0 .0 8 1 1 2 P k 8 0siw n t) (2 .6 3 0 3 3 P k 0siw n t) (0 .2 12 2 2 P k 0siw n t)(
第一个质量的位移响应时程
Y (t)A(Y t)P(t)
(2)
Y (t)A(Y t)P(t)
3. Matlab 程序(主程序:ZCX)
t0;Y0;h;N;P0,w; %输入初始值、步长、迭代次数、初始激励力;
for i = 1 : N
t1 = t0 + h
P=[P0*sin(w*t0);0.0;0.0]
%输入t0时刻的外部激励力
Van der Pol方程
% 子程序 (程序名: dYdt.m ) function Ydot = dYdt (t, Y) Ydot=[Y(2);-Y(2)*(Y(1)^2-1)-Y(1)];
或写为
function Ydot = dYdt (t, Y) Ydot=zeros(size(Y)); Ydot(1)=Y(2); Ydot(2)=-Y(2)*(Y(1).^2-1)-Y(1)];
Solver解算指令的使用格式
说明:
t0:初始时刻;tN:终点时刻 Y0:初值; tol:计算精度
[t, Y]=solver (‘ODE函数文件名’, t0, tN, Y0, tol);
ode45
输出宗量形式
y1 (t0 )
Y
y1
(t1
)
y
1
(t
2
)
y2 (t0 )
y
2
(
t1
)
y
2
(
t
用MATLAB求解微分方程及微分方程组

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 后所跟的字母为因变量,自变量可以指 定或由系统规则选定为确省. 例如,微分方程
任取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)
(3)
3.因乙舰以速度v0沿直线x=1运动,设v0=1,则w=5,X=1,Y=t
matlab微分方程数值解代码

在科学和工程领域中,微分方程数值解是一个重要而复杂的问题。
其中,MATLAB提供了强大的工具来解决微分方程的数值问题,准确而高效地解决各种类型的微分方程。
本文将通过对MATLAB微分方程数值解的探讨,帮助读者深入理解这一主题。
1. MATLAB微分方程数值解的基本概念MATLAB是一种功能强大的数学软件,它提供了各种数值计算工具,包括用于解决微分方程的函数和算法。
对于给定的微分方程,MATLAB可以通过数值方法求解其近似解。
这些数值方法包括欧拉法、梯形法、龙格-库塔法等,它们可以有效地解决常微分方程和偏微分方程的数值问题。
2. MATLAB微分方程数值解的具体应用在工程和科学领域中,微分方程数值解广泛应用于模拟和预测各种现象和系统的行为。
电路中的电压和电流的变化、机械系统的运动轨迹、化学反应的速率等都可以通过微分方程数值解来求解。
而MATLAB提供的数值解算法可以帮助工程师和科学家们有效地进行模拟和分析。
3. MATLAB微分方程数值解的代码实现在MATLAB中,可以通过编写代码来实现微分方程的数值解。
使用MATLAB的ode45函数可以很方便地对常微分方程进行求解,而pdepe函数则可以用于求解偏微分方程。
这些函数可以根据用户输入的微分方程和边界条件,自动选择合适的数值方法进行求解,从而得到精确的数值解。
4. 个人观点和理解MATLAB微分方程数值解的强大功能为工程师和科学家们提供了便利而高效的工具,帮助他们解决实际问题和开展研究工作。
通过对微分方程数值解的学习和实践,我深切体会到MATLAB在解决微分方程数值问题方面的优势和便利性,这对于我的工作和研究具有非常重要的意义。
总结回顾通过本文的探讨,我们深入了解了MATLAB微分方程数值解的基本概念、具体应用和代码实现。
作为工程师和科学家,我们可以充分利用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 %line1y=dsolve('Dy+2*x*y=x*exp(-x^2)','x') %line2diff(y ,x)+2 *x*y-x*exp(-x^2) %line3simplify(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 格式),即x e e y x+=,此函数的图形如图 1:图1 y 关于x 的函数图象2.2 用ode23、ode45等求解非刚性的标准形式的一阶常微分方程(组)的初值问题的数值解(近似解).例3:求解微分方程初值问题⎪⎩⎪⎨⎧=++-=1)0(2222y x x 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; yplot(x,y ,'o-')>> x'ans =0.0000 0.0400 0.0900 0.1400 0.1900 0.24000.2900 0.3400 0.3900 0.4400 0.4900 0.5000>> y'ans =1.0000 0.9247 0.8434 0.7754 0.7199 0.67640.6440 0.6222 0.6105 0.6084 0.6154 0.6179图形结果为图2.图2 y关于x的函数图像3 常微分在实际中的应用3.1 导弹追踪问题设位于坐标原点的甲舰向位于x轴上点A(1,0)处的乙舰发射导弹,导弹v沿平行于y轴的直线行驶,导弹的速度始终对准乙舰。
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解微分方程

matlab解微分方程
MATLAB(Matrix Laboratory,矩阵实验室)是一款用于科学、工程和统计计算的高级编程语言,它还可以用于解决微分方程问题。
下面介绍MATLAB用于求解微分方程的基本步骤:
一、数据准备
1、将微分方程转化为数学函数形式;
2、针对函数的参数定义初始值;
3、定义步长,步长是时间和空间的划分。
二、建立模型
1、使用矩阵建立微分方程;
2、建立梯度,使用微分方程中状态式未知变量定义梯度函数;
3、建立随机变量和误差函数;
三、使用MATLAB求解
1、用sympy模块将方程转换成一维偏微分方程;
2、用ode45函数实现数值求解,并储存相应迭代结果;
3、用error command函数检测方程式的迭代收敛情况,还可以使用plot函数画出方程的解析解;
4、通过迭代的结果求解微分方程的数值解或者特征值;
四、总结
1、通过使用MATLAB进行微分方程的数值求解比手工求解更加的快捷和高效;
2、MATLAB中所提供的求解方法针对不同的微分方程既可以使用数值方法,也可
以使用解析方法;
3、用MATLAB解微分方程需要具备一定的数学基础,并熟悉MATLAB相关函数,能够准确解读迭代结果。
MATLAB 数值微积分与微分方程式求解

Matlab求解常微分方程式
Ex:
dy1 dt
=
y1
+
y2e−t
dy2 dt
=
− y1 y2
+ cos(t)
1. edit fun.m
function dydt=fun(t,y)
dydt(1) = y(1)+y(2)*exp(-t);
dydt(2) = -y(1)*y(2)+cos(t);
Stiff ODE 指的是其內部某些狀態響應快速,而某些則 相對具較緩慢動態
勁度
勁度系統 (stiff system)表示其具有快速變化以及緩慢變化 的部分。 勁度系統例子: dy = −1000y + 3000 − 2000e−t
dt
假使y(0)=0,其解 y = 3 − 0.998e−1000t − 2.002e−t
用前述方法求解用前述方法求解用前述方法求解用前述方法求解0010ysin??yettt21221sincosttyyyyyteeyty?????12122210100sincosttyy?yyyteeyty???????11matlabode指令matlab用于求解起始值常微分方程式問題的指令stiffode指的是其內部某些狀態響應快速而某些則相對具較緩慢動態ode23tbode23tode23sode15sstiffodeode113ode23ode45nonstiffode指令問題形式勁度勁度系統勁度系統勁度系統勁度系統stiffsystem表示其具有快速變化以及緩慢變化的部分
k4 = f (ti + h, yi + k3h)
方程式系統
許多實際的工程及科學問題需要求解的是聯立常微分方 程式系統,而不只是單一方程式。
用 Matlab 求解微分方程

方式二 输入:[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*exp(t)^2 y = C2*exp(-t)+C3*exp(2*t)+exp(-2*t)*C1 z = C3*exp(2*t)+exp(-2*t)*C1
2
例 8.5.3 求解下列微分方程组
dx dt 2 x 3 y 3 z dy 4 x 5 y 3z dt dz 4 x 4 y 2 z 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 = 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
运行程序,得到如图的结果。图中,y1 的图 形为实线, y2 的图形为“ * ”线, y3 的图形为 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
例 8.5.6 导弹追踪问题
MATLAB求解微分方程

dx y z dt dy 例( 4 Rossler方程) x ay dt dz dt b ( x c) z
选定a=0.3,b=2,c=3 初值x(0)=0,y(0)=0,z(0)=0
• a=0.3;b=2;c=3; • rossler=@(t,y)[-y(2)-y(3),y(1)+a*y(2),b+(y(1)c)*y(3)]'; • ts=[0 100];x0=[0 0 0]; • [t,y]=ode45(rossler,ts,x0); • plot(t,y(:,1),'r',t,y(:,2),'b',t,y(:,3),'g'); • figure • plot3(y(:,1),y(:,2),y(:,3)) •
d 2x 2 dx 2 1000(1 x ) x 0 例3 dt dt x(0) 2; x' (0) 0
STEP1
令 y1=x,y2=y1’
化为一阶微分方程组:
y1 ' y2 2 (1 y1 ) y2 y1 y2 ' 1000 y (0) 2, y (0) 0 1 2
• STEP2 建立M文件 • function dy=vdp(t,y) dy=[y(2); 1000*(1-y(1)^2)*y(2)-y(1);]
STEP3 调用MATLAB 函数ODE15S [T,Y]=ode15s('vdp',[0 3000],[2 0]); plot(T,Y(:,1))
用Matlab求微分方程的数值解
[t,x]=solver(’f’,ts,x0,options)
自变 量值 函数 值
matlab中的微分方程的数值积分

MATLAB是一种流行的数学软件,用于解决各种数学问题,包括微分方程的数值积分。
微分方程是许多科学和工程问题的数学描述方式,通过数值积分可以得到微分方程的数值解。
本文将介绍在MATLAB中如何进行微分方程的数值积分,以及一些相关的技巧和注意事项。
一、MATLAB中微分方程的数值积分的基本方法1. 常微分方程的数值积分在MATLAB中,常微分方程的数值积分可以使用ode45函数来实现。
ode45是一种常用的数值积分函数,它使用4阶和5阶Runge-Kutta 方法来求解常微分方程。
用户只需要将微分方程表示为函数的形式,并且提供初值条件,ode45就可以自动进行数值积分,并得到微分方程的数值解。
2. 偏微分方程的数值积分对于偏微分方程的数值积分,在MATLAB中可以使用pdepe函数来实现。
pdepe可以求解具有定解条件的一维和二维偏微分方程,用户只需要提供偏微分方程的形式和边界条件,pdepe就可以进行数值积分,并得到偏微分方程的数值解。
二、在MATLAB中进行微分方程数值积分的注意事项1. 数值积分的精度和稳定性在进行微分方程的数值积分时,需要注意数值积分的精度和稳定性。
如果数值积分的精度不够,可能会导致数值解的误差过大;如果数值积分的稳定性差,可能会导致数值解发散。
在选择数值积分方法时,需要根据具体的微分方程来选择合适的数值积分方法,以保证数值解的精度和稳定性。
2. 初值条件的选择初值条件对微分方程的数值解有很大的影响,因此在进行微分方程的数值积分时,需要选择合适的初值条件。
通常可以通过对微分方程进行分析,或者通过试验求解来确定合适的初值条件。
3. 数值积分的时间步长在进行微分方程的数值积分时,需要选择合适的时间步长,以保证数值积分的稳定性和效率。
选择时间步长时,可以通过试验求解来确定合适的时间步长,以得到最优的数值解。
三、MATLAB中微分方程数值积分的实例以下通过一个简单的例子来演示在MATLAB中如何进行微分方程的数值积分。
matlab求解微分方程组的定长数值解

matlab求解微分方程组的定长数值解使用Matlab求解微分方程组的定长数值解概述:微分方程是描述自然界中各种变化规律的重要数学工具。
在实际问题中,经常会遇到多个变量之间相互依赖的情况,这时就需要求解微分方程组。
Matlab是一种功能强大的数值计算软件,它提供了丰富的工具箱和函数,可以方便地求解微分方程组的定长数值解。
本文将介绍使用Matlab求解微分方程组的基本步骤和注意事项。
步骤:1. 定义微分方程组:首先需要定义微分方程组的方程形式。
例如,假设有一个二阶微分方程组:dx1/dt = f1(x1, x2, t)dx2/dt = f2(x1, x2, t)其中x1、x2为未知函数,t为自变量,f1、f2为已知函数。
在Matlab中,可以使用函数句柄的形式表示f1、f2,例如:f1 = @(x1, x2, t) x1 + x2 - t;f2 = @(x1, x2, t) x1 - x2 + 2*t;2. 设置初值条件:求解微分方程组需要给定初始条件。
例如,假设初始条件为x1(0) = 1,x2(0) = 2,可以使用以下代码设置:x0 = [1; 2];3. 定义求解区间:需要给定求解微分方程组的时间区间。
例如,假设求解区间为t = [0, 10],可以使用以下代码定义:tspan = [0, 10];4. 求解微分方程组:使用Matlab提供的ode45函数求解微分方程组的定长数值解。
ode45函数是一种常用的求解常微分方程初值问题的数值方法,可以自动选择合适的步长进行求解。
例如,可以使用以下代码求解微分方程组:[t, x] = ode45(@(t, x) [f1(x(1), x(2), t); f2(x(1), x(2), t)], tspan, x0);其中,@(t, x) [f1(x(1), x(2), t); f2(x(1), x(2), t)]表示微分方程组的右端项,t为自变量,x为未知函数的向量。
MATLAB解微分方程

0
500
1000 1500 2000 2500 3000
数学建模实验项目2(9)
五、实验题目
实验要求:针对下列问题,先建立数学模型,再确定模型 中的参数,并有结论。
1、求下列微分方程的解析解
(1) y′ − 2 y = x2
(2) y′ − xy = x, y(0) = 1
(3) y′′ + y′ = x, y(0) = 1, y′(0) = 1
x2
)
dx dt
−
x
=
0
x(0) = 2; x'(0) = 0
解: 令 y1=x,y2=y1’
则微分方程变为一阶微分方程组:
y2
'
=
y1'= 1000(1−
y2 y12
)y2
−
y1
y1(0) = 2, y2(0) = 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);
其中k1是药物量被吸收到血液中的速率系数,k是血液中向体外 排除的速率系数,D是刚开始胃中或肌肉中的药物总量。 试用欧拉公式求上述微分方程数值解,并画出图形。(设
k1=0.6,k=0.2,D=200)
用Matlab软件求解微分方程 的解析解和数值解
数学与信息科学学院 孔祥庆
数学建模实验项目2(1)
一、实验名称:用Matlab软件求解微分方程的解析解和数值解 二、实验目的:
掌握用Matlab软件求解微分方程模型的解析解和数值解的方法 三、实验内容
微分方程的Matlab求解ppt课件

y1' y2 y3
y2 ' y1 y3 y3' 0.51y1 y2
y1(0) 0, y2 (0) 1, y3(0) 1
解 1、建立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);
s.z x=simple(s.x) %简化结果
y=simple(s.y)
z=simple(s.z)
结 果 为:
x =-(-C1-C2*exp(-3*t)+C2-C3+C3*exp(-3*t))*exp(2*t)
y =(-C1*exp(-4*t)+C1+C2*exp(-4*t)+C2*exp(-3*t)-C2+C3-C3*exp(-3*t))*exp(2*t)
x(0) 0, y(0) 0
返回
2. 模型求解
(1) w=20时,建立m-文件如下: function dy=eq3(t,y) dy=zeros(2,1); dy(1)=20*(10+20*cos(t)-y(1))/sqrt ((10+20*cos(t)-y(1))^2+(20+15*sin(t)-y(2))^2); dy(2)=20*(20+15*sin(t)-y(2))/sqrt ((10+20*cos(t)-y(1))^2+(20+15*sin(t)-y(2))^2);
注意: 1、在解n个未知函数的方程组时,x0和x均为n维向量,
m-文件中的待解方程组应以x的分量形式写成.
2、使用Matlab软件求数值解时,高阶微分方程必须 变换成等价的一阶微分方程组.
分数阶微分方程的数值解法及其MATLAB实现

分数阶微分方程的数值解法及其MATLAB实现1.分数阶微分方程的定义和性质分数阶导数是一般导数的推广,可以用分数阶微分方程来描述分数阶导数的性质。
分数阶微分方程一般形式如下:D^αy(t)=f(t,y(t)),0<α≤1其中,α是分数阶指数,D^α是分数阶导数符号,y(t)是未知函数,f(t,y(t))是已知的函数。
2.分数阶微分方程的数值解法由于分数阶导数的定义较为复杂,常见的数值解法有两种:格点差分法和Laplace变换法。
2.1格点差分法格点差分法是将连续的分数阶导数问题离散化为离散的整数阶微分方程问题,然后利用传统的整数阶微分方程数值解法求解。
具体步骤如下:(1)将时间区间[0,T]平均分为N段,使得Δt=T/N。
(2)将分数阶导数D^α近似为整数阶导数D_m^β,其中m>α>m-1,β=m-α。
(3)将方程D^αy(t)=f(t,y(t))离散为差分方程D_m^βy(t_k)≈f(t_k,y(t_k)),其中t_k=kΔt,k=0,1,2,...,N。
(4)解差分方程,得到数值解y_k,k=0,1,2,...,N。
2.2 Laplace变换法Laplace变换法是将分数阶微分方程转化为Laplace变换形式的整数阶微分方程,然后利用Laplace变换的性质和经典的整数阶微分方程数值解法求解。
具体步骤如下:(1) 对分数阶微分方程D^αy(t) = f(t, y(t)) 进行Laplace变换,得到整数阶微分方程s^αY(s) - s^αy(0) + s^α-1Y(s) = F(s),其中Y(s) 和 F(s) 分别为 y(t) 和 f(t,y(t)) 的Laplace变换。
(2)将Y(s)和F(s)用有限差分近似替代,并将方程离散化为差分方程,得到Y_k(s)和F_k(s),其中k是离散时间步长。
(3) 解差分方程,得到 Y_k。
将 Y_k 用逆Laplace变换转换为 y_k。
matlab算法-求解微分方程数值解和解析解

MATLAB是一种用于数学计算、工程和科学应用程序开发的高级技术计算语言和交互式环境。
它被广泛应用于各种领域,尤其在工程和科学领域中被用于解决复杂的数学问题。
微分方程是许多工程和科学问题的基本数学描述,求解微分方程的数值解和解析解是MATLAB算法的一个重要应用。
1. 求解微分方程数值解在MATLAB中,可以使用各种数值方法来求解微分方程的数值解。
其中,常见的方法包括欧拉法、改进的欧拉法、四阶龙格-库塔法等。
这些数值方法可以通过编写MATLAB脚本来实现,从而得到微分方程的近似数值解。
以常微分方程为例,可以使用ode45函数来求解微分方程的数值解。
该函数是MATLAB中用于求解常微分方程初值问题的快速、鲁棒的数值方法,可以有效地得到微分方程的数值解。
2. 求解微分方程解析解除了求解微分方程的数值解外,MATLAB还可以用于求解微分方程的解析解。
对于一些特定类型的微分方程,可以使用符号计算工具箱中的函数来求解微分方程的解析解。
通过符号计算工具箱,可以对微分方程进行符号化处理,从而得到微分方程的解析解。
这对于研究微分方程的性质和特点非常有帮助,也有助于理论分析和验证数值解的准确性。
3. MATLAB算法应用举例在实际工程和科学应用中,MATLAB算法求解微分方程问题非常常见。
在控制系统设计中,经常需要对系统的动态特性进行分析和设计,这通常涉及到微分方程的建模和求解。
通过MATLAB算法,可以对系统的微分方程进行数值求解,从而得到系统的响应曲线和动态特性。
另外,在物理学、生物学、经济学等领域的建模和仿真中,也经常需要用到MATLAB算法来求解微分方程问题。
4. MATLAB算法优势相比于其他数学软件和编程语言,MATLAB在求解微分方程问题上具有明显的优势。
MATLAB提供了丰富的数值方法和工具,能够方便地对各种微分方程进行数值求解。
MATLAB具有直观的交互式界面和强大的绘图功能,能够直观地展示微分方程的数值解和解析解,有利于分析和理解问题。
Matlab 9解微分方程

Matlab 解微分方程1. 求微分方程的解析解Matlab 中提供了dsolve 函数用于解微分方程(组)需要将微分方程包含在dsolve 函数的表达式中,在表达微分方程时,用字母D 表示微分,D2、D3表示求高阶微分.任何D 后跟的字母为因变量.--------------------------------------------------------------------- 例如:求方程21u dtdu +=的通解 dsolve('Du=1+u^2','t')ans =tan(C3 + t)其中C3为常数.--------------------------------------------------------------------- 例如:求微分方程()()⎪⎩⎪⎨⎧===++150',00029422y y y dx dy dx y d 的特解. dsolve('D2y+4*Dy+29*y=0','y(0)=0,Dy(0)=15','x')ans =3*sin(5*x)*exp(-2*x)--------------------------------------------------------------------- 例如:求微分方程组⎪⎪⎪⎩⎪⎪⎪⎨⎧+-=+-=+-=z y x dt dz z y x dtdy zy x dt dx 244354332的通解. [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 =exp(-t)*(C8 + C10*exp(3*t))y =exp(-2*t)*(C9 + C8*exp(t) + C10*exp(4*t))z =exp(-2*t)*(C9 + C10*exp(4*t))---------------------------------------------------------------------2. 微分方程的数值解当难以求微分方程的数值解时,就可以求其数值解matlab 中求数值解的函数有5个:ode45,ode23,ode113,ode15s,ode23s调用格式为:[t,x]=solver(‘f ’,ts,x0,options)Solver 取上述5个函数.不同的函数代表了不同的计算方法:Ode23运用一个组个的2/3阶龙格-库塔-菲尔贝格算法.ode45运用的是4/5阶龙格-库塔-菲尔贝格算法,一般来说ode45函数更为常用.其中f 是待解方程写成的函数文件的文件名,ts=[t0,tf],t0和tf 分别为自变量的初值和终值.x0为函数的初值.options 用于设置误差限,设置options 用函数optimset ,调用格式为:Options=optimset(‘reltol ’,rt,’abstol ’,at),这里的rt 和at 分别指代设定的相对误差和绝对误差.--------------------------------------------------------------------- 例如:求微分方程()()()⎪⎩⎪⎨⎧===+--10',00011000222x x x dt dx x dt x d 的数值解. 设',121y y x y ==,原微分方程组变化为:()()()⎪⎩⎪⎨⎧==--==10,0011000''211221221y y y y y y y y高阶方程必须转化为一阶方程组才能继续解决问题:先建立函数文件如下:function dy=fun1(t,y)dy=zeros(2,1);dy(1)=y(2);dy(2)=1000*(1-y(1)^2)*y(2)-y(1);绘制图像:[T,Y]=ode15s(@fun1,[0,3000],[2,0]);plot(T,Y(:,1),'-')---------------------------------------------------------------------例如:解微分方程组()()()⎪⎪⎩⎪⎪⎨⎧======100,0051.0'''321213312321y y y y y y y y y y y y 先建立函数文件function dy=fun2(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);[T,Y]=ode45(@fun2,[0,12],[0,1,1]);plot(T,Y(:,1),'-',T,Y(:,2),'*',T,Y(:,3),'>')---------------------------------------------------------------------。