Đây là những gì tôi đã làm:
- Dựa trên khối lượng của chúng, an toàn nhất là ban đầu xem xét Sao Mộc và Sao Thổ cũng như Sao Thiên Vương. Cũng có thể có kết quả khi đưa Trái đất vào phân tích, để có được vị trí tương đối, góc quan sát, v.v. Vì vậy, tôi sẽ xem xét:
- mặt trời
- Trái đất
- sao Mộc
- sao Thổ
- Sao Thiên Vương
- sao Hải vương
- Lấy các tham số hấp dẫn tiêu chuẩn (μ) cho tất cả chúng
- Nhận vị trí và vận tốc ban đầu thông qua JPL / HORIZONS cho tất cả các hành tinh này. Tôi đã có một số dữ liệu nằm trong khoảng từ J2000.5, vì vậy tôi chỉ sử dụng các vectơ trạng thái từ ngày 1 tháng 1 năm 2000 vào buổi trưa.
- Viết một bộ tích hợp N-body với các công cụ MATLAB tích hợp. Tích hợp hệ Mặt trời không hoàn chỉnh này một lần mà không có Sao Hải Vương, và một lần có Sao Hải Vương đi kèm.
- Phân tích và so sánh!
Vì vậy, đây là dữ liệu của tôi và nhà tích hợp N-body:
function [t, yout_noNeptune, yout_withNeptune] = discover_Neptune()
% Time of integration (in years)
tspan = [0 97] * 365.25 * 86400;
% std. gravitational parameters [km/s²/kg]
mus_noNeptune = [1.32712439940e11; % Sun
398600.4415 % Earth
1.26686534e8 % Jupiter
3.7931187e7 % Saturn
5.793939e6]; % Uranus
mus_withNeptune = [mus_noNeptune
6.836529e6]; % Neptune
% Initial positions [km] and velocities [km/s] on 2000/Jan/1, 00:00
% These positions describe the barycenter of the associated system,
% e.g., sJupiter equals the statevector of the Jovian system barycenter.
% Coordinates are expressed in ICRF, Solar system barycenter
sSun = [0 0 0 0 0 0].';
sEarth = [-2.519628815461580E+07 1.449304809540383E+08 -6.175201582312584E+02,...
-2.984033716426881E+01 -5.204660244783900E+00 6.043671763866776E-05].';
sJupiter = [ 5.989286428194381E+08 4.390950273441353E+08 -1.523283183395675E+07,...
-7.900977458946710E+00 1.116263478937066E+01 1.306377465321731E-01].';
sSaturn = [ 9.587405702749230E+08 9.825345942920649E+08 -5.522129405702555E+07,...
-7.429660072417541E+00 6.738335806405299E+00 1.781138895399632E-01].';
sUranus = [ 2.158728913593440E+09 -2.054869688179662E+09 -3.562250313222718E+07,...
4.637622471852293E+00 4.627114800383241E+00 -4.290473194118749E-02].';
sNeptune = [ 2.514787652167830E+09 -3.738894534538290E+09 1.904284739289832E+07,...
4.466005624145428E+00 3.075618250100339E+00 -1.666451179600835E-01].';
y0_noNeptune = [sSun; sEarth; sJupiter; sSaturn; sUranus];
y0_withNeptune = [y0_noNeptune; sNeptune];
% Integrate the partial Solar system
% once with Neptune, and once without
options = odeset('AbsTol', 1e-8,...
'RelTol', 1e-10);
[t, yout_noNeptune] = ode113(@(t,y) odefcn(t,y,mus_noNeptune) , tspan, y0_noNeptune , options);
[~, yout_withNeptune] = ode113(@(t,y) odefcn(t,y,mus_withNeptune), t, y0_withNeptune, options);
end
% The differential equation
%
% dy/dt = d/dt [r₀ v₀ r₁ v₁ r₂ v₂ ... rₙ vₙ]
% = [v₀ a₀ v₁ a₁ v₂ a₂ ... vₙ aₙ]
%
% with
%
% aₓ = Σₘ -G·mₘ/|rₘ-rₓ|² · (rₘ-rₓ) / |rₘ-rₓ|
% = Σₘ -μₘ·(rₘ-rₓ)/|rₘ-rₓ|³
%
function dydt = odefcn(~, y, mus)
% Split up position and velocity
rs = y([1:6:end; 2:6:end; 3:6:end]);
vs = y([4:6:end; 5:6:end; 6:6:end]);
% Number of celestial bodies
N = size(rs,2);
% Compute interplanetary distances to the power -3/2
df = bsxfun(@minus, permute(rs, [1 3 2]), rs);
D32 = permute(sum(df.^2), [3 2 1]).^(-3/2);
D32(1:N+1:end) = 0; % (remove infs)
% Compute all accelerations
as = -bsxfun(@times, mus.', D32); % (magnitudes)
as = bsxfun(@times, df, permute(as, [3 2 1])); % (directions)
as = reshape(sum(as,2), [],1); % (total)
% Output derivatives of the state vectors
dydt = y;
dydt([1:6:end; 2:6:end; 3:6:end]) = vs;
dydt([4:6:end; 5:6:end; 6:6:end]) = as;
end
Đây là kịch bản trình điều khiển tôi đã sử dụng để có được một số cốt truyện hay:
clc
close all
% Get coordinates from N-body simulation
[t, yout_noNeptune, yout_withNeptune] = discover_Neptune();
% For plot titles etc.
bodies = {'Sun'
'Earth'
'Jupiter'
'Saturn'
'Uranus'
'Neptune'};
% Extract positions
rs_noNeptune = yout_noNeptune (:, [1:6:end; 2:6:end; 3:6:end]);
rs_withNeptune = yout_withNeptune(:, [1:6:end; 2:6:end; 3:6:end]);
% Figure of the whole Solar sysetm, just to check
% whether everything went OK
figure, clf, hold on
for ii = 1:numel(bodies)
plot3(rs_withNeptune(:,3*(ii-1)+1),...
rs_withNeptune(:,3*(ii-1)+2),...
rs_withNeptune(:,3*(ii-1)+3),...
'color', rand(1,3));
end
axis equal
legend(bodies);
xlabel('X [km]');
ylabel('Y [km]');
title('Just the Solar system, nothing to see here');
% Compare positions of Uranus with and without Neptune
rs_Uranus_noNeptune = rs_noNeptune (:, 13:15);
rs_Uranus_withNeptune = rs_withNeptune(:, 13:15);
figure, clf, hold on
plot3(rs_Uranus_noNeptune(:,1),...
rs_Uranus_noNeptune(:,2),...
rs_Uranus_noNeptune(:,3),...
'b.');
plot3(rs_Uranus_withNeptune(:,1),...
rs_Uranus_withNeptune(:,2),...
rs_Uranus_withNeptune(:,3),...
'r.');
axis equal
xlabel('X [km]');
ylabel('Y [km]');
legend('Uranus, no Neptune',...
'Uranus, with Neptune');
% Norm of the difference over time
figure, clf, hold on
rescaled_t = t/365.25/86400;
dx = sqrt(sum((rs_Uranus_noNeptune - rs_Uranus_withNeptune).^2,2));
plot(rescaled_t,dx);
xlabel('Time [years]');
ylabel('Absolute offset [km]');
title({'Euclidian distance between'
'the two Uranuses'});
% Angles from Earth
figure, clf, hold on
rs_Earth_noNeptune = rs_noNeptune (:, 4:6);
rs_Earth_withNeptune = rs_withNeptune(:, 4:6);
v0 = rs_Uranus_noNeptune - rs_Earth_noNeptune;
v1 = rs_Uranus_withNeptune - rs_Earth_withNeptune;
nv0 = sqrt(sum(v0.^2,2));
nv1 = sqrt(sum(v1.^2,2));
dPhi = 180/pi * 3600 * acos(min(1,max(0, sum(v0.*v1,2) ./ (nv0.*nv1) )));
plot(rescaled_t, dPhi);
xlabel('Time [years]');
ylabel('Separation [arcsec]')
title({'Angular separation between the two'
'Uranuses when observed from Earth'});
mà tôi sẽ mô tả ở đây từng bước một.
Đầu tiên, một âm mưu của Hệ mặt trời để kiểm tra xem bộ tích hợp cơ thể N có hoạt động như bình thường không:
Đẹp! Tiếp theo, tôi muốn thấy sự khác biệt giữa các vị trí của Sao Thiên Vương có và không có ảnh hưởng của Sao Hải Vương. Vì vậy, tôi chỉ trích xuất vị trí của hai Uranus đó và vẽ chúng:
... Điều đó hầu như không hữu ích. Ngay cả khi phóng to và xoay cái quái đó ra, đây cũng không phải là một âm mưu hữu ích. Vì vậy, tôi đã xem xét sự tiến hóa của khoảng cách Euclidian tuyệt đối giữa hai Uranuses:
Đó là bắt đầu giống như nó nhiều hơn! Khoảng 80 năm sau khi bắt đầu phân tích của chúng tôi, hai Thiên vương cách nhau gần 6 triệu km!
Lớn như âm thanh, ở quy mô lớn hơn của những thứ này có thể chìm trong tiếng ồn khi chúng ta thực hiện các phép đo ở đây trên Trái đất. Thêm vào đó, nó vẫn không kể toàn bộ câu chuyện, như chúng ta sẽ thấy trong giây lát. Vì vậy, tiếp theo, chúng ta hãy nhìn vào sự khác biệt góc giữa các vectơ quan sát, từ Trái đất về phía hai Thiên vương tinh để xem góc đó lớn đến mức nào và liệu nó có thể nổi bật trên ngưỡng lỗi quan sát:
...Ái chà! Chênh lệch hơn 300 arcs giây, cộng với tất cả các loại gợn sóng gợn sóng thời gian lắc lư đang diễn ra. Điều đó có vẻ tốt trong khả năng quan sát của thời đại (mặc dù tôi không thể tìm thấy một nguồn đáng tin cậy về điều này quá nhanh; bất cứ ai?)
Chỉ để có biện pháp tốt, tôi cũng sản xuất cốt truyện cuối cùng đó để sao Mộc và sao Thổ ra khỏi bức tranh. Mặc dù một số lý thuyết nhiễu loạn đã được phát triển trong 17 ngày và 18 ngày trong nhiều thế kỷ, nó đã không được phát triển rất tốt và tôi nghi ngờ thậm chí Le Verrier mất Jupiter cân nhắc (nhưng một lần nữa, tôi có thể là sai; hãy sửa lại cho tôi nếu bạn biết thêm).
Vì vậy, đây là âm mưu cuối cùng không có Sao Mộc và Sao Thổ:
Mặc dù có sự khác biệt, chúng chỉ là phút và quan trọng nhất là không liên quan đến việc khám phá Sao Hải Vương.