2026. szeptember 7., hétfő

A térbeli divergencia elmélete

A térbeli divergencia egy vektormező adott pontbeli megváltozását – forrás- vagy nyelő jellegét – mérő differenciál operátor, amely megadja, hogy mennyi vektor áramlik ki egy adott kis térfogatból. Van pozitív és negatív divergencia, és zéró divergencia, ahol a beáramlás és a kiáramlás egyensúlyban van (forrásmentes vagy szolenoidális mező). Ahhoz hogy metrikus legyen skalárissá kell alakítani. A divergencia kiszámítása numerikus gradiensek segítségével történik.
--------------
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# 1. Háromdimenziós koordinátarács (Grid) létrehozása
x = np.linspace(-2, 2, 10)
y = np.linspace(-2, 2, 10)
z = np.linspace(-2, 2, 10)
X, Y, Z = np.meshgrid(x, y, z)

# 2. A vektormező komponenseinek definiálása (F = [U, V, W])
# Példa: F(x,y,z) = [x, y, z] -> Forrás mező
U = X
V = Y
W = Z

# 3. A divergencia kiszámítása numerikus gradiensek segítségével
# A np.gradient visszaadja a parciális deriváltakat az egyes tengelyek mentén
dU_dx, _, _ = np.gradient(U, x, y, z)
_, dV_dy, _ = np.gradient(V, x, y, z)
_, _, dW_dz = np.gradient(W, x, y, z)

# Divergencia: div(F) = dU/dx + dV/dy + dW/dz
divergence = dU_dx + dV_dy + dW_dz

# 4. Az eredmények kiíratása a konzolra (középső pont mintáján)
print(f"A mező divergenciája a középpontban: {divergence[5, 5, 5]:.2f}")

# 5. Vizualizáció 3D-ben
fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(111, projection='3d')

# Vektormező kirajzolása nyilakkal (Quiver plot)
# A szín a divergencia értékét tükrözi (mivel itt konstans, egységes lesz)
quiver = ax.quiver(X, Y, Z, U, V, W, length=0.1, normalize=True, cmap='jet')

# Tengelyek feliratozása
ax.set_xlabel('X tengely')
ax.set_ylabel('Y tengely')
ax.set_zlabel('Z tengely')
ax.set_title('3D Vektormező és Divergencia vizualizáció')

plt.show()
---------------


Monitorozás a Wiresharkban

A ping (ICMP) csomagok Wiresharkban való elfogásához indítsd el a rögzítést a megfelelő hálózati interfészen, majd használd az icmp szűrőt.

Lépések

1. Interfész kiválasztása: Nyisd meg a Wireshark programot, és a kezdőképernyőn válaszd ki azt az aktív hálózati kártyát (Wi-Fi vagy Ethernet), amin a forgalom zajlik.
2. Rögzítés indítása: Kattints a bal felső sarokban lévő kék cápauszony ikonra (Start capturing packets).
3. Ping küldése: Nyiss meg egy parancssort (terminált vagy Windows Command Promptot), és indíts el egy ping tesztet (pl. ping 8.8.8.8).
4. Szűrés beállítása: A felső Display Filter mezőbe írd be, hogy:
text
icmp
 
majd nyomj Entert. Ekkor csak az ICMP (Echo Request és Echo Reply) csomagok maradnak láthatók. 

Hasznos szűrők

icmp.type == 8: Csak a kimenő ping kérések (Echo Request).
icmp.type == 0: Csak a beérkező válaszok (Echo Reply).

A ping (ICMP) csomagok Wiresharkban való elfogásához indítsd el a rögzítést a megfelelő hálózati interfészen, majd használd az icmp szűrőt.LépésekInterfész kiválasztása: Nyisd meg a Wireshark programot, és a kezdőképernyőn válaszd ki azt az aktív hálózati kártyát (Wi-Fi vagy Ethernet), amin a forgalom zajlik.

Rögzítés indítása:

 Kattints a bal felső sarokban lévő kék cápauszony ikonra (Start capturing packets).

Ping küldése: 

Nyiss meg egy parancssort (terminált vagy Windows Command Promptot), és indíts el egy ping tesztet (pl. ping 8.8.8.8).

Szűrés beállítása: 

A felső Display Filter mezőbe írd be, hogy:texticmp  majd nyomj Entert. 
Ekkor csak az ICMP (Echo Request és Echo Reply) csomagok maradnak láthatók

A Wireshark titkai: 

Hogyan elemezzem a hálózati forgalmat ...Egyszer egy VPN-kapcsolatnál ez volt a gond: a SYN csomagok eljutottak, de a válaszok nem tértek vissza, mert egy firewall blokkol.Példa arra, hogyan kell szűrőket beállítani még a rögzítés előtt (Capture Filter),A rögzítés előtti szűréssel (Capture Filter) rengeteg memóriát és erőforrást spórolhatsz meg, mert a Wireshark ilyenkor csak a ping csomagokat menti el, a többi hálózati forgalmat (pl. böngészés, videók) teljesen figyelmen kívül hagyja.A rögzítés előtti szűrők szintaxisa (BPF - Berkeley Packet Filter) eltér a rögzítés utáni (Display Filter) szűrőkétől.

Lépések a Capture Filter beállításához

Nyisd meg a Wiresharkot, de még ne indítsd el a rögzítést.Keresd meg a főképernyő közepén található zöld sávot: "using this filter:" beviteli mező.Írd be a mezőbe a következő szót:texticmp
 Ha a mező háttere zöldre vált, a szintaxis helyes. Duplán kattints arra a hálózati interfészre (pl. Wi-Fi, Ethernet), amelyen a pinget futtatni fogod. A Wireshark ekkor elindítja a rögzítést, és kizárólag az ICMP (ping) csomagokat fogja mutatni. További hasznos Capture Filter példák pingeléshez Ha pontosabban szeretnéd meghatározni, hogy mit mentsen el a program, kombinálhatod a szűrőket: Csak egy adott IP-cím pingelése: Ha csak a 8.8.8.8-ra küldött vagy onnan érkező pingeket akarod látni: texticmp and host 8.8.8.8  Csak IPv6 alapú ping (ping6) elfogása: texticmp6

  Egy adott gép ping forgalmának kizárása: 

 Ha a 192.168.1.50 címről érkező pingeket nem akarod rögzíteni:texticmp and not src host 192.168.1.50  

 -------------------------------------------------------- 

FTP adatcsomag elfogása 

Az FTP-forgalom Wiresharkkal történő elfogása kiválóan szemlélteti, hogy miért nem biztonságos ez a protokoll: a felhasználónevek, jelszavak és a küldött fájlok teljesen titkosítatlanul, plain text (sima szöveg) formátumban utaznak a hálózaton.Az FTP két különböző csatornát használ, amit fontos észben tartani a szűrésnél: a 21-es portot a parancsokhoz (bejelentkezés, utasítások) és a 20-as portot (vagy dinamikus portokat) a tényleges adatátvitelhez (fájlok listázása, letöltése).Lépések a rögzítéshez és szűréshezRögzítés előtti szűrő (Capture Filter): Ha már az indítás előtt le akarod szűkíteni a forgalmat csak az FTP-re, írd be a zöld sávba:textport 21 or port 20
 Indítsd el a rögzítést, majd a parancssorban vagy egy FTP-kliensben (pl. FileZilla) csatlakozz egy FTP-szerverhez és jelentkezz be.Rögzítés utáni szűrő (Display Filter): A felső keresősávba írd be, majd nyomj Entert:textftp




 A jelszó és felhasználónév megkeresése
Menjen a "FOLLOW"-ra, majd a "TCP STREAM"-re. Ha odaért, keresse meg a piros szövegrészeket, ott van a jelszó és a felhasználónév, amit a védelem nélküli bejelentkezési oldalon megadott.
Ha az ftp szűrő aktív, a Wireshark ablakában azonnal láthatod a bejelentkezési adatokat: Keresd meg a USER kezdetű csomagot (pl. Request: USER admin) – ez a felhasználónév. Közvetlenül alatta lesz a PASS kezdetű csomag (pl. Request: PASS TitkosJelszo123) – ez a jelszó.
 Tipp: A teljes beszélgetés egybefüggő olvasása (Follow TCP Stream)Ahelyett, hogy csomagonként keresgélnél, a Wireshark képes egyetlen átlátható szöveggé összefűzni a teljes folyamatot:
Kattints a jobb egérgombbal bármelyik listázott FTP csomagra. Válaszd a Follow -> TCP Stream lehetőséget. Egy új ablak nyílik meg, ahol vörös színnel láthatod a te kliensed által küldött parancsokat (felhasználónév, jelszó), és kék színnel a szerver válaszait.




A HTTP-forgalom elfogása és elemzése 

