Prosjektoppgave, FYS-MEK1110 V06 ROBERT JACOBSEN
Innledning Prosjektet i FYS-MEK1110 v06 handler om å forske litt på hvordan Jupiters bane er, og hvordan denne kan sammenliknes ved andre baner i solsystemet. Sistnevnte baner er i denne oppgaven satt til asteroider. Oppgavens tidsrom var fra mandag 15/5-06 til tirsdag 16/5-06. Håper at dette kan tilfredsstille. - Robert
Oppgave a) Kode % Robert Jacobsen - robertgj@student.matnat.uio.no %%%% OPPGAVE A %%%% % Konstanter vi vet %omlopstid = 4335.4; % Jorddager ==> Jupiters omløpstid juliansk_dag = 86400; % s ==> En jorddag i sekunder juliansk_aar = 365.25; % Julianske dager jordaar = juliansk_dag * juliansk_aar; % sekunder i et juliansk år. taua = 499.004783806; % s ==> Tiden lyset bruker på 1 AU c = 299792458; % m/s ==> Lysets hastighet AU = c * taua; % En astronomisk enhet. GMsol = 1.32712440018E20; % Den heliosentriske gravitasjonskonstanten G = 6.67259E-11; % kg^-1 m^3 s^-2 Mjup = 1898.6E24; % Finner ut tidsrom og hvor stor N er %total_tid = omlopstid / juliansk_aar; total_tid = 30; delta_t = total_tid / 100; N = round(total_tid * 10); % Lager arrays t = zeros(n, 1); r = zeros(n, 3); v = zeros(n, 3); % Setter første posisjon r(1,:) = [-5.758295190842140E+11-5.704511997951533E+11 1.525358540575477E+10]; v(1,:) = [9.038714838773942E+03-8.674265884570330E+03-1.662886596994482E+02]; % AU-konvertering ny_total_tid = total_tid * jordaar / AU; r(1,:) = r(1,:) / AU; v(1,:) = v(1,:).* jordaar / AU; t(1) = 0; % GM-fiks GM_konvertert = GMsol * (jordaar ^ 2) / (AU ^ 3); % Kryssningstid kryssningstid = zeros(1,100); j = 1; for n = 1:N a = -(GM_konvertert / (norm(r(n,:))).^3).* r(n,:); t(n + 1) = t(n) + delta_t; v(n + 1,:) = v(n,:) + a * delta_t; r(n + 1,:) = r(n,:) + v(n + 1,:).* delta_t; % Følge linjer sjekker etter når man krysser XZ-planet. if (r((n + 1), 2) > 0) if (r((n), 2) < 0) kryssningstid(j) = t(n) - (r((n), 2) / (r((n + 1), 2)... - r((n), 2))) * delta_t; j = j + 1; for i = 2:(j-1) omlopstid = kryssningstid(i) - kryssningstid(i-1) plot(r(1:n,1), r(1:n,2), '-r'); daspect([1 1 1]); xlabel('x (AU)'); ylabel('y (AU)'); title('jupters bane rundt sola'); hold on; plot([0], [0], '.y'); hold off; figure; plot3(r(1:n,1), r(1:n,2), r(1:n,3), '-r'); daspect([1 1 1]); xlabel('x (AU)'); ylabel('y (AU)'); zlabel('z (AU)'); title('jupters bane rundt sola'); hold on; plot3([0], [0], [0], '.y'); hold off;
Programforløp Når jeg kjører programmet får jeg dette som output (NB! Noen linjeskift er fjernet, for å spare plass og øke lesbarheten!): >> prosjekta omlopstid = 12.1151 omlopstid = 12.1159 omlopstid = 12.1156 omlopstid = 12.1160 omlopstid = 12.1165 omlopstid = 12.1163 omlopstid = 12.1171 Det vil si at omløpstida er ca. 12 jordår, og den går sakte men sikkert opp. Legg dessuten merke til at hvert tredje jupiterår er en nedgang fra året før, mens alle andre er oppgang fra det forrige året. Det kan he at dette ikke er av noe betydning, men det er en liten interessant detalj uansett. Plot av Jupiters bane i 3d. Legg merke til at det virker som om Jupiter er lenger ut på «venstresiden» av plottet (rundt (4, -4, 0)).
Plot av Jupiters bane rundt sola i 2d. Dette viser mye bedre hvordan banen ser ut, og bekrefter det jeg sa at den går mye lenger ut i negativ x-retning og positiv y-retning, enn den gjør i positiv x-retning og negativ y-retning. I tillegg kan man se bedre at det er litt variasjon i banen. Dette har med at det ikke nødvigvis er samme fart på samme sted to Jupiter-år på rad, og det kan få banen til å få en ulik fasong.
Oppgave b) Kode % Robert Jacobsen - robertgj@student.matnat.uio.no %%%% OPPGAVE B %%%% % Konstanter vi vet %omlopstid = 4335.4; % Jorddager ==> Jupiters omløpstid juliansk_dag = 86400; % s ==> En jorddag i sekunder juliansk_aar = 365.25; % Julianske dager jordaar = juliansk_dag * juliansk_aar; % sekunder i et juliansk år. taua = 499.004783806; % s ==> Tiden lyset bruker på 1 AU c = 299792458; % m/s ==> Lysets hastighet AU = c * taua; % En astronomisk enhet. GMsol = 1.32712440018E20; % Den heliosentriske gravitasjonskonstanten G = 6.67259E-11; % kg^-1 m^3 s^-2 Mjup = 1898.6E24; % Finner ut tidsrom og hvor stor N er %total_tid = omlopstid / juliansk_aar; total_tid = 50; delta_t = total_tid / 500; N = round(total_tid * 10); % Lager arrays t = zeros(n, 1); r = zeros(n, 3); v = zeros(n, 3); % Setter første posisjon r(1,:) = [-5.758295190842140E+11-5.704511997951533E+11 1.525358540575477E+10]; v(1,:) = [9.038714838773942E+03-8.674265884570330E+03-1.662886596994482E+02]; % AU-konvertering ny_total_tid = total_tid * jordaar / AU; r(1,:) = r(1,:) / AU; v(1,:) = v(1,:).* jordaar / AU; t(1) = 0; % GM-fiks GM_konvertert = GMsol * (jordaar ^ 2) / (AU ^ 3); for n = 1:N a = -(GM_konvertert / (norm(r(n,:))).^3).* r(n,:); t(n + 1) = t(n) + delta_t; v(n + 1,:) = v(n,:) + a * delta_t; r(n + 1,:) = r(n,:) + v(n + 1,:).* delta_t; % Følge linjer sjekker etter når man krysser XZ-planet. if (r((n + 1), 2) > 0) if (r((n), 2) < 0) kryssningstid = t(n) - (r((n), 2) / (r((n + 1), 2)... - r((n), 2))) * delta_t plot(r(1:n,1), r(1:n,2), '-r'); daspect([1 1 1]); xlabel('x (AU)'); ylabel('y (AU)'); title('jupters bane rundt sola'); hold on; plot([0], [0], '.y'); hold off; figure; plot3(r(1:n,1), r(1:n,2), r(1:n,3), '-r'); daspect([1 1 1]); xlabel('x (AU)'); ylabel('y (AU)'); zlabel('z (AU)'); title('jupters bane rundt sola'); hold on; plot3([0], [0], [0], '.y'); hold off;
Programforløp Når jeg kjører programmet får jeg: >> prosjektb kryssningstid = 4.2664 kryssningstid = 16.1830 kryssningstid = 28.0996 kryssningstid = 40.0162 Nå skal det sies at jeg skrev rutinene i a) for å finne omløpstiden etter jeg skrev oppgave b), så jeg skal vise manuelt hvordan jeg finner omløpstida. Det er ganske enkelt å ta to nærtligge verdier av kryssningstid, og trekker den minste fra den største. F.eks. Omløpstid = 40.0162 28.0996 = 12,0624 I og med at massen til Jupiter ikke er med i beregningen, vil det være pent lite vits i å redusere massen til planeten. Vi vil (og får) nøyaktig samme resultat. Plot av Jupiters bane rundt sola i 3d. Egentlig ganske lite å fortelle, sett bort fra at den (denne gang) holder temmelig stø kurs på banen. Det kan være forårsaket av at jeg har en glipp i koden min på oppgave a) eller b).
Plot av Jupiters bane rundt sola i 2d, og heller ikke her er det mye å fortelle i forhold til det jeg har sagt i a) og tidligere i oppgave b). Oppgave c) Koderinger %v(1,:) = 0.5.* v(1,:); %v(1,:) = 2.* v(1,:); (som står før for-løkka) og %a = -(GM_konvertert / (norm(r(n,:))).^3.0).* r(n,:); %a = -(GM_konvertert / (norm(r(n,:))).^2.9).* r(n,:); %a = -(GM_konvertert / (norm(r(n,:))).^3.1).* r(n,:); (som står i for-løkka) Her er det slik at man utkommenterer det man vil sjekke ut. Når det gjelder a, så må den første være ikke være kommentert ut i de første to oppgavene. Jeg tar det i rekkefølge nedenfra og opp.
Farten er halvparten så stor: Detteviser at Jupiter ville ha blitt dratt inn mot sola for deretter å blitt slunget ut igjen om farta hadde vært halvparten så stor. Banen ville blitt veldig elliptisk, og kan minne om en liten kometbane. Farten er dobbelt så stor: Det virker som om Jupiter vil få en såpass stor fart at «grepet» sola har på den forsvinner, og den har en mulighet til å bli en såkalt «rogue planet», som farer avsted uten å gå i noen bestemt bane rundt noen stjerne. Den forlater solsystemet.
Fg proporsjonal med r^(-1.9): Når Fg er proporsjonal med r^(-1.9), vil Jupiter få en irregulær bane, og med tiden dra mer og mer mot solen, for til slutt å muligens kollidere med den. Om det skulle skje, ville i alle fall jorden blitt slukt på veien. Fg proporsjonal med r^(-2.1): Når Fg er proporsjonal med r^(-2.1) vil Jupiter få en irregulær bane, og med tiden dra lenger utover, som kan tyde på at den før eller siden enten vil forlate solsystemet eller kollidere (dvs. sluke) en annen planet. På de to siste kan man summere opp at det er egentlig best at Fg er proporsjonal med r^(- 2.0), for da er solsystemet stabilt.
Oppgave d) Keplers tredje lov sier: T 2 r 3 =k Hvor det i vårt tilfelle vil si: T er omløpstiden, r er banemiddelradiusen og k er en konstant som er lik for alle planeter. Om vi utvider uttrykket og sier at T J og R J gjelder for Jupiter og T X og R X gjelder for «Planet X» som vi skal finne, får vi: 2 2 T J R = T X 3 3 J R X T J 2 R X 3 =T X 2 R J 3 R 3 X = T 2 3 X R J 2 T J R X = 3 T 2 X 2 T 3 3 R J J R X = T 2 X T J 3 R J I og med at selve skaleringa skjer i 2 3 T X T J så kan vi sette R X og R J som posisjonsvektorene.
Oppgave e) Kode function prosjekte(xtid) %%%% OPPGAVE E %%%% % Robert Jacobsen - robertgj@student.matnat.uio.no disp(xtid) % Konstanter vi vet omlopstid = 4335.4; % Jorddager ==> Jupiters omløpstid juliansk_dag = 86400; % s ==> En jorddag i sekunder juliansk_aar = 365.25; % Julianske dager jordaar = juliansk_dag * juliansk_aar; % sekunder i et juliansk år. taua = 499.004783806; % s ==> Tiden lyset bruker på 1 AU c = 299792458; % m/s ==> Lysets hastighet AU = c * taua; % En astronomisk enhet. GMsol = 1.32712440018E20; % Den heliosentriske gravitasjonskonstanten G = 6.67259E-11; % kg^-1 m^3 s^-2 Mjup = 1898.6E24; % Finner ut tidsrom og hvor stor N er total_tid = omlopstid / juliansk_aar; delta_t = total_tid / 100; N = round(total_tid * 10); % Lager arrays t = zeros(n, 1); r = zeros(n, 3); v = zeros(n, 3); r2 = zeros(n, 3); v2 = zeros(n, 3); r_init_abs = zeros(1,3); r2_init_abs = zeros(1,3); % Setter første posisjon r(1,:) = [-5.758295190842140E+11-5.704511997951533E+11 1.525358540575477E+10]; v(1,:) = [9.038714838773942E+03-8.674265884570330E+03-1.662886596994482E+02]; r2(1,:) = (((xtid * total_tid) / total_tid) ^ (2/3)).* r(1,:); % Regner ut absoluttverdiene for fartene for i = 1:3 if(r(1,i) < 0) r_init_abs(1,i) = -r(1,i); else r_init_abs(1,i) = r(1,i); if(r2(1,i) < 0) r2_init_abs(1,i) = -r2(1,i); else r2_init_abs(1,i) = r2(1,i); % Setter fartsvektoren til planet x v2(1,:) = ((r_init_abs(1,:) / r2_init_abs(1,:)) ^ (1/2)).* v(1,:); % AU-konvertering ny_total_tid = total_tid * jordaar / AU; r(1,:) = r(1,:) / AU; v(1,:) = v(1,:).* jordaar / AU; r2(1,:) = r2(1,:) / AU; v2(1,:) = v2(1,:).* jordaar / AU; t(1) = 0; % GM-fiks GM_konvertert = GMsol * (jordaar ^ 2) / (AU ^ 3); disp(r2(1,:)); disp(v2(1,:)); for n = 1:N a = -(GM_konvertert / (norm(r(n,:))).^3).* r(n,:); a2 = -(GM_konvertert / (norm(r2(n,:))).^3).* r2(n,:); t(n + 1) = t(n) + delta_t; v(n + 1,:) = v(n,:) + a * delta_t; r(n + 1,:) = r(n,:) + v(n + 1,:).* delta_t; v2(n + 1,:) = v2(n,:) + a2 * delta_t; r2(n + 1,:) = r2(n,:) + v2(n + 1,:).* delta_t; % Følge linjer sjekker etter når man krysser XZ-planet. if (r((n + 1), 2) > 0) if (r((n), 2) < 0) kryssningstid = t(n) - (r((n), 2) / (r((n + 1), 2)... - r((n), 2))) * delta_t
plot(r(1:n,1), r(1:n,2), '-r'); daspect([1 1 1]); xlabel('x (AU)'); ylabel('y (AU)'); title('jupters bane rundt sola'); hold on; plot([0], [0], '.y'); plot(r2(1:n,1), r2(1:n,2), '-b'); hold off; figure; plot3(r(1:n,1), r(1:n,2), r(1:n,3), '-r'); daspect([1 1 1]); xlabel('x (AU)'); ylabel('y (AU)'); zlabel('z (AU)'); title('jupters bane rundt sola'); hold on; plot3([0], [0], [0], '.y'); plot3(r2(1:n,1), r2(1:n,2), r2(1:n,2), '-b'); hold off; Jeg har valgt å sjekke banene til 1/2, 3/4 og 5/6 av Jupiters omløpstid. I de følge plots, er Jupiters bane rød, og asteroiden er blå. 1/2:
3/4: 5/6: Som vi ser, så blir banen større jo større omløpstiden er, og mindre jo mindre den er. Som en sjekk for om dette stemmer, så legger jeg inn at vi skal lage en omløpstid som er lik Jupiters, og da burde vi få kun én blå strek (i og med at den røde blir tegnet først):
Og det fikk vi, dermed stemmer dette. I tillegg la jeg nettopp merke til at jeg har skrevet feil i tittelen, slik at det står Jupters bane rundt sola. Men je føler ikke at jeg kan re det når det er 64 minutter igjen til innleveringsfristen. Oppgave f) Kode function prosjektf(xtid) %%%% OPPGAVE F %%%% % Robert Jacobsen - robertgj@student.matnat.uio.no % Konstanter vi vet % omlopstid = 4335.4; % Jorddager ==> Jupiters omløpstid juliansk_dag = 86400; % s ==> En jorddag i sekunder juliansk_aar = 365.25; % Julianske dager jordaar = juliansk_dag * juliansk_aar; % sekunder i et juliansk år. taua = 499.004783806; % s ==> Tiden lyset bruker på 1 AU c = 299792458; % m/s ==> Lysets hastighet AU = c * taua; % En astronomisk enhet. GMsol = 1.32712440018E20; % Den heliosentriske gravitasjonskonstanten G = 6.67259E-11; % kg^-1 m^3 s^-2 Mjup = 1898.6E24; % Finner ut tidsrom og hvor stor N er % total_tid = omlopstid / juliansk_aar; total_tid = 50; delta_t = total_tid / 500; N = round(total_tid * 10); % Lager arrays t = zeros(n, 1); r = zeros(n, 3); v = zeros(n, 3); r2 = zeros(n, 3); v2 = zeros(n, 3); r_init_abs = zeros(1,3); r2_init_abs = zeros(1,3); % Setter første posisjon r(1,:) = [-5.758295190842140E+11-5.704511997951533E+11 1.525358540575477E+10]; v(1,:) = [9.038714838773942E+03-8.674265884570330E+03-1.662886596994482E+02]; r2(1,:) = (((xtid * total_tid) / total_tid) ^ (2/3)).* r(1,:);
% Regner ut absoluttverdiene for fartene for i = 1:3 if(r(1,i) < 0) r_init_abs(1,i) = -r(1,i); else r_init_abs(1,i) = r(1,i); if(r2(1,i) < 0) r2_init_abs(1,i) = -r2(1,i); else r2_init_abs(1,i) = r2(1,i); % Setter fartsvektoren til planet x v2(1,:) = ((r_init_abs(1,:) / r2_init_abs(1,:)) ^ (1/2)).* v(1,:); % AU-konvertering ny_total_tid = total_tid * jordaar / AU; r(1,:) = r(1,:) / AU; v(1,:) = v(1,:).* jordaar / AU; r2(1,:) = r2(1,:) / AU; v2(1,:) = v2(1,:).* jordaar / AU; t(1) = 0; % Antakelse av asteroiden ast_diameter = 50000; % meter ast_massetetthet = 4000; %kg / m^3 Mast = (4*pi*(0.5*ast_diameter)^3 / 3) * ast_massetetthet; % GM-fiks GM_konvertert = GMsol * (jordaar ^ 2) / (AU ^ 3); GM_jup = G*Mjup * (jordaar ^ 2) / (AU ^ 3); GM_ast = G*Mast * (jordaar ^ 2) / (AU ^ 3); q = 1; j = 1; kryssningstid = zeros(1,100); % Jupiter kryssningstid2 = zeros(1,100); % Asteroiden for n = 1:N R_diff = r(n,:) - r2(n,:); R_ffid = r2(n,:) - r(n,:); R_j = norm(r(n,:)); R_a = norm(r2(n,:)); R_aj = R_j - R_a; %a = -(GM_konvertert / (norm(r(n,:))).^3).* r(n,:); a = -((GM_konvertert / (norm(r(n,:))).^3).* r(n,:)) +... -((GM_ast / (norm(r_diff)).^3).* r(n,:)); %a2 = -(GM_konvertert / (norm(r2(n,:))).^3).* r2(n,:); a2 = -((GM_konvertert / (norm(r2(n,:))).^3).* r2(n,:)) +... ((GM_jup / (norm(r_diff)).^3).* r2(n,:)); t(n + 1) = t(n) + delta_t; v(n + 1,:) = v(n,:) + a * delta_t; r(n + 1,:) = r(n,:) + v(n + 1,:).* delta_t; v2(n + 1,:) = v2(n,:) + a2 * delta_t; r2(n + 1,:) = r2(n,:) + v2(n + 1,:).* delta_t; % Følge linjer sjekker etter når man krysser XZ-planet. if (r((n + 1), 2) > 0) if (r((n), 2) < 0) kryssningstid(j) = t(n) - (r((n), 2) / (r((n + 1), 2)... - r((n), 2))) * delta_t; j = j + 1; if (r2((n + 1), 2) > 0) if (r2((n), 2) < 0) kryssningstid2(q) = t(n) - (r2((n), 2) / (r2((n + 1), 2)... - r2((n), 2))) * delta_t; q = q + 1; if (kryssningstid(2) > 0) omlopstid_jupiter = kryssningstid(2) - kryssningstid(1) else disp('insufficient data to perform the analysis.'); if (kryssningstid2(2) > 0) omlopstid_ = kryssningstid2(2) - kryssningstid2(1) else disp('insufficient data to perform the analysis.');
plot(r(1:n,1), r(1:n,2), '-r'); daspect([1 1 1]); xlabel('x (AU)'); ylabel('y (AU)'); title('jupiters bane rundt sola'); hold on; plot([0], [0], '.y'); plot(r2(1:n,1), r2(1:n,2), '-b'); hold off; figure; plot3(r(1:n,1), r(1:n,2), r(1:n,3), '-r'); daspect([1 1 1]); xlabel('x (AU)'); ylabel('y (AU)'); zlabel('z (AU)'); title('jupiters bane rundt sola'); hold on; plot3([0], [0], [0], '.y'); plot3(r2(1:n,1), r2(1:n,2), r2(1:n,2), '-b'); hold off; Programforløp >> prosjektf(1/2) omlopstid_jupiter = 11.9166 omlopstid_ = 5.9949 Sistnevnte er asteroiden, selvom noe rart skjedde i utskrifta. Denne ligner ganske mye på den vi hadde tidligere når vi hadde en xtid lik 1/2. Men er de helt like? La oss stille de side ved side og se!
Ser vi nøye etter har begge banene. Den nederste figuren (med flere krefter) har tykkere streker enn den øverste (uten kreftene, fra oppgave e)), som tyder på at det er mer slingringsmonn i banene noe som er ganske naturlig når det er flere krefter som virker på legemene.
Oppgave g) Kode-ringer % Antakelse av asteroiden %ast_diameter = 50000; % meter %ast_massetetthet = 4000; %kg / m^3 %Mast = (4*pi*(0.5*ast_diameter)^3 / 3) * ast_massetetthet; Mast = 1.0E17; %kg og innsettelse av følge like før for-løkka: % Gjøre r2 5 % større eller mindre %r2(1,:) = r2(1,:).* 0.95; %r2(1,:) = r2(1,:).* 1.05; På siste del skal vi fjerne etter hva vi har lyst til. Det jeg får blir see slik ut: Vanlig: >> prosjektg(1/2) omlopstid_jupiter = 11.9166 omlopstid_ = 5.9949
Pluss 5 %: >> prosjektg(1/2) omlopstid_jupiter = 11.9166 omlopstid_ = 6.9185 Minus 5 %: >> prosjektg(1/2) omlopstid_jupiter = 11.9166 omlopstid_ = 5.1935
Det vi ser som skjer på disse, er at når vi øker med 5 %, så blir banen logisk nok større, men det blir også «slingringsmonnet». Men når vi reduserer med 5 %, så blir banen ikke bare mindre, men den får også et mye større slingringsmonn. Men den mest irregulære banen er klart når man ikke har noen økning/reduksjon i initialbetingelsene. Grunnen til det store slingringsmonnet ved minus 5 % er mest sannsynlig at når asteroiden blir påvirket av sola såpass mye, blir den logisk nok dratt litt lenger inn, men når Jupiter passerer den, så vil Jupiter dra den litt lenger ut også. Dette skaper da et urolig område og en «wobly» effekt. Oppgave h) Koden i denne oppgaven er identisk med den fra g). I og med at jeg plottet 1/2 i g), så tar jeg ikke denne med her. 2/3 :
3/4: 5/6:
Det vi ser på 2/3, 3/4 og 5/6, er at det virker som om banen etterhvert får alt, alt, alt for stor fart og etterhvert skyter ut av solsystemet. Det kommer klart fram på 3/4 og 5/6, og kanskje aller klarest hvor kraftig utskytelsen er på 5/6. Men du ser fine detaljer på 3/4 som viser hvordan den gikk før. Men etter et visst stykke er det uklart hva som skjer akkurat i det den går fra sirkellikne bane til noe som totalt er en ellipse. Oppgave i) Når periodetiden til en asteroide er en brøkdel av Jupiters, vil Jupiter akselerere hastigheten til asteroiden, og dermed få asteroidens bane til å bli forandret. Dette skaper gap i asteroidefeltet, og er trolig årsaken til at vi har fått slike svar som i oppgave h).