Fråga:
Hur man skalar ner solsystemdata till simulerbara värden
OldBerkay
2015-09-22 05:34:41 UTC
view on stackexchange narkive permalink

Okej, jag skäms mig allvarligt för att jag frågade denna speciella när jag geniualiserar fysik men det finns något som stör mig med den simulering jag jobbar med.

Jag återskapar solsystemet i en n-kroppssimulering som jag programmerade tidigare. Och jag har problem med att minska soldata. Så även om jag använder kg och km för de metriska enheterna är värdena mycket större än variablerna kan hålla i programmeringen. Som några av er vet, är värdet större, desto större blir det flytande punktfelet. (felbrus i data) Det gör det också långsammare att bearbeta.

Jag bestämde mig för att skala ner data med en referenspunkt, och för det tog jag jordens radie som en enhet. Och minskade vartannat avstånd och radie enligt det. (Så en enhet är 6371 km bara för att vara klar)

Men jag är inte säker på om jag ska skala ner massan eller inte. Min sunt förnuft säger att jag ska skala ner massan så att densiteten hos varje kropp ska vara densamma. Så jag tog densiteten och beräknade ett nytt massvärde för varje kropp med den nya nedskalade radien, men jag kunde på något sätt inte övertyga mig om det är sant eller inte. Så här är jag och frågar dig :) Ska jag också skala ner massan?

PS.1: Jag använde F = GMm / r ^ 2 ekvation för beräkningarna som vanligt. (Iterera det genom varje kroppspar)

Om det finns andra programmerare som jag som är intresserade av att göra en sådan simulering, hur uppnådde du detta datastorleksproblem? Finns det några bättre lösningar än att skala ner värdena?

