MATLAB期末大作业

  • 格式:doc
  • 大小:826.00 KB
  • 文档页数:13

下载文档原格式

  / 18
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

学号:姓名:

《Matlab/Simulink在数学计算与仿真中的应用》大作业1.假设地球和火星绕太阳运转的半径分别为r和2r,利用comet指令动画显示从地球

到火星的转移轨迹(r可以任意取值,要求实时显示探测器、太阳、地球和火星的位置)。

解函数function comet(varargin)

[ax,args,nargs] = axescheck(varargin{:});

error(nargchk(1,3,nargs,'struct'));

% Parse the rest of the inputs

if nargs < 2, x = args{1}; y = x; x = 1:length(y); end

if nargs == 2, [x,y] = deal(args{:}); end

if nargs < 3, p = 0.10; end

if nargs == 3, [x,y,p] = deal(args{:}); end

if ~isscalar(p) || ~isreal(p) || p < 0 || p >= 1

error('MATLAB:comet:InvalidP', ...

'The input ''p'' must be a real scalar between 0 and 1.'); End

指令 %particle_motion

t = 0:5:16013;

r1=6.7e6;%随便给定参数

%---------------------------

r2=2*r1;

g=9.8;

R=6.378e6;

m=g*R^2;

%内轨道

v_inner=sqrt(m/r1);

w_inner=v_inner/r1;

x_inter=r1*cos(w_inner*t);

y_inter=r1*sin(w_inner*t);

%外轨道

v_outer=sqrt(m/r2);

w_outer=v_outer/r2;

x_outer=r2*cos(w_outer*t);

y_outer=r2*sin(w_outer*t);

%控制器转移轨道

a=(r1+r2)/2;

E=-m/(2*a);

V_near=sqrt(m*(2/r1-2/(r1+r2)));%转移轨道在近地点的速度

V_far=sqrt(m*(2/r2-2/(r1+r2)));%转移轨道在远地点的速度

h=r1*V_near;%由于在近地点的速度垂直于位置失量, h是转移轨道的比动量矩

e=sqrt(1+2*E*h^2/m^2);%e为椭圆轨迹的偏心率

TOF=pi*sqrt(a^3/m);%转移轨道是椭圆的一半及飞行时间是周期的一半(开普勒第三定律)

w=pi/TOF;%椭圆轨迹的角速度

c=a*e;

b=sqrt(a^2-c^2);

x_ellipse=a*cos(w*t)-0.5*r1;

y_ellipse=b*sin(w*t);

%动画显示运动轨迹

x=[x_inter;x_outer;x_ellipse]';

y=[y_inter;y_outer;y_ellipse]';

comet(x,y)

%---------------------------

动态图像如下:

2.利用两种不同途径求解边值问题df

dx

f g

dg

dx

f g f g

=+=-+==

34430001

,,(),()的

解.途径一:指令syms f g

[f,g]=dsolve('Df=3*f+4*g,Dg=-4*f+3*g','f(0)=0,g(0)=1');

disp('f=');disp(f)

disp('g=');disp(g)

结果(Matlab 7.8版本)f=

i/(2*exp(t*(4*i - 3))) - (i*exp(t*(4*i + 3)))/2

g=exp(t*(4*i + 3))/2 + 1/(2*exp(t*(4*i - 3)))

(Matlab 6.5版本)

f=exp(3*t)*sin(4*t)

g=exp(3*t)*cos(4*t)

>>

途径二:%problem2

function dy=problem2(t,y)

dy = zeros(2,1);

dy(1) = 3*y(1)+4*y(2);

dy(2) = -4*y(1)+3*y(2);

[t,y] = ode45('problem2',[0 2],[0 1]);

plot(t,y(:,1),'r',t,y(:,2),'b');

图2

3.假设著名的Lorenz 模型的状态方程表示为

⎪⎩⎪⎨⎧-+-=+-=+-=)

()()()()()()()()()()()(322133223211t x t x t x t x t x t x t x t x t x t x t x t x σρρβ 其中,设28,10,3/8===σρβ。若令其初值为ε===)0(,0)0()0(321x x x ,而ε为机器上可

ε,试用尽可能多的方法来求解该微分方以识别的小常数,如取一个很小的正数10

=

10-

程组。

解:方法一:新建文件lorenzeq.m

源程序: function xdot=lorenzeq(t,x)

xdot=[-8/3*x(1)+x(2)*x(3);...

-10*x(2)+10*x(3);...

-x(1)*x(2)+28*x(2)-x(3)];

再输入命令: t_final=100;

x0=[0;0;1e-10];

[t,x]=ode45('lorenzeq',[0,t_final],x0);

plot(t,x);

figure;

plot3(x(:,1),x(:,2),x(:,3));

axis([10 42 -20 20 -20 25]);