Mit tud ez a szimuláció?Kepler III. törvénye: A kód nem egy fix átlagos keringési idővel számol, hanem minden egyes generált aszteroidának egyedileg számítja ki a keringési idejét a nagytengelye alapján (\(T = a^{1.5}\)). Egy Naphoz közelebbi aszteroida gyakrabban tesz meg egy kört, így sűrűbben látogatja meg a belső zónát. ....................
import math
import random
def aszteroida_szimulacio(mintameret=10000):
print(
f"--- 1 km-es objektumok pályaszimulációja ({mintameret} aszteroida) ---"
)
# 1. Globális csillagászati paraméterek és konstansok
OSSZES_1KM_NEO = 920 # A valóságban létező összes ~1 km-es NEO becsült száma
AU_TO_KM = 149597870.7 # 1 Csillagászati Egység kilométerben
KRITIKUS_TAV_AU = 150000000 / AU_TO_KM # A 150 millió km CsE-ben (~1.0027 CsE)
sikeres_napkozelitesek = 0
osszes_keringesi_frekvencia = 0
# 2. Monte Carlo szimuláció indítása
for _ in range(mintameret):
# Földközeli aszteroidákra jellemző pályaelemek statisztikai generálása:
# A nagytengely (a) jellemzően 0.5 és 3.0 CsE közé esik a belső naprendszerben
a = random.uniform(0.5, 3.0)
# Az excentricitás (e) határozza meg a pálya nyújtottságát (0 = kör, 1 = parabola)
# A NEO-k esetén a nyújtottabb pályák a gyakoribbak
e = random.betavariate(2, 2) # Reális eloszlást biztosító béta-eloszlás
# Kiszámoljuk a napközelpontot (q): a legközelebbi pont a Naphoz a keringés során
# Képlete: q = a * (1 - e)
q = a * (1 - e)
# Ellenőrizzük, hogy ez a pont közelebb van-e, mint a kritikus távolság
if q <= KRITIKUS_TAV_AU:
sikeres_napkozelitesek += 1
# Kepler III. törvénye alapján kiszámoljuk a keringési időt években: T = a^(1.5)
keringesi_ido_ev = math.pow(a, 1.5)
# Az éves frekvencia (hányszor ér napközelbe 1 év alatt): f = 1 / T
eves_frekvencia = 1.0 / keringesi_ido_ev
osszes_keringesi_frekvencia += eves_frekvencia
# 3. Statisztikai kiértékelés és skálázás a valós populációra
megkozelitesi_arany = sikeres_napkozelitesek / mintameret
atlagos_eves_frekvencia = (
osszes_keringesi_frekvencia / sikeres_napkozelitesek
if sikeres_napkozelitesek > 0
else 0
)
# Felskálázzuk a mintát a teljes 1 km-es aszteroida-populációra (920 darabra)
valos_belso_objektumok = OSSZES_1KM_NEO * megkozelitesi_arany
valos_eves_fluxus = valos_belso_objektumok * atlagos_eves_frekvencia
# Eredmények kiírása
print(
f"A szimulált aszteroidák {megkozelitesi_arany*100:.2f}%-a keresztezi a 150 millió km-es zónát."
)
print(
f"Ezek átlagos keringési ideje a generált pályák alapján: {1/atlagos_eves_frekvencia:.2f} év."
)
print("-" * 65)
print(
f"A valóságra vetítve a ~920 db 1 km-es objektumból kb. {int(valos_belso_objektumok)} db pályája megfelelő."
)
print(
f"EREDMÉNY: A szimuláció szerint ÉVENTE kb. {round(valos_eves_fluxus)} db alkalommal történik megközelítés."
)
if __name__ == "__main__":
# Fix seed, hogy a véletlenszámok ellenére minden futásnál reprodukálható legyen az eredmény
random.seed(42)
aszteroida_szimulacio(mintameret=10000)
.....................
1 km-es objektumok pályaszimulációja (10000 aszteroida) ---
A szimulált aszteroidák 63.97%-a keresztezi a 150 millió km-es zónát.
Ezek átlagos keringési ideje a generált pályák alapján: 1.14 év.
-----------------------------------------------------------------
A valóságra vetítve a ~920 db 1 km-es objektumból kb. 588 db pályája megfelelő.
EREDMÉNY: A szimuláció szerint ÉVENTE kb. 516 db alkalommal történik megközelítés. Erdó ennyi potenciális veszélyforrás.
Futtatás; https://colab.research.google.com/
Nincsenek megjegyzések:
Megjegyzés küldése