三体运动的matlab演示
I**
1MX
“ %
F(Xr 心) 6j6)( Xr X J
j "r*-疝出制痒十丘忑忑拓1 )民严皿_辿少
..g席+*仍才芮融訴
取殖翎为Mj. g. M);耒出a,x ,^,H 加,細r Q族 > 弘Q .d '
风)严歯二人2〉十%2)七匕九1/ 吐枷卜).
仏心弘WH必捫打沙甘忙
411咼瀆不;
2驚:时対股g.切:別M船0|。)人片|町 瓜严讪;"
X +洞加I的严如如S)十九t
"3⑹ ' 呦3片附旦).
丫肛* % Mt bl刍峑角
figure('name','三体运动’);%设置标题名字
N=3;%x=zeros(1,N);y=zeros(1,N);vx=zeros(1,N);vy=zeros(1,N);ax=zer
os(1,N);ay=zeros(1,N);ke=o nes(1,N);
% 设置三个质点的初始位置
% 设置三个质点的初始速度
x=[0,2,3];y=[0,2,0]; vx=[-1.5,1,-0.8];vy=[1.2,1,0.6]; ax=zeros(1,N);ay=zeros(1,N);
ke=[1.5,6,2];%设置三个质点的电荷相对值
M=[1,5,1];%设置三个质点的质量相对值
dt=0.005; pausetime=0.002;
时间;
%设置时间微小元长度,越小演示越精细,但越慢;设置暂停
set(gcf, set(gca, hold I
'doublebuffer'
'xlim',[-7 7],
on ;axis equal ;
for m=1:N
,'on' )%消除抖动
'ylim',[-7 7]);%设置坐标轴范围
p(m)=plot(x(m),y(m),
有质点初始位置以及大小设置
'color' , 'k', 'marker'
,‘markersize'
,15);
%所
end
for jj=1:5000
for m=1:N
% 设定运行距离
ax(m)=0;ay(m)=0;
for n=1:N
if m?=n
ax(m)=ax(m)+ke( n)*ke(m)*(x (n )-x(m))*((x( n)-x(m))A2+(y( n)-y(m))A2)A(-1
.5)/M(m);%按吸引力的格式写的加速度,如果要改为排斥力,需要将等号后面的
位置
m和n交换
ay(m)=ay(m)+ke( n)*ke(m)*(y( n)-y(m))*((x( n)-x(m))A2+(y( n)-y(m))A2)A(-1 .5)/M(m);
else
end
end
x(m)=x(m)+vx(m)*dt+0.5*ax(m)*dt^2;
y(m)=y(m)+vy(m)*dt+0.5*ay(m)*dt^2;
vx(m)=vx(m)+ax(m)*dt;
vy(m)=vy(m)+ay(m)*dt;
set (p( m),'xdata' ,x(m), 'ydata'
%计算质点的新位置
,y(m));%设置质点的运动过程
plot(x(m),y(m),'color' , 'b' ); %画岀三个质点的运动轨迹
if abs(x(m))>10||abs(y(m))>10%如果质点已经运动到边框外面则停止运行,跳
岀该层循环
break ;
end
-6
-6
%如果质点已经运动到边框外面则停止运行,停止运行
%如果质点已经运动到边框外面则停止运行,停止运行
暂停一会
end
if abs(x(m))>10||abs(y(m))>10 break ;
end
% p ause( pausetime); %
draw now end
-2640-46024-6”4-20 10运行结果
-2
6
4
0
-4
6
0
2
4
-6”4-2
0 10
见文库内本人所编写其他的
见文库内本人所编写其他的matlab模拟。
说明:更改不同的参数得到不同的运行结果。
以上程序只是平面内的演示,希望读者根据平面内的模拟程序得到空间内的演示程序。
也可以添加更多的质点,得到更多体的运动,不过会使得运行变慢,较好的计算机才能做到。 如要添加到四个质点,则需要N=4;且x,y,vx,vy,ke,M都要相应的有四个初始值。
程序目前存在的问题:
当两个质点运动到一点(即发生碰撞时),会产生速度的突变,如何能较好解决这个问题?
如果能够,希望能得到空间内的演示。