Inilah yang saya lakukan:
- Berdasarkan pada massa mereka, awalnya paling aman adalah mempertimbangkan Jupiter dan Saturnus serta Uranus. Mungkin bermanfaat untuk memasukkan Bumi dalam analisis, untuk mendapatkan posisi relatif, sudut pengamatan, dll. Jadi, saya akan mempertimbangkan:
- Matahari
- Bumi
- Jupiter
- Saturnus
- Uranus
- Neptunus
- Dapatkan parameter gravitasi standar (μ) untuk semuanya
- Dapatkan posisi awal dan kecepatan melalui JPL / HORIZONS untuk semua planet ini. Saya memiliki beberapa data di sekitar J2000.5, jadi saya hanya menggunakan vektor negara dari 1 Januari 2000, pada siang hari.
- Tulis integrator N-body dengan alat MATLAB bawaan. Integrasikan tata surya yang tidak lengkap ini sekali tanpa Neptunus, dan sekali dengan Neptunus disertakan.
- Analisis dan bandingkan!
Jadi, inilah data saya, dan integrator 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
Berikut ini adalah skrip driver yang saya gunakan untuk mengeluarkan beberapa plot yang bagus:
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'});
yang saya akan jelaskan di sini langkah demi langkah.
Pertama, sebidang tata surya untuk memeriksa apakah integrator N-body berfungsi sebagaimana mestinya:
Bagus! Selanjutnya, saya ingin melihat perbedaan antara posisi Uranus dengan dan tanpa pengaruh Neptunus. Jadi, saya mengekstraksi posisi kedua Uranus itu saja, dan merencanakannya:
... itu hampir tidak berguna. Bahkan ketika memperbesar sangat dan memutar sih keluar dari itu, ini bukan plot yang berguna. Jadi saya melihat evolusi jarak Euclidian absolut antara dua Uranus:
Itu mulai terlihat lebih seperti itu! Sekitar 80 tahun setelah dimulainya analisis kami, kedua Uranus terpisah hampir 6 juta km!
Besar kedengarannya, dalam skala besar hal ini mungkin tenggelam dalam kebisingan ketika kita melakukan pengukuran di Bumi. Plus, itu masih tidak menceritakan keseluruhan cerita, seperti yang akan kita lihat sebentar lagi. Jadi selanjutnya, mari kita lihat perbedaan sudut antara vektor pengamatan, dari Bumi ke dua Uranus untuk melihat seberapa besar sudut itu, dan jika bisa menonjol di atas ambang kesalahan pengamatan:
... tunggu! Lebih dari 300 perbedaan arcseconds, ditambah segala macam riak yang bergelombang bobrok timey terjadi. Itu tampaknya baik dalam kemampuan pengamatan waktu (walaupun saya tidak dapat menemukan sumber yang dapat diandalkan tentang ini begitu cepat; siapa pun?)
Sebagai tambahan, saya juga membuat plot terakhir yang membuat Jupiter dan Saturnus keluar dari gambar. Meskipun beberapa teori gangguan telah dikembangkan di 17 th dan 18 th abad, itu tidak berkembang dengan baik dan aku ragu bahkan Le Verrier mengambil Jupiter mempertimbangkan (tapi sekali lagi, saya bisa salah; perbaiki saya jika Anda tahu lebih banyak).
Jadi, inilah plot terakhir tanpa Jupiter dan Saturnus:
Meskipun ada perbedaan, mereka kecil, dan yang paling penting tidak relevan untuk menemukan Neptunus.