国产乱精品一区二区三区_韩国一级特黄的一级毛片_日本精品视频在线播放_欧美熟妇淫乱视频_欧美日韩在线视频中文字幕_亚洲国产精品一区久_永久免费看擁有海量影視資源_人成无码区免费aⅤ片_午夜电影在线观看国产1区_777免费视频在线观看软件

三體系統(tǒng)運動軌跡

標簽: 熱點

紅棗紅棗 2023-01-17 15:16:11

三體系統(tǒng)運動軌跡腳本如下,感興趣的朋友不妨下載北太天元運行試一試!



%模擬三個恒星組成的系統(tǒng)的三體運動clear

load_plugin("time");  %為了使用北太天元軟件的pause插件函數(shù)

close all

% 三個恒星的質量都是1

ms = 1 ;

mt = 1 ;

mj = 1 ;

% 無量綱后萬有引力常數(shù)設置為1 

G = 1 ;

%初始條件 [xs,ys,xt,yt,xj,yj,vxs,vys,vxt,vyt,vjx,vjt] 

CI = [0 -0.1 2 2 5 0 0 0 0 0 0 0];

%初始時刻

to = 0;

%計算終止時刻

tf = 120;



%由位置的導數(shù)速度,速度的導數(shù)是加速,牛頓第二定律

% 以及萬有引力定律得到常微分方程組

fxy = @(ps, pt, pj,ms,mt,mj) ...

    G*( mt.*(pt-ps)./norm(pt-ps).^3 ... 

   + mj.*(pj-ps)./norm(pj-ps).^3 ); 

F = @(t,Y) [Y(7);Y(8);Y(9);Y(10);Y(11);Y(12); ..

   fxy(Y([1,2]),Y([3,4]),Y([5,6]),ms,mt,mj); ...  

   fxy(Y([3,4]),Y([1,2]),Y([5,6]),mt,ms,mj); ...  

   fxy(Y([5,6]),Y([3,4]),Y([1,2]),mj,mt,ms); ...

   ];


%使用ode45求解常微分方程組的初值問題

[t,Y]=ode45(F,[to,tf],CI);


%plot(Y(:,1),Y(:,2),'r',Y(:,3),Y(:,4),'g',Y(:,5),Y(:,6),'b')

yo = Y(1) ;

dto = 0.3 ;

plotmax = 100 ;

T=to ;



xmin = min(min(Y(:,[1,3,5]))); %三個質點的x坐標(在所有時刻)的最小值

xmax = max(max(Y(:,[1,3,5])));

ymin = min(min(Y(:,[2,4,6]))); %三個質點的y坐標(在所有時刻)的最小值

ymax = max(max(Y(:,[2,4,6])));


clf

close all

figure('Position',[0 0 1550 800])

hold off

told = 0;

for i = 1:length(Y(:,1))

   dt = abs(Y(i,1)-yo)/abs(Y(i,7));

   if dt >= dto

            if i>plotmax 

               shift = plotmax;

            else

               shift = i-1;

            end

            plot(... 

               [xmin,xmax],[ymin,ymax], 'w', ... %畫一個白色的斜線代替axis([xmin,xmax,ymin,ymax])設置畫圖范圍

               Y(i-shift:i,1),Y(i-shift:i,2),'r','LineWidth',2, ... %畫第一個恒星在i-shift個時刻和第i個時刻件的軌跡

               Y(i,1),Y(i,2),'-or','LineWidth',4, ... %畫第一個恒星在第i個時刻所在的位置

               Y(i-shift:i,3),Y(i-shift:i,4),'g','LineWidth',2, ... 

               Y(i,3),Y(i,4),'-og','LineWidth',4, ... 

               Y(i-shift:i,5),Y(i-shift:i,6),'b','LineWidth',2, ... 

               Y(i,5),Y(i,6),'-ob','LineWidth',4)

            title(sprintf('時間=%f',t(i)))

            T=[T;t(i)];

       yo = Y(i,1) ; 

       vo = Y(i,7) ;

   end

   pause(0.01)

end

X=[0:1:length(T)-1];

figure(2)

plot(X,T)

plot(Y(:,1),Y(:,2),'r', 'LineWidth',2, ... 

Y(:,3),Y(:,4),'g','LineWidth',2, ...

Y(:,5),Y(:,6),'b', 'LineWidth',2)

unload_plugin("time") 

1895 0 3 收藏 回復

回復

回復

重置 提交