A Wiresharkban megmutatja, hogyan utaznak a weblapok adatai titkosítatlanul a hálózaton. Az FTP-hez hasonlóan a HTTP is plain text (sima szöveg) formátumban küldi a kéréseket és a válaszokat, így a beírt adatok, sütik (cookies) és űrlapok tartalma könnyen olvasható. Mivel a modern weboldalak szinte kivételével már a titkosított HTTPS-t használják, a sima  HTTP teszteléséhez egy kifejezetten erre fenntartott, titkosítatlan tesztoldalt (pl. http://vulnweb.com vagy http://example.com) érdemes megnyitni. Lépések a rögzítéshez és szűréshezRögzítés előtti szűrő (Capture Filter): Ha már az indítás előtt csak a HTTP-forgalomra akarsz koncentrálni (amely alapértelmezetten a 80-as portot használja), írd be a főképernyő zöld sávjába:textport 80
 Indítsd el a rögzítést, majd a böngésződben nyiss meg egy sima HTTP-s weboldalt, és végezz el egy műveletet (pl. kattints egy linkre vagy tölts ki egy bejelentkezési űrlapot). Rögzítés utáni szűrő (Display Filter): A felső keresősávba írd be, majd nyomj Entert:texthttp



 
Mit kell keresni az elfogott csomagokban?

A HTTP-forgalomban a legfontosabb csomagok a következők:GET kérések: Amikor a böngésződ lekér egy oldalt vagy képet (pl. GET /index.php HTTP/1.1).POST kérések: Amikor adatot küldesz a szervernek (pl. űrlap kitöltése, bejelentkezés). Itt találhatóak meg a jelszavak és felhasználónevek.200 OK válasz: A szerver sikeresen visszaküldte a kért weboldalt. Bejelentkezési adatok és űrlapok megtekintéseHa valaki bejelentkezik egy HTTP oldalon, az adatai a POST kérésben lesznek:Keresd meg a listában azt a sort, ahol az Info oszlopban az áll: POST /....Kattints rá, majd az alsó Packet Details (Csomag részletei) ablakban nyisd meg az HTML Form URL Encoded sávot. Itt listázva láthatod az űrlap mezőit, például: username: admin, password: titok123. Tipp: A teljes weboldal-lekérés megtekintése (Follow HTTP Stream)A struktúra átlátásához kattints a jobb egérgombbal bármelyik HTTP csomagra, majd válaszd a Follow -> HTTP Stream lehetőséget.  A megnyíló ablakban vörössel láthatod a böngésződ által küldött fejléceket (sütik, User-Agent), kékkel pedig a szerver válaszát, valamint magát a weboldal forráskódját (HTML/CSS).




Konfiguráció törlése

Amikor egy menedzselt hálózati kapcsolón (switch) törlöd a konfigurációt és újraindítod azt, a Wiresharkban nem magát a törlési parancsot fogod látni (mivel az a konzol- vagy SSH-vonalon történik), hanem a switch "újjászületésének" és a hálózat újrarendeződésének a fázisait.A konfiguráció nélküli switch olyan, mint egy tiszta lap: nincsenek VLAN-ok, nincs IP-címe, és az alapértelmezett protokollokkal próbálja feltérképezni a környezetét.1. Mire figyelj a Wiresharkban az újraindítás alatt?A folyamat során a következő kritikus fázisokat és protokollokat fogod látni a Wireshark listájában:A csend fázisa (Link Down): Amint kiadod az újraindítás parancsot, a switch portjai lekapcsolnak. A Wiresharkban hirtelen teljesen megszűnik az adott interfész forgalma.A portok éledezése (Spanning Tree Protocol - STP): Amikor a switch újraindul, az első dolga, hogy megelőzze a hálózati hurkokat. Elkezd STP BPDU csomagokat küldözgetni.Identitás keresése (Discovery Protokollok): Mivel nincs konfigurációja, a switch elkezdi reklámozni magát a szomszédainak, hogy kiderítse, hol van. Itt CDP (Cisco) vagy LLDP (nyílt szabvány) csomagokat fogsz látni.IP-cím kérése (DHCP / ARP): Ha a switch gyári beállításon van, megpróbál IP-címet kérni a hálózattól. DHCP Discover csomagokat fogsz látni a forgalomban.2. Hogyan szűrd ezeket a Wiresharkban?A rögzítés elindítása után érdemes az alábbi Display Filter (rögzítés utáni) szűrőket használni a switch éledezésének követésére:A switch felfedezése (Gyári név és port információk)textlldp or cdp
 Mit látsz itt? Ha megnyitod az LLDP/CDP csomag részleteit, látni fogod a switch gyári modelljét, a szoftver verzióját (System Description), a switch nevét (ami konfiguráció törlés után gyakran csak "Switch" vagy a gyári MAC cím), és azt, hogy melyik fizikai porton küldte ki a csomagot.A hurokvédelem és a portok állapotatextstp
 Mit látsz itt? Azt, ahogy a switch bejelenti magát Root Bridge-nek (mivel törölve lett a prioritás beállítása, a gyári alapértelmezett 32768-as értéket fogja használni).Az IP-cím szerzési kísérlettextdhcp or arp  

 Mit látsz itt? A switch 0.0.0.0 forrás IP-címmel küld egy DHCP kérést, amiben szerepel a saját MAC címe. Ebből láthatod, hogy a switch sikeresen elindult és működik a hálózati réteg (Layer 3) is.3. Gyakorlati tipp a vizsgálathozHa közvetlenül a PC-d van összekötve a switch-el a konfiguráció törlésekor:Indítsd el a Wireshark rögzítést a PC-den.Add ki a switch-en a törlő parancsokat (Cisco esetén pl.: write erase, majd reload).Írd be a Wireshark szűrőbe: stp or lldp or dhcp.Figyeld a képernyőt: nagyjából 1-3 percig (a switch bootolási idejétől függően) semmit sem fogsz látni, majd hirtelen felbukkannak az első STP, utána az LLDP, végül a DHCP csomagok. Ez a csalhatatlan jele annak, hogy a switch sikeresen alaphelyzetbe állt és elindult.

Forgalomirányító konfigurációjának törlése 

Amikor egy forgalomirányítón (router) törlöd a konfigurációt és újraindítod (Reload), a folyamat hálózati lenyomata a Wiresharkban nagyon hasonló a switch-hez, de van néhány kulcsfontosságú különbség. A router egy Layer 3 (hálózati rétegbeli) eszköz, így a gyári alaphelyzetbe állás után a legfőbb célja nem a hurokvédelem (STP), hanem az IP-cím szerzése és a szomszédsági kapcsolatok feltérképezése.Mivel a konfiguráció törlésével minden egyedi IP-cím és interfész-beállítás elveszik, a router portjai kezdetben "némák" lesznek, majd a gyári alapbeállítások szerint kezdenek el kommunikálni.1. A router újjászületésének fázisai a WiresharkbanA router újraindulása (bootolása) után a következő protokollok fognak megjelenni a Wireshark listájában:IP-cím kérése (DHCP): Mivel a router interfészeinek nincs fix IP-címe, a külső (WAN) vagy akár a belső portjain is megpróbál IP-címet kérni a hálózattól. DHCP Discover csomagokat fogsz látni 0.0.0.0 forráscímmel.Hálózatfelderítés (LLDP / CDP): A router azonnal elkezdi hirdetni a saját alapértelmezett adatait. LLDP vagy CDP csomagokat küld, amikből kiolvasható az eszköz gyári neve (pl. "Router"), a szoftver verziója és a port száma.Helyi hálózati jelenlét (IPv6 Router Advertisement - ICMPv6): Sok modern router alapértelmezetten bekapcsolt IPv6-tal érkezik. Amint elindul, Router Advertisement (RA) csomagokat küld szét a hálózaton, hogy jelezze az ott lévő eszközöknek: ő egy átjáró (gateway).Útvonalválasztó protokollok eltűnése (Routing Protocols): Ha a törlés előtt futott a routeren OSPF, BGP vagy EIGRP, az újraindítás pillanatában a Wiresharkban látható lesz, hogy ezek a csomagok megszűnnek, és az újraindulás után sem térnek vissza (mivel törlődött a konfigurációjuk).2. Hogyan szűrd ezt Wiresharkban?A router újraindulásának és alaphelyzetbe állásának követéséhez használd az alábbi Display Filter szűrőt:textdhcp or lldp or cdp or icmpv6.type == 134



 Mit látsz az egyes részeknél?

A dhcp megmutatja, hogy a router megpróbál-e IP-címet kapni valamilyen külső szervertől.lldp or cdp: Ha rákattintasz egy ilyen csomagra, a Packet Details (Csomag részletei) ablakban a System Name mezőnél már nem a korábbi egyedi nevet fogod látni, hanem a gyári alapértelmezettet (pl. Router).icmpv6.type == 134: Ez szűri ki a Router Advertisement csomagokat. Ha a router gyári állapotban is küld ilyet, itt láthatod az alapértelmezett IPv6 prefixeket.3. Hogyan néz ki ez a gyakorlatban? (Példa Cisco routerrel)Ha a router egy Cisco eszköz, a folyamat a következőképpen zajlik le a hálózaton:Konfiguráció törlése a routeren (Konzolon keresztül):textRouter# erase startup-config Router# reload

 Wireshark rögzítés: 

Indítsd el a rögzítést a routerhez kapcsolódó PC-den a fenti szűrővel.A bootolási szünet: A router modelltől függően 2-5 percig bootol. Ezalatt a Wiresharkban teljes csend van az adott porton.Az első jelek: Amint a IOS szoftver betölt beállítások nélkül, a Wiresharkban azonnal megjelennek az LLDP/CDP csomagok "Router" névvel, és elindulnak a DHCP kérések. Ha a routeren elindul a gyári alapbeállító varázsló (Initial Configuration Dialog), az eszköz addig ismételgeti ezeket a felfedező csomagokat, amíg egy alapvető IP-címet nem kap.




A Cisco SDM (Security Device Manager) egy régebbi, webalapú grafikus felület (GUI), amely lehetővé teszi a Cisco forgalomirányítók kényelmes konfigurálását. Ahhoz, hogy az SDM-en keresztül el tudd érni a routert, magán az eszközön a parancssorban (CLI) engedélyezned kell a HTTP/HTTPS szervert, be kell állítanod egy megfelelő jogosultságú felhasználót, és konfigurálnod kell a távoli elérést. Az SDM egy webes felület, így a routernek képesnek kell lennie kiszolgálni a HTTP-kéréseket, és azonosítania kell a belépő felhasználót a helyi adatbázisból:textip http server
ip http secure-server  ip http authentication local
 
Magas jogosultságú felhasználó létrehozása Az SDM-nek teljes hozzáférésre van szüksége a konfiguráció módosításához. Ehhez egy 15-ös szintű (legmagasabb) privilégiummal rendelkező felhasználói fiók szükséges textusername <felhasznalonev> privilege 15 secret <jelszo>
 (Ha a router teljesen gyári állapotú, előfordulhat, hogy alapértelmezetten a cisco / cisco párossal enged be az első alkalommal.) 
A virtuális terminálvonalak (VTY) beállításaAz SDM a háttérben Telnet vagy SSH protokollon keresztül küldi el a parancsokat a routernek. Engedélyezni kell a bejelentkezést a VTY vonalakon a helyi adatbázis alapján:
 login local
 transport input telnet ssh
 IP-cím és interfész beállításaBiztosítanod kell, hogy a PC-d el tudja érni a routert. Adni kell egy IP-címet annak az interfésznek (pl. FastEthernet0/0), amire a számítógépedet kötötted:textinterface FastEthernet0/0   ip address 192.168.1.1 255.255.255.0   no shutdown

Hogyan ellenőrizheted Wiresharkban?

Ha a fenti parancsok beállítása után a böngésződből megnyitod az SDM-et (beírod a router IP-címét, pl. http://192.168.1.1), a Wiresharkban a következő hálózati forgalmat fogod látni:HTTP/HTTPS kérések: A tcp.port == 80 vagy tcp.port == 443 szűrővel láthatod, ahogy a PC-d letölti a router flash memóriájából az SDM-hez szükséges Java appletet vagy HTML fájlokat. [1])Háttérkommunikáció: Miután a grafikus felület betöltött, az SDM elkezd parancsokat küldözgetni a háttérben a routernek. Ha a sima HTTP-t használtad, a tcp.port == 23 (Telnet) szűrővel és a Follow TCP Stream opcióval konkrétan olvashatod azokat a Cisco CLI parancsokat, amiket az SDM a kattintásaid alapján automatikusan végrehajt a háttérben.

Összegzés

A Wireshark egy hálózati forgalomelemző (packet sniffer) eszköz, amellyel részletesen megvizsgálhatod a hálózati adatcsomagokat. Attól függően, hogy pontosan mit szeretnél ellenőrizni (például egy IP-címet, egy protokollt, jelszavakat vagy egy hálózati hibát), a folyamat a következő lépésekből áll:1. Forgalom rögzítése (Capture)Indítsd el a Wiresharkot.Válaszd ki azt a hálózati kártyát (pl. Wi-Fi vagy Ethernet), amelyiken a forgalom zajlik.Kattints a bal felső sarokban található kék cápauszony ikonra a rögzítés elindításához.Generálj forgalmat azon az eszközön/alkalmazásban, amit ellenőrizni szeretnél.Kattints a piros négyzet ikonra a rögzítés leállításához.2. Keresés és szűrés (Display Filters)A Wireshark rengeteg adatot rögzít, ezért a legfontosabb lépés a felső szűrősáv (Display Filter) használata. Írj be egy szűrőt, majd nyomj Entert:Adott IP-cím ellenőrzése: ip.addr == 192.168.1.1 (minden forgalom, amiben ez az IP részt vesz)Adott protokoll ellenőrzése: Egyszerűen írd be a protokoll nevét kisbetűvel. Például: dns, http, icmp (ping), tls.Port szám alapján: tcp.port == 443 vagy udp.port == 53.Szűrés szövegre (pl. jelszó vagy felhasználónév keresése): frame contains "password" vagy http contains "admin".3. A csomagok részletes vizsgálataHa találtál egy érdekes csomagot a listában, kattints rá. A képernyő alsó részén két fontos panelt látsz:Középső panel (Packet Details): Itt fastruktúrában láthatod a csomag rétegeit (fizikai réteg, IP-réteg, TCP/UDP-réteg, alkalmazás réteg). A nyilakkal lenyitva minden mezőt részletesen elolvashatsz.Alsó panel (Packet Bytes): A csomag nyers tartalma hexadecimális és ASCII (szöveges) formátumban.4. A teljes beszélgetés követése (Follow Stream)Ha egy teljes folyamatot (pl. egy weboldal letöltését vagy egy csevegést) egyben szeretnél látni, nem kell a csomagokat egyesével nézegetned:Kattints a jobb egérgombbal az egyik kapcsolódó csomagra.Válaszd a Follow -> TCP Stream (vagy UDP Stream, HTTP Stream) lehetőséget.Egy új ablakban felugrik a teljes kommunikáció szöveges, könnyen olvasható formátumban (a kliens küldése piros, a szerver válasza kék színnel).Biztonsági tipp: Miért nem látsz mindent?Ha a forgalom titkosított (HTTPS/TLS): A tartalom olvashatatlan (halandzsa szöveg) lesz. Ilyenkor csak azt tudod ellenőrizni, hogy a kapcsolat létrejött-e, mekkora az adatforgalom, és ki a célpont (SNI alapján).Ha a forgalom nyílt (HTTP/FTP/Telnet): A Follow Stream funkcióval a jelszavak, textuális adatok és fájlok is teljes egészében, tisztán olvashatóak lesznek.

2026. szeptember 6., vasárnap

Mikor merül le az aksi a Voyager–2 űrszondánál? (python program)

Voyager–2 űrszonda jelenleg rendkívül szűkös energiakerettel gazdálkodik: a kilövéskori 470 wattos teljesítménye mára megközelítőleg 220-230 watt körüli értékre csökkent. Mivel az áramot biztosító rádióizotópos generátorok (RTG) hatékonysága folyamatosan romlik, a szonda évente körülbelül 4 watt energiát veszít.
----------
import datetime

def voyager_2_energia_becsles():
    # Aktuális év lekérése
    aktualis_ev = datetime.datetime.now().year
    
    # Kiindulási adatok a NASA mérései alapján
    # Feltételezett minimális működési energiaszint 1 műszerhez: kb. 230 Watt
    # Jelenlegi becsült energiaszint (2026-ban): kb. 246 Watt
    jelenlegi_energia = 246  
    eves_energia_veszteseg = 4.0  # watt / év
    
    # Határértékek
    minimum_energia_3_muszerhez = 245
    minimum_energia_1_muszerhez = 230
    teljes_leallasi_szint = 200 # Ahol a fűtés és a rádióadó sem kap elég áramot
    
    print("=" * 60)
    print(f"      VOYAGER-2 ENERGIA ELLÁTOTTSÁG BECSLŐ PROGRAM ({aktualis_ev})")
    print("=" * 60)
    
    ev = aktualis_ev
    energia = jelenlegi_energia
    
    # Éves szimuláció indítása
    while energia >= teljes_leallasi_szint:
        statusz = ""
        
        # Státusz meghatározása a fennmaradó wattok alapján
        if energia >= minimum_energia_3_muszerhez:
            statusz = "Mind a 3 megmaradt tudományos műszer működik."
        elif energia >= minimum_energia_1_muszerhez:
            statusz = "Tudományos műszerek fokozatos lekapcsolása. Csak 1 műszer aktív."
        else:
            statusz = "Műszerek leálltak. Csak a kritikus rendszerek és a rádióadó működik."
            
        print(f"Év: {ev} | Becsült energia: {energia:.1f} W | Állapot: {statusz}")
        
        # Időléptetés (következő év)
        ev += 1
        energia -= eves_energia_veszteseg

    print("=" * 60)
    print(f"Befejezés: {ev-1}-ra a Voyager-2 energiája a kritikus {teljes_leallasi_szint} W alá csökken.")
    print("A szonda teljesen elnémul, de örökre folytatja útját a csillagközi térben.")
    print("=" * 60)

if __name__ == "__main__":
    voyager_2_energia_becsles()

--------------
============================================================
      VOYAGER-2 ENERGIA ELLÁTOTTSÁG BECSLŐ PROGRAM (2026)
============================================================
Év: 2026 | Becsült energia: 246.0 W | Állapot: Mind a 3 megmaradt tudományos
 műszer működik. Működő tudományos műszerek: A Voyager–2 jelenleg 3 aktív 
tudományos műszerrel üzemel:Kozmikus sugárzást mérő alrendszer (CRS)Magnetométer 
(MAG)Plazmahullám-vizsgáló alrendszer (PWS)
Év: 2027 | Becsült energia: 242.0 W | Állapot: Tudományos műszerek fokozatos 
lekapcsolása. Csak 1 műszer aktív.
Év: 2028 | Becsült energia: 238.0 W | Állapot: Tudományos műszerek fokozatos
 lekapcsolása. Csak 1 műszer aktív.
Év: 2029 | Becsült energia: 234.0 W | Állapot: Tudományos műszerek fokozatos 
lekapcsolása. Csak 1 műszer aktív.
Év: 2030 | Becsült energia: 230.0 W | Állapot: Tudományos műszerek fokozatos
 lekapcsolása. Csak 1 műszer aktív.
Év: 2031 | Becsült energia: 226.0 W | Állapot: Műszerek leálltak. Csak a 
kritikus rendszerek és a rádióadó működik.
Év: 2032 | Becsült energia: 222.0 W | Állapot: Műszerek leálltak. Csak a
 kritikus rendszerek és a rádióadó működik.
Év: 2033 | Becsült energia: 218.0 W | Állapot: Műszerek leálltak. Csak a 
kritikus rendszerek és a rádióadó működik.
Év: 2034 | Becsült energia: 214.0 W | Állapot: Műszerek leálltak. Csak a 
kritikus rendszerek és a rádióadó működik.
Év: 2035 | Becsült energia: 210.0 W | Állapot: Műszerek leálltak. Csak a 
kritikus rendszerek és a rádióadó működik.
Év: 2036 | Becsült energia: 206.0 W | Állapot: Műszerek leálltak. Csak a 
kritikus rendszerek és a rádióadó működik.
Év: 2037 | Becsült energia: 202.0 W | Állapot: Műszerek leálltak. Csak a 
kritikus rendszerek és a rádióadó működik.
============================================================
Befejezés: 2037-ra a Voyager-2 energiája a kritikus 200 W alá csökken.
A szonda teljesen elnémul, de örökre folytatja útját a csillagközi térben.
============================================================
Sajnos a Voyager–2 a Naptól rendkívül távol, a csillagközi térben halad, 
ahol a napfény már elenyésző lenne az energiatermeléshez. Emiatt a szonda 
nem napelemeket, hanem egy RTG (rádióizotópos termoelektromos generátor) 
nevű eszközt használ. Ez a generátor a plutónium-238 radioaktív bomlása 
során keletkező hőt alakítja át elektromos árammá. Mivel nincsenek 
fényérzékeny napelemtáblái, a ráirányított lézerfényt sem tudná 
elektromossággá alakítani.

VOYAGER-2 TÁVKÖZLÉSI JELENTÉS pythonban

A Voyager–2 űrszonda jelenleg is küldi a telemetriai és tudományos adatait a csillagközi térből, több mint 140 csillagászati egységre a Földtől A mai napon milyen típusú adatok érkeznek a Voyager–2-től a Földre. (Lekérdezés)
----------------------
import datetime

def voyager2_mai_statusz():
    mai_datum = datetime.date.today().strftime("%Y. %m. %d.")
    
    # 2026-os aktuális adatok és státusz
    tavolsag_km = 21450000000  # Körülbelül 143 Csillagászati Egység
    jel_utasi_ido_ora = 19.87    # Egyirányú fényidő órában
    
    print("=" * 60)
    print(f"VOYAGER-2 TÁVKÖZLÉSI JELENTÉS - {mai_datum}")
    print("=" * 60)
    print(f"• Aktuális távolság a Földtől: ~{tavolsag_km:,} km".replace(",", " "))
    print(f"• A rádiójel útideje a Földig:  ~{jel_utasi_ido_ora} óra")
    print("• Helyszín:                     Csillagközi tér (Interstellar Space)")
    print("-" * 60)
    print("A MAI NAPON ÉRKEZŐ TELEMETRIAI ÉS TUDOMÁNYOS ADATOK:")
    print("-" * 60)
    
    # Aktív műszerek adatai 2026-ban
    aktiv_muszerek = {
        "Magnetométer (MAG)": 
            "Méri a helyi csillagközi mágneses mező irányát és erejét.",
        "Plazmahullám-alrendszer (PWS)": 
            "Az elektron-sűrűséget vizsgálja a vékony csillagközi plazma oszcillációi alapján.",
        "Kozmikus sugárzás alrendszer (CRS)": 
            "A Nap védőbuborékán kívüli, rendkívül nagy energiájú részecskék összetételét méri."
    }
    
    for muszer, leiras in aktiv_muszerek.items():
        print(f"[{muszer}]")
        print(f"  -> Adat státusza: Érkezik (Folyamatos mintavételezés)")
        print(f"  -> Leírás:        {leiras}\n")
        
    print("-" * 60)
    print("[Mérnöki / Egészségügyi adatok]")
    print("  -> RTG generátor feszültség, belső hőmérséklet és antenna-irányultság adatok.")
    print("=" * 60)

if __name__ == "__main__":
    voyager2_mai_statusz()
-----------------
============================================================
VOYAGER-2 TÁVKÖZLÉSI JELENTÉS - 2026. 09. 06.
============================================================
• Aktuális távolság a Földtől: ~21 450 000 000 km
• A rádiójel útideje a Földig:  ~19.87 óra
• Helyszín:                     Csillagközi tér (Interstellar Space)
------------------------------------------------------------
A MAI NAPON ÉRKEZŐ TELEMETRIAI ÉS TUDOMÁNYOS ADATOK:
------------------------------------------------------------
[Magnetométer (MAG)]
  -> Adat státusza: Érkezik (Folyamatos mintavételezés)
  -> Leírás:        Méri a helyi csillagközi mágneses mező irányát és erejét.

[Plazmahullám-alrendszer (PWS)]
  -> Adat státusza: Érkezik (Folyamatos mintavételezés)
  -> Leírás:        Az elektron-sűrűséget vizsgálja a vékony csillagközi plazma oszcillációi alapján.

[Kozmikus sugárzás alrendszer (CRS)]
  -> Adat státusza: Érkezik (Folyamatos mintavételezés)
  -> Leírás:        A Nap védőbuborékán kívüli, rendkívül nagy energiájú részecskék összetételét méri.

------------------------------------------------------------
[Mérnöki / Egészségügyi adatok]
  -> RTG generátor feszültség, belső hőmérséklet és antenna-irányultság adatok.
============================================================

Kepler-törvények és körmozgás pythonban

Íme egy 3D-s animált Python program, amely a Matplotlib könyvtár segítségével modellezi a Jupiter mozgását a Nap körül valós fizikai képletek (Kepler-törvények és körmozgás) alapján
-----------
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation

# --- Csillagászati adatok (közelítő értékek) ---
# Jupiter távolsága a Naptól: ~5.2 Csillagászati Egység (AU)
# Jupiter keringési ideje: ~11.86 Föld-év
R_JUPITER = 5.2 
PERIOD_JUPITER = 11.86 

# Animációs beállítások
fps = 30
duration_years = 12  # Mennyi ideig fusson a szimuláció (évben)
frames = fps * duration_years

# Időlépések kiszámítása
t = np.linspace(0, duration_years, frames)
# Szögsebesség (omega = 2 * pi / T)
omega = 2 * np.pi / PERIOD_JUPITER
theta = omega * t

# Jupiter 3D koordinátáinak kiszámítása (enyhe 1.3 fokos pályaelhajlással)
inclination = np.radians(1.3)
x_jup = R_JUPITER * np.cos(theta)
y_jup = R_JUPITER * np.sin(theta) * np.cos(inclination)
z_jup = R_JUPITER * np.sin(theta) * np.sin(inclination)

# --- 3D Grafika inicializálása ---
fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(111, projection='3d')

# Grafikon határai (AU-ban)
ax.set_xlim([-6, 6])
ax.set_ylim([-6, 6])
ax.set_zlim([-3, 3])

# Tengelyek feliratozása
ax.set_xlabel('X (AU)')
ax.set_ylabel('Y (AU)')
ax.set_zlabel('Z (AU)')
ax.set_title('A Jupiter mozgása a Nap körül 3D-ben')

# Égitestek és pálya megjelenítése
# Nap (Sárga gömb a középpontban)
ax.scatter([0], [0], [0], color='gold', s=300, label='Nap')

# Jupiter teljes pályavonala (halványan)
ax.plot(x_jup, y_jup, z_jup, color='gray', linestyle='--', alpha=0.5, label='Jupiter pálya')

# Jupiter (animált pont)
jupiter_dot, = ax.plot([], [], [], marker='o', color='chocolate', markersize=10, label='Jupiter')
# Jupiter mögötti csóva
trail, = ax.plot([], [], [], color='orange', alpha=0.7)

ax.legend(loc='upper left')

# --- Animációs függvények ---
def init():
    jupiter_dot.set_data([], [])
    jupiter_dot.set_3d_properties([])
    trail.set_data([], [])
    trail.set_3d_properties([])
    return jupiter_dot, trail

def update(frame):
    # Aktuális pozíció frissítése
    jupiter_dot.set_data([x_jup[frame]], [y_jup[frame]])
    jupiter_dot.set_3d_properties([z_jup[frame]])
    
    # Csóva frissítése az utolsó néhány pozíció alapján
    start_idx = max(0, frame - 20)
    trail.set_data(x_jup[start_idx:frame+1], y_jup[start_idx:frame+1])
    trail.set_3d_properties(z_jup[start_idx:frame+1])
    
    return jupiter_dot, trail

# Animáció elindítása
ani = animation.FuncAnimation(
    fig, update, frames=frames, init_func=init, interval=1000/fps, blit=True
)

plt.show()

---------------


Szimetrikus szimulált fundamentál plane pythonban

A fundamentális sík (fundamental plane) a galaxisok, különösen az elliptikus galaxisok tulajdonságai (például az effektív sugár, a felületi fényesség és a centrális diszperziós sebesség) közötti háromdimenziós összefüggés.Az alábbi Python kód egy szintetikus (szimulált) adatbázison mutatja be a fundamentális sík illesztését lineáris regresszió segítségével, majd vizualizálja azt egy 3D-s grafikonon.
-----------
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from mpl_toolkits.mplot3d import Axes3D

# 1. Szintetikus adatok generálása (Elliptikus galaxisok tulajdonságai)
# log_sigma: log10(centrális sebességdiszperzió)
# mu_e: effektív felületi fényesség
# log_R_e: log10(effektív sugár) -> Ezt fogjuk jósolni a sík egyenlete alapján
np.random.seed(42)
n_samples = 100

log_sigma = np.random.normal(2.1, 0.15, n_samples)
mu_e = np.random.normal(22.0, 1.0, n_samples)

# A fundamentális sík elméleti összefüggése: log(R_e) = a * log(sigma) + b * mu_e + c
# Valós csillagászati értékek kb: a = 1.2, b = 0.3
a_true, b_true, c_true = 1.2, 0.32, -8.5
log_R_e = a_true * log_sigma + b_true * mu_e + c_true + np.random.normal(0, 0.05, n_samples)

# 2. Modell illesztése (Lineáris regresszió)
X = np.column_stack((log_sigma, mu_e))
y = log_R_e

model = LinearRegression()
model.fit(X, y)

a_fit, b_fit = model.coef_
c_fit = model.intercept_

print(f"Illesztett egyenlet: log(R_e) = {a_fit:.2f} * log(sigma) + {b_fit:.2f} * mu_e + {c_fit:.2f}")

# 3. 3D Vizualizáció
fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(111, projection='3d')

# Adatpontok kirajzolása
ax.scatter(log_sigma, mu_e, log_R_e, color='blue', alpha=0.6, label='Galaxisok')

# Az illesztett sík kiszámítása a grafikonhoz
sigma_range = np.linspace(log_sigma.min(), log_sigma.max(), 10)
mu_range = np.linspace(mu_e.min(), mu_e.max(), 10)
Sigma_grid, Mu_grid = np.meshgrid(sigma_range, mu_range)
R_e_grid = a_fit * Sigma_grid + b_fit * Mu_grid + c_fit

# Sík kirajzolása
ax.plot_surface(Sigma_grid, Mu_grid, R_e_grid, color='red', alpha=0.3, rstride=100, cstride=100)

# Tengelyek feliratozása
ax.set_xlabel('log $\sigma$ (Sebességdiszperzió)')
ax.set_ylabel('$\mu_e$ (Felületi fényesség)')
ax.set_zlabel('log $R_e$ (Effektív sugár)')
ax.set_title('A galaxisok fundamentális síkja')
ax.legend()

plt.show()

---------------


A fundamental plane, lineáris Bessel-elemek alapján pythonban

A Hold árnyéktengelyének távolságát a Föld középpontjától pythonban
------------------
import numpy as np

def bessel_eclipse_distance(t, x0, y0, x1, y1):
    """
    Kiszámítja a Hold árnyéktengelyének távolságát a Föld középpontjától
    az alapsíkon (fundamental plane), lineáris Bessel-elemek alapján.
    
    Paraméterek:
    t  : Eltelt idő a bázisidőpont óta (órában)
    x0, y0 : Az árnyéktengely x és y koordinátái a bázisidőpontban (t=0)
    x1, y1 : Az x és y koordináták óránkénti változása (sebessége)
    """
    # Az árnyék pozíciójának kiszámítása a t időpontban
    x = x0 + x1 * t
    y = y0 + y1 * t
    
    # A középponttól mért távolság (Pythagoras-tétel a Bessel-féle alapsíkon)
    distance = np.sqrt(x**2 + y**2)
    
    return x, y, distance

# --- PÉLDA ADATOK (Fiktív Bessel-elemek egy napfogyatkozás maximuma körül) ---
# A koordináták a Föld egyenlítői sugarának egységében vannak megadva
x_0, y_0 = -0.045, 0.352   # Pozíció a bázisidőben (t=0)
x_1, y_1 =  0.542, -0.124  # Óránkénti elmozdulás

# Időintervallum vizsgálata: -2 órától +2 óráig a bázisidőhöz képest
idopontok = [-2, -1, 0, 1, 2]

print(f"{'Idő (óra)':<12}{'X koord.':<12}{'Y koord.':<12}{'Távolság (Földsugár)'}")
print("-" * 55)

for t in idopontok:
    x_t, y_t, tavolsag = bessel_eclipse_distance(t, x_0, y_0, x_1, y_1)
    print(f"{t:<12.1f}{x_t:<12.4f}{y_t:<12.4f}{tavolsag:<12.4f}")

# Annak ellenőrzése, hogy az árnyék eltalálja-e a Földet
# Ha a minimális távolság < 1.0 (plusz a penumbra sugara), akkor van részleges/teljes fogyatkozás
t_min = -(x_0*x_1 + y_0*y_1) / (x_1**2 + y_1**2) # A legközelebbi pont időpontja
_, _, min_dist = bessel_eclipse_distance(t_min, x_0, y_0, x_1, y_1)

print("\nEredmény elemzése:")
print(f"Az árnyéktengely legkisebb távolsága a Föld középpontjától: {min_dist:.4f} Földsugár.")
if min_dist < 1.0:
    print("Az árnyék központi tengelye eléri a Föld felszínét (Centrális napfogyatkozás).")
else:
    print("Az árnyéktengely elhalad a Föld mellett (Csak részleges vagy nincs fogyatkozás).")
----------------
Idő (óra)   X koord.    Y koord.    Távolság (Földsugár)
-------------------------------------------------------
-2.0        -1.1290     0.6000      1.2785      
-1.0        -0.5870     0.4760      0.7557      
0.0         -0.0450     0.3520      0.3549      
1.0         0.4970      0.2280      0.5468      
2.0         1.0390      0.1040      1.0442      

Eredmény elemzése:
Az árnyéktengely legkisebb távolsága a Föld középpontjától: 0.3331 Földsugár.
Az árnyék központi tengelye eléri a Föld felszínét (Centrális napfogyatkozás).

A Hold perigeum kiszámítása pythonban

A holdra szeretnék utani, mikor induljak el, mikor lesz a földgöz a legközelebb? Az alábbi Python-program külső csomagok (például ephem vagy skyfield) nélkül, tiszta matematikai közelítéssel számítja ki, hogy a megadott dátumhoz képest mikor lesz a Hold a legközelebb a Földhöz (ezt a pontot nevezzük perigeumnak vagy földközeli pontnak).
---------------------
from datetime import datetime, timedelta

def kovetkezo_holdkozelpont(aktualis_idopont):
    # Egy pontosan ismert múltbéli perigeum (földközelpont) időpontja UTC-ben
    # (2024. március 10. 07:04 UTC - Szuperhold perigeum)
    bázis_perigeum = datetime(2024, 3, 10, 7, 4)
    
    # Az anomalisztikus hónap átlagos hossza napokban (perigeumtól perigeumig)
    anomalisztikus_honap = 27.55454988
    
    # Eltelt idő kiszámítása másodpercekben, majd napokban a bázis óta
    eltelt_idő_napokban = (aktualis_idopont - bázis_perigeum).total_seconds() / 86400
    
    if eltelt_idő_napokban < 0:
        return "Kérjük, adjon meg a 2024-es bázisdátumnál későbbi időpontot!"
        
    # Kiszámoljuk, hány teljes ciklus telt el, majd megkapjuk a következőt
    befejezett_ciklusok = int(eltelt_idő_napokban / anomalisztikus_honap)
    kovetkezo_ciklus = befejezett_ciklusok + 1
    
    # Hozzáadjuk a szükséges napokat a bázisdátumhoz
    kovetkezo_datum = bázis_perigeum + timedelta(days=kovetkezo_ciklus * anomalisztikus_honap)
    
    return kovetkezo_datum

# Futtatás a jelenlegi időponttal
most = datetime.now()
eredmeny = kovetkezo_holdkozelpont(most)

print(f"A jelenlegi időpont: {most.strftime('%Y-%m-%d %H:%M:%S')}")
print(f"A Hold legközelebb ekkor lesz a legközelebb a Földhöz: {eredmeny.strftime('%Y-%m-%d %H:%M:%S')} (UTC)")
-------------
A jelenlegi időpont: 2026-09-06 14:18:39
A Hold legközelebb ekkor lesz a legközelebb a Földhöz: 2026-10-03 03:34:45 (UTC)

A Föld-Nap távolsága 2027. január 1. 00:00-kor pythonban

Az alábbi Python program kiszámítja a Föld-Nap távolságot a megadott időpontban (2026. december 31. 24:00, ami naptárilag 2027. január 1. 00:00-nak felel meg).A számítás a Kepler-féle pályaelemek alapján meghatározott standard csillagászati közelítő képletet használom, amely a J2000.0 epochától eltelt napok számából indul ki!
------------
import datetime
import math

def fold_nap_tavolsag(d):
    """
    Kiszámítja a Föld-Nap távolságot Csillagászati Egységben (CsE / AU).
    'd' a J2000.0 (2000. január 1. 12:00 UTC) óta eltelt napok száma.
    """
    # A Föld közép-anomáliája fokban
    g = 357.529 + 0.98560028 * d
    g_rad = math.radians(g)
    
    # Távolság Csillagászati Egységben (AU)
    R = 1.00014 - 0.01671 * math.cos(g_rad) - 0.00014 * math.cos(2 * g_rad)
    return R

# Időpont beállítása (2026-12-31 24:00 egyenlő 2027-01-01 00:00-val)
target_date = datetime.datetime(2027, 1, 1, 0, 0)
j2000_epoch = datetime.datetime(2000, 1, 1, 12, 0)

# Eltelt napok száma a J2000 óta
delta = target_date - j2000_epoch
napok = delta.days + delta.seconds / 86400.0

# Távolság kiszámítása
tavolsag_au = fold_nap_tavolsag(napok)

# Átváltás kilométerre (1 AU = 149 597 870.7 km)
CSE_KM = 149597870.7
tavolsag_km = tavolsag_au * CSE_KM

# Eredmények kiíratása
print(f"Időpont: 2026.12.31. 24:00")
print(f"Távolság Csillagászati Egységben: {tavolsag_au:.6f} AU")
print(f"Távolság kilométerben: {tavolsag_km:,.2f} km".replace(",", " "))

-------------------
Időpont: 2026.12.31. 24:00
Távolság Csillagászati Egységben: 0.983313 AU
Távolság kilométerben: 147 101 569.41 km

Python programmal lekérjük a NASA adatbázisából

Mikor csapódhat be a Bennu a földbe, python program
------------
import datetime

def bennu_visszaszamlalo():
    # A NASA által meghatározott legvalószínűbb becsapódási dátum
    becsapodas_datuma = datetime.date(2182, 9, 24)
    
    # A mai dátum lekérése
    mai_datum = datetime.date.today()
    
    print(f"Mai dátum: {mai_datum}")
    print(f"Bennu lehetséges becsapódása: {becsapodas_datuma}")
    print("-" * 40)
    
    if mai_datum >= becsapodas_datuma:
        print("A megadott dátum már elmúlt vagy elérkezett.")
        return

    # Napok számának kiszámítása
    hatralevo_napok = (becsapodas_datuma - mai_datum).days
    
    # Évek, hónapok és napok pontosabb megbecslése
    ev = becsapodas_datuma.year - mai_datum.year
    honap = becsapodas_datuma.month - mai_datum.month
    nap = becsapodas_datuma.day - mai_datum.day
    
    # Korrekció, ha a napok vagy hónapok negatívba csúsznának
    if nap < 0:
        # Az előző hónap napjainak számát vesszük alapul
        honap -= 1
        # Egy átlagos hónappal (30 nap) korrigálunk a szemléletesség kedvéért
        nap += 30 
    if honap < 0:
        ev -= 1
        honap += 12

    print(f"A Bennu aszteroida esetleges becsapódásáig hátralévő idő:")
    print(f"• Összesen: {hatralevo_napok:,} nap")
    print(f"• Kerekítve: {ev} év, {honap} hónap és {nap} nap.")
    print("\nNyugalom: A becsapódás esélye csupán 0.037% (1 a 2700-hoz)!")

if __name__ == "__main__":
    bennu_visszaszamlalo()
---------------
Mai dátum: 2026-09-06
Bennu lehetséges becsapódása: 2182-09-24
----------------------------------------
A Bennu aszteroida esetleges becsapódásáig hátralévő idő:
• Összesen: 56,996 nap
• Kerekítve: 156 év, 0 hónap és 18 nap.
A becsapódás esélye 1: 2700
A NASA OSIRIS-REx missziójának legfrissebb számításai szerint a 101955 Bennu aszteroida becsapódásának legvalószínűbb időpontja 2182. szeptember 24.

Apophis aszteroida ütközés szimuláció python nyelven

Ha az Apophis aszteroida Budapest közHa Budapest közepére zuhanna, a becsapódás azonnal elpusztítaná a fővárost és a teljes agglomerációt, a lökéshullám, a hősugárzás és a földrengés pedig az ország távolabbi pontjain, sőt a szomszédos országokban is súlyos károkat okozna. Bár a NASA és az ESA mérései alapján az Apophis a következő legalább 100 évben biztosan nem fog ütközni a Földdel, a fizikai paraméterei (kb. 370 méteres átmérő, 12,6 km/s-os sebesség és kb. 1200 megatonna TNT-nek megfelelő mozgási energia) alapján pontosan modellezhető a pusztítás. Az alábbi Python program az elméleti kráterméretet, a rengéshullámot és a hősugárzás hatásait számítja ki a becsapódási ponttól (Budapest centrumától) mért távolság függvényében. A rekordközelség dátuma: 2029. április 13. (péntek).A távolság: Az aszteroida hihetetlenül közel, kb. 32 000 kilométerre fog elhaladni. A legrosszabb fprgatókönyv alapján akár 1 milliárd ember is meghalhatna. 50km átmérőjű kráter, Pusztitó ereje 10000 megatonna TNT-nek felel meg. 

----------------------
import math

def apophis_impact_simulation(distance_km):
    """
    Az Apophis aszteroida budapesti becsapódásának hatásait vizsgáló szimuláció.
    Paraméter: distance_km - A megfigyelő távolsága a becsapódás központjától (km).
    """
    # Fix aszteroida és becsapódási paraméterek (Apophis értékek)
    diameter = 370       # méter
    velocity = 12600     # m/s (12.6 km/s)
    density = 3200       # kg/m^3 (kőzet/vashordalék)
    energy_megatons = 1200  # Mt TNT energia
    
    print("=" * 60)
    print(f"  APOPHIS ASZTEROIDA BECSAPÓDÁSI SZIMULÁCIÓ - BUDAPEST")
    print("=" * 60)
    print(f"Aszteroida átmérője: {diameter} méter")
    print(f"Becsapódási sebesség: {velocity / 1000:.1f} km/s")
    print(f"Felszabaduló energia: {energy_megatons} Megatonna TNT")
    print(f"Megfigyelési pont távolsága: {distance_km} km")
    print("-" * 60)

    # 1. Kráterméret becslése (egyszerűsített pi-scaling formula alapján földi kőzetre)
    # Egy 370 méteres test kb. egy 4.5 - 5 km átmérőjű és 1 km mély krátert hagy maga után.
    crater_diameter_km = 4.8
    crater_depth_km = 0.9

    print(f"[KRÁTER] Keletkező kráter átmérője: {crater_diameter_km} km")
    print(f"[KRÁTER] Kráter mélysége: {crater_depth_km} km")
    print(f"         (Pl. a teljes belváros, a Duna érintett szakasza, a Parlament és a Vár eltűnik.)")
    print("-" * 60)

    if distance_km <= crater_diameter_km / 2:
        print("Ön a kráter belsejében tartózkodik. A megsemmisülés azonnali és teljes.")
        return

    # 2. Szeizmikus hatás (Földrengés)
    # Richter-skála szerinti magnitúdó becslése az energiából: M = 0.67 * log10(E_joules) - 5.87
    energy_joules = energy_megatons * 4.184e15
    earthquake_magnitude = 0.67 * math.log10(energy_joules) - 5.87
    
    # Távolsággal csökkenő érezhető rengés (egyszerűsített Gutenberg-Richter korrekció)
    local_intensity = earthquake_magnitude - 1.5 * math.log10(max(distance_km, 1))

    print(f"[FÖLDRENGÉS] Kiváltott szeizmikus magnitúdó a centrumban: M {earthquake_magnitude:.1f}")
    if local_intensity > 6:
        print(f"   -> {distance_km} km-nél: Pusztító rengés (M {local_intensity:.1f}). Az épületek többsége összeomlik.")
    elif local_intensity > 4:
        print(f"   -> {distance_km} km-nél: Erős rengés (M {local_intensity:.1f}). Falak repedeznek, pánik.")
    else:
        print(f"   -> {distance_km} km-nél: Enyhe rengés, rezgés érezhető.")
    print("-" * 60)

    # 3. Hősugárzás (Tűzgolyó)
    # A tűzgolyó sugara kb. 2-3 km, a hősugárzás távolabb is gyújt
    thermal_radius_km = 2.5
    ignition_radius_km = 25.0 # Centrántól mért távolság, ahol a ruhák, fák meggyulladnak
    
    print(f"[HŐSUGÁRZÁS] A tűzgolyó közvetlen sugara: {thermal_radius_km} km")
    if distance_km <= ignition_radius_km:
        print(f"   -> {distance_km} km-nél: Kritikus! Harmadfokú égési sérülések, a gyúlékony anyagok spontán meggyulladnak.")
    else:
        print(f"   -> {distance_km} km-nél: Erős fényfelvillanás, első- vagy másodfokú égési sérülések veszélye.")
    print("-" * 60)

    # 4. Atmoszférikus lökéshullám (Légnyomás)
    # A hangsebesség kb. 340 m/s -> a lökéshullám érkezési ideje
    arrival_time_sec = (distance_km * 1000) / 340
    arrival_time_min = arrival_time_sec / 60
    
    # Túlnyomás becslése (egyszerűsített tapasztalati formula bar-ban)
    # 1 bar felett teljes pusztítás, 0.3 bar felett lakóházak fala ledől, 0.1 bar felett ablakok betörnek
    overpressure_bar = (energy_megatons ** 0.33) / (distance_km * 0.5)

    print(f"[LÖKÉSHULLÁM] Érkezési idő: {arrival_time_sec:.1f} másodperc ({arrival_time_min:.1f} perc)")
    print(f"              Becsült túlnyomás: {overpressure_bar:.3f} bar")
    
    if overpressure_bar > 1.0:
        print("   -> Hatás: Totális rombolás. Minden épület összedől, a szélsebesség meghaladja az 500 km/h-t.")
    elif overpressure_bar > 0.3:
        print("   -> Hatás: Súlyos szerkezeti károk. Lakóházak összeomlanak, fák gyökerestül kifordulnak.")
    elif overpressure_bar > 0.05:
        print("   -> Hatás: Az összes ablak betörik, a törmelék súlyos sérüléseket okoz.")
    else:
        print("   -> Hatás: Erős dörrenés, kisebb ablakremegés.")
    print("=" * 60)

# Példa futtatások különböző magyarországi távolságokra:
# 1. Érd / Dunakeszi (~20 km a centrumtól)
apophis_impact_simulation(distance_km=20)

# 2. Tatabánya / Kecskemét (~60 km a centrumtól)
# apophis_impact_simulation(distance_km=60)

# 3. Debrecen / Pécs (~200 km a centrumtól)
# apophis_impact_simulation(distance_km=200)

--------------------------
============================================================
  APOPHIS ASZTEROIDA BECSAPÓDÁSI SZIMULÁCIÓ - BUDAPEST
============================================================
Aszteroida átmérője: 370 méter
Becsapódási sebesség: 12.6 km/s
Felszabaduló energia: 1200 Megatonna TNT
Megfigyelési pont távolsága: 20 km
------------------------------------------------------------
[KRÁTER] Keletkező kráter átmérője: 4.8 km
[KRÁTER] Kráter mélysége: 0.9 km
         (Pl. a teljes belváros, a Duna érintett szakasza, a Parlament és a Vár eltűnik.)
------------------------------------------------------------
[FÖLDRENGÉS] Kiváltott szeizmikus magnitúdó a centrumban: M 6.7
   -> 20 km-nél: Erős rengés (M 4.7). Falak repedeznek, pánik.
------------------------------------------------------------
[HŐSUGÁRZÁS] A tűzgolyó közvetlen sugara: 2.5 km
   -> 20 km-nél: Kritikus! Harmadfokú égési sérülések, a gyúlékony anyagok spontán meggyulladnak.
------------------------------------------------------------
[LÖKÉSHULLÁM] Érkezési idő: 58.8 másodperc (1.0 perc)
              Becsült túlnyomás: 1.038 bar
   -> Hatás: Totális rombolás. Minden épület összedől, a szélsebesség meghaladja az 500 km/h-t.
============================================================


Következtetés; A katasztrófa nem állna meg a határoknál. A halálos áldozatok
döntő többségét nem maga a becsapódás, hanem a kísérőjelenségek okoznák:
A tűzvihar és hősugárzás: A becsapódás pillanatában keletkező tűzgömb több
száz kilométeres körzetben mindent felgyújtana. Magyarország teljes területe,
valamint Ausztria, Szlovákia, Románia és Szerbia jelentős része brutális
hősugárzást kapna, ami spontán tűzviharokat okozna a városokban és az erdőkben.
A lököshullám: A szuperszonikus lökéshullám (szélvihar) Magyarországon minden
épületet letarolna. Még a több száz kilométerre lévő Bécsben, Pozsonyban,
Belgrádban és a környező országok nagyvárosaiban is betörné a kirakatokat,
leszakítaná a tetőket és összeomlasztaná a gyengébb szerkezetű épületeket.
Földrengés: A becsapódás a Richter-skála szerinti 7-es vagy annál erősebb
földrengést váltana ki, ami Közép-Európa-szerte romba döntené az infrastruk-
túrát Mivel a tágabb régióban (Németországtól Ukrajnáig, Lengyelországtól
Olaszországig) több száz millió ember él, a humanitárius katasztrófa, az
éhínség és a tiszta víz hiánya miatt az 50 millió áldozat sajnos egy reális,
sőt akár optimista becslésnek is tekinthető. Egy ekkora aszteroida budapesti
becsapódása reálisan okozhatná közvetve vagy közvetlenül minimum 50 millió
ember halálát Európában.

A (469219) Kamoʻoalewa aszteroida a föld második holdja, szimuláviója pythonban

Az (469219) Kamoʻoalewa aszteroida a Föld egyik legismertebb kvázi-műholdja (quasi-satellite). Mivel pályája rendkívül közel van a Földéhez, és hosszú távon komplex gravitációs kölcsönhatásban áll a Föld-Hold rendszerrel (ko-orbitális rezonancia), egy egyszerű Kepler-féle kéttest-modell nem elegendő a pontos jövőbeli pozíció meghatározásához. Egy 500 éves szimulációhoz már numerikus integráció (N-test szimuláció) szükséges, amely figyelembe veszi legalább a Nap és a Föld (vagy a Föld-Hold rendszer) gravitációs hatását is

Az aszteroida jelenleg stabil kvázi-holdként kering a Föld mellett, de a kutatások szerint nagyjából ~300 év múlva ki fog lépni ebből az állapotból, és átvált egy úgynevezett patkó alakú (horseshoe) pályára, ahol már sokkal messzebb sodródik majd a bolygónktól, ha valami ben várt esemény meg nem változtatja jelenlegi pályáját.

Előfeltétel a pip install rebound matplotlib numpy telepitése.
Futtatás; https://colab.research.google.com/

----------------
import rebound
import numpy as np
import matplotlib.pyplot as plt

def run_kamooalewa_simulation():
    # 1. Szimuláció inicializálása
    sim = rebound.Simulation()
    
    # Időegység beállítása évekre, távolság Csillagászati Egységre (AU)
    sim.units = ('yr', 'AU', 'Msun')
    
    # 2. Központi és zavaró égitestek hozzáadása (Nap és Föld)
    # A rebound beépített 'NASA Horizons' lekérdezőjét használjuk az aktuális pozíciókhoz
    print("Égitestek adatainak lekérése a NASA JPL-től...")
    sim.add("Sun")
    sim.add("Earth") # Tartalmazza a Föld-Hold rendszer tömegközéppontját
    
    # 3. A (469219) Kamoʻoalewa hozzáadása a JPL azonosítója (SPK-ID: 20469219) alapján
    sim.add("20469219") 
    
    # Tömegközéppontba helyezés, hogy elkerüljük a koordináta-rendszer elcsúszását
    sim.move_to_com()
    
    # Integrátor beállítása (IAS15 egy adaptív lépésközű, rendkívül pontos integrátor)
    sim.integrator = "ias15"
    
    # 4. Idővonal beállítása (500 év, pl. 1000 adatponttal)
    years = 500
    num_points = 1000
    times = np.linspace(0, years, num_points)
    
    # Tömbök az eredmények tárolására
    # A Földhöz viszonyított relatív pozíciót fogjuk vizsgálni (ko-orbitális mozgás)
    earth_distances = np.zeros(num_points)
    asteroid_x = np.zeros(num_points)
    asteroid_y = np.zeros(num_points)
    
    print(f"Szimuláció indítása {years} évre előre...")
    
    # 5. Integráció futtatása lépésenként
    for i, t in enumerate(times):
        sim.integrate(t)
        
        # Égitestek objektumainak kinyerése
        sun = sim.particles[0]
        earth = sim.particles[1]
        asteroid = sim.particles[2]
        
        # Kamo'oalewa távolsága a Földtől
        dx = asteroid.x - earth.x
        dy = asteroid.y - earth.y
        dz = asteroid.z - earth.z
        earth_distances[i] = np.sqrt(dx**2 + dy**2 + dz**2)
        
        # Heliorcentrikus (Nap körüli) pozíció mentése
        asteroid_x[i] = asteroid.x
        asteroid_y[i] = asteroid.y

    print("Szimuláció kész! Grafikonok generálása...")
    
    # 6. Vizualizáció
    fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 6))
    
    # Első grafikon: Nap körüli pálya (Heliocentrikus)
    ax1.plot(asteroid_x, asteroid_y, label="Kamoʻoalewa pálya", color='blue', alpha=0.6)
    ax1.plot(0, 0, 'yo', label="Nap", markersize=10)
    ax1.set_xlabel("X (AU)")
    ax1.set_ylabel("Y (AU)")
    ax1.set_title("Heliocentrikus pálya az elkövetkező 500 évben")
    ax1.axis('equal')
    ax1.grid(True)
    ax1.legend()
    
    # Második grafikon: Föld-Aszteroida távolság az idő függvényében
    ax2.plot(times, earth_distances, color='crimson')
    ax2.set_xlabel("Idő (év a jelentől)")
    ax2.set_ylabel("Távolság a Földtől (AU)")
    ax2.set_title("Föld - Kamoʻoalewa távolság alakulása")
    ax2.grid(True)
    
    plt.tight_layout()
    plt.show()

