logo资料库

利用matlab求解常微分方程.pdf

第1页 / 共15页
第2页 / 共15页
第3页 / 共15页
第4页 / 共15页
第5页 / 共15页
第6页 / 共15页
第7页 / 共15页
第8页 / 共15页
资料共15页,剩余部分请下载后查看
利用MAPLE的深层符号计算资源
经典特殊函数的调用
MAPLE库函数在线帮助的检索树
发挥MAPLE的计算潜力
调用MAPLE函数
运行MAPLE程序
用 matlab 求解常微分方程 在 MATLAB 中,由函数 dsolve()解决常微分方程(组)的求解问题,其具体格式如 下: r = dsolve('eq1,eq2,...', 'cond1,cond2,...', 'v') 'eq1,eq2,...'为微分方程或微分方程组,'cond1,cond2,...',是初始条件或边界条件,'v'是 独立变量,默认的独立变量是't'。 函数 dsolve 用来解符号常微分方程、方程组,如果没有初始条件,则求出通解,如 果有初始条件,则求出特解。 例 1:求解常微分方程 dy dx = 1 + 的MATLAB程序为:dsolve('Dy=1/(x+y)','x') y x , 注意,系统缺省的自变量为 t,因此这里要把自变量写明。 其中:Y=lambertw(X)表示函数关系 Y*exp(Y)=X。 例 2:求解常微分方程 Y2=dsolve('y*D2y-Dy^2=0','x') = y− '' yy 2 ' 0 的MATLAB程序为: Y2=dsolve('D2y*y-Dy^2=0','x')
我们看到有两个解,其中一个是常数 0。 dx dt dy dt ⎧ ⎪⎪ ⎨ ⎪ ⎪⎩ + 5 x + = y t e − − x 3 y = 2 t e 例 3:求常微分方程组 通解的MATLAB程序为: [X,Y]=dsolve('Dx+5*x+y=exp(t),Dy-x-3*y=exp(2*t)','t') dx dt dx dt ⎧ ⎪⎪ ⎨ ⎪ ⎪⎩ + 2 x − + dy dt + dy dt y 2 = 10cos , t x = 2 t = 0 = 4 e 2 − t , y t = 0 = 0 例 4:求常微分方程组 通解的MATLAB程序为: [X,Y]=dsolve('Dx+2*x-Dy=10*cos(t),Dx+Dy+2*y=4*exp(- 2*t)','x(0)=2,y(0)=0','t') 以上这些都是常微分方程的精确解法,也称为常微分方程的符号解。但是,我们知 道,有大量的常微分方程虽然从理论上讲,其解是存在的,但我们却无法求出其解析 解,此时,我们需要寻求方程的数值解,在求常微分方程数值解方面,MATLAB 具有丰 富的函数,我们将其统称为 solver,其一般格式为:
[T,Y]=solver(odefun,tspan,y0) 该函数表示在区间tspan=[t0,tf]上,用初始条件y0 求解显式常微分方程 y ' = f t y ( , ) 。 solver 为命令 ode45,ode23,ode113,ode15s,ode23s,ode23t,ode23tb 之一,这些 命令各有特点。我们列表说明如下: 特点 说明 求解 器 ode45 一步算法,4,5 阶 Runge- Kutta )xΔ 方法累积截断误差 3 一步算法,2,3 阶 Runge- ( ode23 Kutta )xΔ 方法累积截断误差 3 多步法,Adams算法, ( 高低精度均可达到 3 − 10 ~ 10 − 6 采用梯形算法 多步法,Gear’s 反向 数值积分,精度中等 一步法,2 阶 Rosebrock 算法, 低精度。 ode113 ode23t ode15s ode23s 大部分场合的首选 算法 使用于精度较低的 情形 计算时间比 ode45 短 适度刚性情形 若 ode45 失效时, 可尝试使用 当精度较低时, 计算时间比 ode15s 短 odefun为显式常微分方程 y ' = f t y ( , ) 中的 f t y ( , ) tspan为求解区间,要获得问题在其他指定点 t 0 , t 1 , t , 2 上的解,则令 tspan = [ t , t 1 , t 2 0 , , t ]f (要求 it 单调递增或递减),y0 初始条件。 例 5:求解常微分方程 y ' 2 = − y + 2 2 x + x 2 , 0 0x≤ ≤ , (0) 1 .5 = 的MATLAB程序如下: y y=dsolve('Dy=-2*y+2*x^2+2*x','y(0)=1','x') x=0:0.01:0.5;
yy=subs(y,x); fun=inline('- 2*y+2*x*x+2*x');[x,y]=ode15s(fun,[0:0.01:0.5],1);ys=x.*x+exp(- 2*x); plot(x,y,'r',x,ys,'b') 例 6:求解常微分方程 d y 2 dt 2 (1 μ− − 2 y ) dy dt + = y 0, y (0) 1, = y '(0) 0 = 的解,并画出解的图形。 分析:这是一个二阶非线性方程(函数以及所有偏导数军委一次幂的是现性方程,高 于一次的为非线性方程),用现成的方法均不能求解,但我们可以通过下面的变换,将二 阶方程化为一阶方程组,即可求解。 令: 1x x y= , 2 = dy dt , 7μ= ,则得到: dx 1 dt dx 2 dt ⎧ ⎪⎪ ⎨ ⎪ ⎪⎩ = x 2 , x 1 (0) 1 = = 7(1 − x 2 1 ) x 2 − x 1 , x 2 (0) 0 = 解:
function [dfy]=mytt(t,fy) %f1=y;f2=dy/dt %求二阶非线性微分方程时,把一阶、二阶直到(n-1)阶导数用另外一个函数代替 %用 ode45 命令时,必须表示成 Y'=f(t,Y)的形式 %Y=[y1;y2;y3],Y'=[y1';y2';y3']=[y2;y3;f(y1,y2,y3)], %其中 y1=y,y2=y',y3=y'' %更高阶时类似 dfy=[fy(2);7*(1-fy(1)^2)*fy(2)-fy(1)]; clear;clc [t,yy]=ode45('mytt',[0 40],[1;0]); plot(t,yy) legend('y','dy') 【例 4.14.2.1-1】采用 ODE 解算指令研究围绕地球旋转的卫星轨道。 (1)问题的形成 轨道上的卫星,在牛顿第二定律 F ma m = = d r 2 dt 2 ,和万有引力定律 F = − G EmM r 3 − r 作用下有 a d r 2 dt 2 = − G − EM 3 r ,引力常数G=6.672*10-11(N.m2/kg2) ,ME=5.97*1024(kg)是地球的质量。假 r 定卫星以初速度vy(0)=4000m/s在x(0)=-4.2*107(m)处进入轨道。
(2)构成一阶微分方程组 令Y=[y1 y2 y3 y4]T=[x y vx vy]T=[x y x' y']T Y t '( ) = y y y y ' 1 ' 2 ' 3 ' 4 ⎡ ⎢ ⎢ ⎢ ⎢ ⎣ ⎤ ⎥ ⎥ ⎥ ⎥ ⎦ = ⎡ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ v x a a x y x y ⎤ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ ⎡ ⎢ ⎢ ⎢ = −⎢ ⎢ ⎢ −⎢ ⎣ GM GM y 3 y 4 i i E E 2 ( x 2 ( x y 1 y + y 2 y + ) 2 3/ 2 ) 2 3/ 2 ⎤ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ (3)根据上式 [dYdt.m] function Yd=DYdt(t,Y) % t % Y global G ME % xy=Y(1:2);Vxy=Y(3:4); % r=sqrt(sum(xy.^2)); Yd=[Vxy;-G*ME*xy/r^3]; % (4) global G ME % <1> G=6.672e-11;ME=5.97e24;vy0=4000;x0=-4.2e7;t0=0;tf=60*60*24*9; tspan=[t0,tf]; % Y0=[x0;0;0;vy0]; % [t,YY]=ode45('DYdt',tspan,Y0);% <8>
X=YY(:,1); % Y=YY(:,2); % plot(X,Y,'b','Linewidth',2); hold on %axis('image') % [XE,YE,ZE] = sphere(10); % RE=0.64e7; % XE=RE*XE;YE=RE*YE;ZE=0*ZE; % mesh(XE,YE,ZE),hold off % 练习: 1.利用MATLAB求常微分方程的初值问题 r=dsolve('Dy+3*y=8','y(0)=2','x') dy dx + 3 y = 8 , 0 xy = = 的解。 2 function dy=myddy(t,Y) % dy=[-3*Y(1)+8]; [t,yy]=ode45('myddy',[0:0.01:10],[2]);
yys=subs(r,t); plot(t,yy,t,yys); legend('y','yys') ) y y , 0 1 x ' xy = = , 0 ' xy = = 3的解。 + (1 '' 2 = x 2.利用MATLAB求常微分方程的初值问题 2 r=dsolve('D2y*(1+x^2)-2*x*Dy=0','y(0)=1,Dy(0)=3','x') %%% function yy=mydy2(x,Y) % yy=[Y(2);Y(2)*2*x/(1+x^2)]; clear;clc [t,YY]=ode45('mydy2',[0 30],[1;3]); ys=1+t.*t.*t+3*t; plot(t,YY,t,ys) legend('y','dy','ys') 3.利用MATLAB求常微分方程 y y (4) 2 ''' + − y '' 0 = 的解。 解:y=dsolve('D4y-2*D3y+D2y','x')
分享到:
收藏