当前位置:编程学习 > Matlab >>

appollo matlab 解答疑惑!

函数文件为: function dy=Apollo(t,y) % y(1)=x;y(2)=y; y(3)=dx;y(4)=dy; % dy(1)=y(3)=dx; dy(2)=y(4)=dy; % dy(3)=ddx; dy(4)=ddy; mu=1/82.45; mu1=1-mu; r1=sqrt((y(1)-mu)^2+y(2)^2); r2=sqrt((y(1)-mu1)^2+y(2)^2); dy(1)=y(3); dy(2)=y(4); dy(3)=2*y(4)+y(1)-mu1*(y(1)+mu)/r1^3-mu*(y(1)-mu1)/r2^3; dy(4)=-2*y(3)+y(2)-mu1*y(2)/r1^3-mu*y(2)/r2^3; 调用文件为: clear,clc; options = odeset('RelTol',1e-4,'AbsTol',[1e-4 1e-4 1e-5]); [t,y] = ode45(@Apollo,[0 20],[1.2;0;0;-1.04935751],options) 调用出现问题,我现在无法改正,不知道问题出在哪里,请高手帮我解答!十分感谢!请附上改正的地方和错误的原因!可附加悬赏!
答案:function dy=Apollo(t,y)
% y(1)=x;y(2)=y; y(3)=dx;y(4)=dy;
% dy(1)=y(3)=dx; dy(2)=y(4)=dy; 
% dy(3)=ddx;     dy(4)=ddy;
mu=1/82.45;
mu1=1-mu;
r1=sqrt((y(1)+mu)^2+y(2)^2);
r2=sqrt((y(1)-mu1)^2+y(2)^2);
dy(1)=y(3);
dy(2)=y(4);
dy(3)=2*y(4)+y(1)-mu1*(y(1)+mu)/r1^3-mu*(y(1)-mu1)/r2^3;
dy(4)=-2*y(3)+y(2)-mu1*y(2)/r1^3-mu*y(2)/r2^3;
dy=dy';
-----------------
 options = odeset('RelTol',1e-8);
>> [t,y] = ode45(@Apollo,[0 20],[1.2;0;0;-1.04935751],options);
>> plot(y(:,1),y(:,2))%绘制x1和x3,也就是x和y的图形 
title('Appollo卫星运动轨迹') 
xlabel('X') 
ylabel('Y') 
------------------------------
r1方程写错了
r1=sqrt((y(1)+mu)^2+y(2)^2);
dy应该是列向量
,'AbsTol',可以不要
其他:function dx=appollo(t,x)
mu=1/82.45;
mustar=1-mu;
r1=sqrt((x(1)+mu)^2+x(3)^2);
r2=sqrt((x(1)-mustar)^2+x(3)^2);
dx=[x(2)
2*x(4)+x(1)-mustar*(x(1)+mu)/r1^3-mu*(x(1)-mustar)/r2^3
x(4)
-2*x(2)+x(3)-mustar*x(3)/r1^3-mu*x(3)/r2^3];
--------------------------------------------------------------------------------------
x0=[1.2;0;0;-1.04935751];%x0(i)对应与xi的初值 
options=odeset('reltol',1e-8);%该命令的另一种写法是options=odeset;options.reltol=1e-8; 
tic 
[t,y]=ode45(@appollo,[0,20],x0,options);%t是时间点,y的第i列对应xi的值,t和y的行数相同 
toc 
plot(y(:,1),y(:,3))%绘制x1和x3,也就是x和y的图形 
title('Appollo卫星运动轨迹') 
xlabel('X') 
ylabel('Y')
Elapsed time is 0.597879 seconds.

上一个:matlab全排列 急!!
下一个:下面matlab图像处理的一个程序,运行之后总显示??? Error using ==> times Matrix dimensions must agree.

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,