if __name__ == "__main__":
    run_kamooalewa_simulation()

------------------


A Drake formula kiszámítása pythonban

A földihez hasonló technológiai civilizációk párhuzamos, egy idősíkban (egyidőben) történő létezését és kialakulását a tudományban leggyakrabban a Drake-formula segítségével határozzák meg, amely 7 ismert fő tényezőtől függ. Több mint 30 idegen civilizáció élhet a Tejútrendszerben a Nottinghami Egyetem kutatói szerint. A tudósok a potenciálisan lakható bolygók száma alapján becsülték még, hány idegen faj létezhet az univerzumban, akik képesek lehettek az emberéhez hasonló, vagy annál fejlettebb élet kialakítására. A Fermi-paradoxon feltételezhető ellentmondás a földön kívüli civilizációk létezésének magas becsült valószínűsége és az ilyen civilizációk létezésére utaló bizonyítékok hiánya között.Akár 30 idegen civilizáció is élhet a galaxisunkban a tudósok szerint, ha a feltételezések helyesek, és minden körülmény adott, úgy igen nagy esély van rá, hogy nem vagyunk egyedül – erre jutott legalábbis egy brit kutatás.
-------------
def drake_equation(R_star, f_p, n_e, f_l, f_i, f_c, L):
    """
    Kiszámítja a kommunikációra képes civilizációk számát (N) a Drake-formula alapján.
    
    Paraméterek:
    R_star : Csillagkeletkezés átlagos üteme a galaxisunkban (db/év)
    f_p    : Bolygórendszerrel rendelkező csillagok aránya (0-1)
    n_e    : Életre alkalmas bolygók átlagos száma egy bolygórendszerben
    f_l    : Azon bolygók aránya, ahol valóban kialakul az élet (0-1)
    f_i    : Azon bolygók aránya, ahol az élet intelligenssé válik (0-1)
    f_c    : Azon civilizációk aránya, amelyek technológiát fejlesztenek a kommunikációra (0-1)
    L      : A kommunikáló civilizációk várható élettartama (év)
    """
    N = R_star * f_p * n_e * f_l * f_i * f_c * L
    return N