PS. Jag har skapat en excel-fil som gör skalkonverteringen. Så jag delar arket i OneDrive. ( http://1drv.ms/1NIekGo) Om du kan kontrollera mina beräkningar och värden skulle jag också vara till stor hjälp. Tack för all hjälp.

Skala inte ner något, men gör vad NASA gör: http://ilrs.gsfc.nasa.gov/docs/2014/196C.pdf, och använd avstånd i astronomiska enheter (AU), tid i sekunder och massor i relativ proportion till varandra, inte i kg.
@barrycarterS Vilket G-konstantformat ska jag använda i F = GMM / r ^ 2-ekvationen? Jag menar att om jag använder massa i relativa proportioner och längder i AU blir vanliga G-konsantenheter föråldrade. Jag måste konvertera den, men hur gör jag det med relativa massvärden?
Är du tydlig på hur enhetskonvertering fungerar? Till exempel, om du får värdet av gravitationskonstanten i enheter av meter ^ 3 / (kg * sekunder ^ 2), skulle du veta hur du konverterar det till värdet av gravitationskonstanten i enheterna AU ^ 3 / (Jordmassor * år ^ 2)?
Tre svar:
dpwilson
2015-09-22 18:26:34 UTC
view on stackexchange narkive permalink

Som barrycarter nämnde i sin kommentar borde du vara mer bekymrad över enheter och mindre med skala.

Generellt är det bäst att hålla sig till konventionella enheter som människor känner igen. (Det kommer att hålla huvudet rakt och göra det lättare för andra att granska ditt arbete.) I astronomi är dessa lite annorlunda än de vanliga SI-enheterna, eftersom saker är — ska vi säga- stora , och siffror går snabbt ur hand (som du har noterat). Här är några enheter som föreslås i Astronomiska systemet med enheter Wikipedia-sidan:

  • Tid : Dag. Det här är nog inte så viktigt, så använd gärna sekunder här. (När allt kommer omkring är det bara en storleksskillnad på fem ordningar.)
  • Massa : Det finns flera konventioner, men den jag personligen sett mest är solmassor. Eftersom du modellerar vårt solsystem gör det en bekväm referens.
  • Längd : Jag skulle definitivt använda astronomiska enheter. (Vilket passande namn!)

Om du håller dig till dessa enheter bör du kunna begränsa fel på grund av avrundning och minska beräkningsbelastningen för stora antal.

Tack för svaret. Ja, det är mycket vettigare att använda au. Men det finns fortfarande något som stör mig. På wikisidan du länkade är 1 solmassa 1.988 * E30 och GM☉ är 1.327 × E20 kg m3s − 2 Så det är i meter- och kilogramformat. När jag använder ekvation F = GMm / r ^ 2; Borde jag inte konvertera G-format till au och solmassa Om jag använder au i r (avstånd) och solmassa i kroppsmassor? Jag menar Det är i grund och botten samma problem med skalproblemet som jag nämnde i huvudfrågan . Det finns något som jag inte kan övertyga mig om och inte vet varför.
För att göra det tydligare: Om du kollade mitt excell-ark, medan jag skalar ner längderna, skalar jag också ner massorna, så kroppstätheten förblir densamma. Är det verkligen nödvändigt? Längd och massa är två oberoende enheter. Det ska inte påverka varandra när jag skalar ner den. Men å andra sidan bör densiteten förbli densamma. Så de är beroende av varandra efter täthet?
Du behöver inte alls vara bekymrad över densiteten. Konvertera bara dina enheter tills de har hanterbara skalor.
Mike G
2016-04-11 07:51:02 UTC
view on stackexchange narkive permalink

Tänk på en nästan cirkulär bana. I genomsnitt $ v = 2 \ pi r / T $ och gravitationskraften balanserar centrifugalkraften: $$ {GM m \ över r ^ 2} = {mv ^ 2 \ över r} = {4 \ pi ^ 2 mr \ över T ^ 2} $$ Lös för $ G $ och ersätt värden för jordens bana runt solen: $$ G = {4 \ pi ^ 2 r ^ 3 \ över MT ^ 2} = 4 \ pi ^ 2 { \ mathrm {AU} ^ 3 \ över M _ {\ odot} \ \ mathrm {y} ^ 2} $$ Om du vill ha dagsenheter istället, använd en konverteringsfaktor för att avbryta åren: $$ G = 39,5 {\ mathrm { AU} ^ 3 \ över M _ {\ odot} \ \ mathrm {y} ^ 2} \ vänster ({1 \ \ mathrm {y} \ över 365,25 \ \ mathrm {d}} \ höger) ^ 2 = 2,96 \ gånger 10 ^ {- 4} {\ mathrm {AU} ^ 3 \ över M _ {\ odot} \ \ mathrm {d} ^ 2} $$ Faktormärkningsmetoden fungerar också om du börjar med MKS-värdet: $$ G = 6,67 \ gånger 10 ^ {- 11} \ mathrm {m ^ 3 \ över kg \ s ^ 2} \ left ({1 \ \ mathrm {AU} \ over 1.496 \ times 10 ^ {11} \ \ mathrm {m }} \ höger) ^ 3 \ vänster ({1.99 \ gånger 10 ^ {30} \ \ mathrm {kg} \ över 1 \ M _ {\ odot}} \ höger) \ vänster ({86400 \ \ mathrm {s} \ över 1 \ \ mathrm {d}} \ right) ^ 2 = {2.96 \ times 10 ^ {- 4} {\ mathrm {AU} ^ 3 \ over M _ {\ odot} \ \ mathrm {d} ^ 2}} $$ Valideringstest w dåligt berätta om din simulering fungerar korrekt. Ställ in en mängd olika enkla system där du har en klar uppfattning om vad som ska hända och kontrollera sedan vad som faktiskt händer.

RononDex
2016-04-11 16:20:01 UTC
view on stackexchange narkive permalink

Jag programmerade en för mig för en tid sedan. Jag använde fulla SI-enheter i kombination med dubbel (64-bitars flytande nummer). De fungerar bra för skalan i vårt solsystem och är fortfarande extremt exakta.

  var sun = new Star (); sun.Position = ny Vector3D (0,0,0); sun.Velocity = new Vector3D (0,0,0); sun.Mass = 1.998855e30; var jord = ny planet (); earth.Mass = 5.9722e24; earth.Position = ny Vector3D (0, 149.6e9, 0); earth.Velocity = new Vector3D (29780,0,0); system.World.Objects.Add (sun); system.World.Objects.Add (earth);  

Om du är interstedad finns min kod för denna simulering på github: https://github.com/RononDex/Simulation

Själva simuleringen finns i undermappen Simulation.Testing

"sun.Mass = 1.998855e30;" Det är fortfarande inte nedskalat ...
@Hohmannfan Som jag sa använde jag SI-värden, det är inte nedskalat.
Vad jag menar är att i många av de erforderliga beräkningarna måste du multiplicera flera nummer av den typen av storlek innan du återgår till rimliga siffror. Även om själva konstanten ligger inom gränser kan de ändå orsaka oväntade fel i beräkningarna.
@Hohmannfan Jag föreslår att du läser några resurser om ämnet dubbel precision (64-bitars flottör), även för värden som solens massa med 10 ^ 30 är precisionen fortfarande bättre än 0,0001 kg (om 1 = 1 kg)
OK, exponenten tilldelas 11 bitar, och det är fortfarande en storlek på 4 bitar större än det värsta beräkningsexemplet jag kan tänka mig. Jag förstår.


Denna fråga och svar översattes automatiskt från det engelska språket.Det ursprungliga innehållet finns tillgängligt på stackexchange, vilket vi tackar för cc by-sa 3.0-licensen som det distribueras under.
Loading...