2026. szeptember 10., csütörtök

Szimulált aszteroida veszély pythonban

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