# --- 1. Óvatos / Pesszimista becslés ---
pesszimista_adatok = {
    "R_star": 1.5,   # Évente kb. 1-2 új csillag keletkezik a Tejútrendszerben
    "f_p": 0.5,      # A csillagok felének van bolygója
    "n_e": 0.4,      # 10 bolygórendszerből csak 4-ben van lakható zónás bolygó
    "f_l": 0.1,      # Csak a lakható bolygók 10%-án alakul ki élet
    "f_i": 0.01,     # Az életnek csak 1%-a válik intelligenssé
    "f_c": 0.1,      # Az intelligens fajok 10%-a kezd el rádiójeleket sugározni
    "L": 420         # Egy civilizáció átlagosan 420 évig él/kommunikál
}

# --- 2. Optimista becslés ---
optimista_adatok = {
    "R_star": 3.0,
    "f_p": 1.0,      # Minden csillagnak van bolygója
    "n_e": 2.0,      # Rendszerenként átlagosan 2 bolygó alkalmas az életre
    "f_l": 1.0,      # Ahol lehet, ott ki is alakul az élet
    "f_i": 0.5,      # Az élet fele intelligenssé válik
    "f_c": 0.2,      # 20%-uk képessé válik a kommunikációra
    "L": 100000      # A civilizációk 100 000 évig képesek kommunikálni
}

# Számítások futtatása a Tejútrendszerre (Tejút = a mi galaxisunk)
N_pesszimista = drake_equation(**pesszimista_adatok)
N_optimista = drake_equation(**optimista_adatok)

# Eredmények kiíratása
print("-" * 50)
print("A Drake-formula eredményei a Tejútrendszerre:")
print("-" * 50)
print(f"Óvatos/Pesszimista becslés: {N_pesszimista:.5f} civilizáció")
print(f"Optimista becslés:          {int(N_optimista):,} civilizáció")
print("-" * 50)

# Kiterjesztés a megfigyelhető univerzumba (kb. 200 milliárd galaxis)
galaxisok_szama = 200_000_000_000
univerzum_pesszimista = N_pesszimista * galaxisok_szama
univerzum_optimista = N_optimista * galaxisok_szama

print(f"\nBecslés a teljes megfigyelhető univerzumra ({galaxisok_szama:,} galaxis):")
print(f"Pesszimista: {univerzum_pesszimista:,.0f} civilizáció")
print(f"Optimista:   {univerzum_optimista:,.0f} civilizáció")

---------------
--------------------------------------------------
A Drake-formula eredményei a Tejútrendszerre:
--------------------------------------------------
Óvatos/Pesszimista becslés: 0.01260 civilizáció
Optimista becslés:          60,000 civilizáció
--------------------------------------------------

Becslés a teljes megfigyelhető univerzumra (200,000,000,000 galaxis):
Pesszimista: 2,520,000,000 civilizáció
Optimista:   12,000,000,000,000,002 civilizáció

A ragadozó-préda modell pythonnal

Vadgazdálkodásnál használható ez a program, ez a modell azt szimulálja, hogyan változik a nyulak és a rókák száma az idő múlásával, ha hatással vannak egymásra. Ez egy egyszerű univerzális és szemléletes példa egy populációdinamikai modellre.  A ragadozó-préda  modell (Lotka-Volterra modell), amely tökéletesen bemutatja, hogyan lehet egy valós rendszert akár differenciálegyenletekkel modellezni Pythonban.

-----------------
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint

# 1. A modell matematikai egyenleteinek definiálása
def lotka_volterra(y, t, alpha, beta, delta, gamma):
    nyulak, rokak = y
    
    # Nyulak változási sebessége: növekedés - megevett nyulak
    d_nyulak_dt = alpha * nyulak - beta * nyulak * rokak
    
    # Rókák változási sebessége: születés a megevett nyulak után - természetes halálozás
    d_rokak_dt = delta * nyulak * rokak - gamma * rokak
    
    return [d_nyulak_dt, d_rokak_dt]

# 2. Kiindulási paraméterek beállítása
alpha = 1.1    # Nyulak természetes növekedési rátája
beta = 0.4     # Rókák vadászati hatékonysága
delta = 0.1    # Rókák szaporodási rátája a sikeres vadászat után
gamma = 0.4    # Rókák természetes halálozási rátája

# Kezdeti populáció: 10 nyúl és 5 róka
kezdeti_populacio = [10, 5]

# Időtartam: 0-tól 50 egységig, 1000 lépésben
ido = np.linspace(0, 50, 1000)

# 3. A modell futtatása (szimuláció / differenciálegyenlet megoldás)
megoldas = odeint(lotka_volterra, kezdeti_populacio, ido, args=(alpha, beta, delta, gamma))
nyulak_szama = megoldas[:, 0]
rokak_szama = megoldas[:, 1]

# 4. Az eredmények vizualizációja (Grafikon készítés)
plt.figure(figsize=(10, 5))
plt.plot(ido, nyulak_szama, label='Nyulak (Préda)', color='green', linewidth=2)
plt.plot(ido, rokak_szama, label='Rókák (Ragadozó)', color='orange', linewidth=2)

plt.title('Lotka-Volterra Ragadozó-Préda Modell')
plt.xlabel('Idő')
plt.ylabel('Populáció mérete')
plt.grid(True, linestyle='--', alpha=0.6)
plt.legend()
plt.show()

-----------------


Ha drasztikusan fogy az apróvad, csökken a ragadozók száma is, ezt nevezik a természet önszabályozásának. 

Lineáris regresszió pythonban

Lineáris regresszióval pythonban modellezzük a lakás árakat.

----------------
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression

# 1. Tanító adatok létrehozása
# X: Magyarázó változó (pl. alapterület négyzetméterben) - 2D tömb kell legyen!
X = np.array([[40], [50], [60], [70], [80], [90], [100]])
# y: Célváltozó (pl. ár millió forintban)
y = np.array([25, 32, 38, 42, 50, 55, 61])

# 2. A modell létrehozása és tanítása
model = LinearRegression()
model.fit(X, y)

# 3. Modell paramétereinek lekérdezése
m = model.coef_[0]  # Meredekség (súly)
b = model.intercept_  # Tengelymetszet (konstans)

print(f"A modell egyenlete: y = {m:.2f} * x + {b:.2f}")

# 4. Predikció (becslés) új adatra
uj_meret = np.array([[85]])
becsult_ar = model.predict(uj_meret)
print(f"Egy {uj_meret[0][0]} m2-es lakás becsült ára: {becsult_ar[0]:.2f} millió Ft")

# 5. Eredmények vizualizációja (Grafikon)
plt.scatter(X, y, color='blue', label='Eredeti adatok')  # Adatpontok kirajzolása
plt.plot(X, model.predict(X), color='red', linewidth=2, label='Regressziós egyenes')  # Illesztett egyenes

plt.title('Egyszerű lineáris regresszió')
plt.xlabel('Alapterület (m2)')
plt.ylabel('Ár (millió Ft)')
plt.legend()
plt.grid(True)
plt.show()
--------------
 A modell egyenlete: y = 0.59 * x + 1.79
Egy 85 m2-es lakás becsült ára: 52.18 millió Ft



Forgatókönyv vagy modellezés pythonban

A Python kiválóan alkalmas különböző rendszerek, adatok és folyamatok modellezésére a gazdag könyvtári ökoszisztémájának köszönhetően. A modellezés azt jelenti, hogy a valós világ egy részletét vagy egy matematikai feladatot leképezünk számítógépes kódra. A Python egyszerű szintaxisa és a speciális csomagok megkönnyítik az adatok elemzését, a gépi tanulást vagy a fizikai folyamatok szimulációját.Főbb területek és eszközök.
Adat- és gépi tanulási modellek: A Scikit-learn a legnépszerűbb könyvtár a klasszikus statisztikai és gépi tanulási modellek (például lineáris regresszió vagy döntési fák) létrehozására.
Adatkezelés: A Pandas segítségével táblázatos adatokat dolgozhatunk fel, amelyek a modellek alapját képezik. 
Matematikai és numerikus modellek: A NumPy és a SciPy segít a differenciálegyenletek, mátrixműveletek és optimalizálási feladatok megoldásában.
Objektumorientált tervezés (OOP): A saját egyedi objektumainkat a class kulcsszóval modellezhetjük, így megadhatjuk azok tulajdonságait és viselkedését.

Az alábbi Python program egy egyszerűsített, de tudományos alapokon nyugvó klímodellt (úgynevezett Energy Balance Model és jövőbeli forgatókönyv-szimulációt) valósít meg. A program kiszámítja a globális átlaghőmérséklet emelkedését, a tengerszint-növekedést és a gazdasági károk mértékét a következő 100 évre (2026–2126).

Futtatás online;https://colab.research.google.com/drive/1NIQHOoF0hukWUSM_o-yzQRAyqfOB_PC_
--------------------
import math

def szimulacio_100_ev():
    # --- Kiindulási adatok (2026-os becsült értékek) ---
    ev_start = 2026
    evek_szama = 100
    
    jelenlegi_temp_anomalia = 1.3  # °C-os emelkedés az ipari forradalom előtti szinthez képest
    jelenlegi_co2 = 425.0          # ppm (részecske per millió)
    co2_eves_növekedes = 2.5       # ppm/év (jelenlegi trend alapján)
    
    tengerszint_2026 = 0.0         # mm (kiindulópont)
    
    # --- Érzékenységi paraméterek (Klímatudományi közelítések) ---
    klima_erzekenyseg = 3.0        # °C-os melegedés a CO2 szint megduplázódásakor (IPCC becslés)
    co2_alap = 280.0               # ipari forradalom előtti CO2 szint (ppm)
    
    tengerszint_faktor = 4.0       # mm/év emelkedés fokonként (hőtágulás + jégolvadás)
    gdp_veszteseg_faktor = 0.012   # Fokonként ~1.2% globális GDP kiesés (egyszerűsített Nordhaus-féle DICE modell alapján)

    print("=" * 70)
    print(f"KLÍMASZIMULÁCIÓS PROJEKCIÓ ({ev_start} - {ev_start + evek_szama})")
    print("=" * 70)
    print(f"{'Év':<6} | {'CO2 (ppm)':<10} | {'Hőm. emelkedés (°C)':<20} | {'Tengerszint (cm)':<18} | {'GDP veszteség (%)':<16}")
    print("-" * 70)

    # --- Éves szimulációs hurok ---
    for ev in range(1, evek_szama + 1):
        aktualis_ev = ev_start + ev
        
        # 1. CO2 koncentráció növekedése
        jelenlegi_co2 += co2_eves_növekedes
        
        # 2. Új hőmérsékleti anomália kiszámítása (Logaritmikus CO2 kényszerhatás)
        # Delta T = Klíma_érzékenység * ln(C / C0) / ln(2)
        homerszeklet = klima_erzekenyseg * (math.log(jelenlegi_co2 / co2_alap) / math.log(2))
        
        # 3. Tengerszint-emelkedés kumulálódása (az aktuális hőmérséklet függvényében)
        tengerszint_2026 += homerszeklet * tengerszint_faktor
        tengerszint_cm = tengerszint_2026 / 10  # mm-ből cm-be
        
        # 4. Gazdasági kár (GDP veszteség)
        gdp_veszteseg = (gdp_veszteseg_faktor * (homerszeklet ** 2)) * 100
        
        # Eredmények kiíratása 10 évente, illetve az utolsó évben
        if ev % 10 == 0 or ev == evek_szama:
            print(f"{aktualis_ev:<6} | {jelenlegi_co2:<10.1f} | {homerszeklet:<20.2f} | {tengerszint_cm:<18.1f} | {gdp_veszteseg:<16.1f}%")

    print("=" * 70)
    print("KÖVETKEZMÉNYEK ÖSSZEGZÉSE 2126-RA:")
    print(f"- A globális átlaghőmérséklet eléri a(z) {homerszeklet:.2f}°C-ot.")
    print(f"- A tengerszint kb. {tengerszint_cm:.1f} cm-rel lesz magasabb a mainál, veszélyeztetve a part menti városokat.")
    print(f"- A klímaváltozás okozta éves gazdasági kár eléri a globális GDP {gdp_veszteseg:.1f}%-át.")
    print("-" * 70)
    print("Megjegyzés: Ez egy lineáris CO2-kibocsátáson alapuló elméleti modell.")
    print("A tényleges jövő az emberiség klímavédelmi intézkedéseitől függ.")

# Program futtatása
if __name__ == "__main__":
    szimulacio_100_ev()
------------
======================================================================
KLÍMASZIMULÁCIÓS PROJEKCIÓ (2026 - 2126)
======================================================================
Év     | CO2 (ppm)  | Hőm. emelkedés (°C)  | Tengerszint (cm)   | GDP veszteség (%)
----------------------------------------------------------------------
2036   | 450.0      | 2.05                 | 7.8                | 5.1             %
2046   | 475.0      | 2.29                 | 16.5               | 6.3             %
2056   | 500.0      | 2.51                 | 26.1               | 7.6             %
2066   | 525.0      | 2.72                 | 36.7               | 8.9             %
2076   | 550.0      | 2.92                 | 48.0               | 10.2            %
2086   | 575.0      | 3.11                 | 60.1               | 11.6            %
2096   | 600.0      | 3.30                 | 73.0               | 13.1            %
2106   | 625.0      | 3.48                 | 86.5               | 14.5            %
2116   | 650.0      | 3.65                 | 100.8              | 15.9            %
2126   | 675.0      | 3.81                 | 115.8              | 17.4            %
======================================================================
KÖVETKEZMÉNYEK ÖSSZEGZÉSE 2126-RA:
- A globális átlaghőmérséklet eléri a(z) 3.81°C-ot.
- A tengerszint kb. 115.8 cm-rel lesz magasabb a mainál, veszélyeztetve a part menti városokat.
- A klímaváltozás okozta éves gazdasági kár eléri a globális GDP 17.4%-át.
----------------------------------------------------------------------
Megjegyzés: Ez egy lineáris CO2-kibocsátáson alapuló elméleti modell.
A tényleges jövő az emberiség klímavédelmi intézkedéseitől függ.