Ráérek, sztorizok.

Mostanában elég sok írást olvastam, melyek a világ megismerésével foglalkoztak. Ezek közül meglehetősen sok fel is használta a tudomány legújabb, vagy viszonylag új eredményeit (gravitációs hullámok, higgs-bozon, genetikai kód) ahhoz, hogy megmutassa, mennyire bonyolult is a világ.
Nekem ilyenkor az a klasszikus tesztem arra, hogy megértettem-e, amit olvastam, hogy megpróbálom fejben elmagyarázni Laikus Testvérnek a dolgot. Most is kipróbáltam… és arra jutottam, hogy nem is kell leásnom 500 évvel korábbra. Nyugodtan lehet Laikus Testvér egy kortársam is. Sőt, nyugodtan lehet egy reál egyetemet végzett kortársam is.

Hogy miért? Mert ahol a mai tudomány élharcosai járnak, az simán van olyan távolságra a jelen közgondolkodástól, mint amennyire egy 500 évvel korábban élt, nyitott, művelt ember gondolkodása lehet a jelen kortól.

Most vegyük ki a képletből azt a viszonyítást, hogy ha a fenti példában én magyarázok valakinek, akkor az a leírtak alapján úgy nézne ki, mintha kettőnk között lenne az 500 év különbség. Erről szó sincs. Azzal, hogy én alaposan utánaolvastam a témának, ledolgoztam mondjuk 20 évet. Azaz ennyivel vagyok az előtt, akinek fejben magyarázok. És 480 évvel vagyok lemaradva az élmezőnyhöz.

Mondhatod, hogy ezek azért durva számok. Sajnos nem.

Tudod mi volt az egyetemi matek legkeményebb része? A differenciálegyenlet-rendszerek. De nem csak nekünk. Tudtunk róla, hogy a matek tanszék oktatói időnként meglepték egymást olyan differenciálegyenletekkel, amelyeknek kifejezetten trükkös volt a megoldása.

Na most. Newton a deriválást már a XVII. század végén teljesen természetesen használja és ír fel differenciálegyenleteket. (Nem gugliztam utána, sem ennek, sem a többinek. Nem a pontos évszám a lényeg.) A differenciálegyenletekkel, illetve a belőlük képzett egyenletrendszerekkel a XVIII. század legnagyobb matematikusai foglalkoztak. Hogy milyen szinten? Szerinted az Euler féle differenciálegyenletet hány mérnök vágja fejből? Pedig ez még az egyszerűbbek közül való. Mit szólnál például a Maxwell egyenletekhez (XIX. sz közepe), vagy a Boltzmann egyenletekhez (szintén XIX. század)?

Newton óta eltelt 300 év. Euler után 250. És ma még mindig az általuk és kortársaik által odavetett sziklákon fut zátonyra rengeteg reálegyetemista tudást szomjazó ladikja. (Aztabetyár, micsoda képzavar! Büszke vagyok magamra.)

És akkor próbáld meg elképzelni, hol járt Einstein. Aki egyébként 70 éve halott. Vagy… olvastál valamit a már szintén nem élő Hawkingtól? Értetted? Pedig idióta szintig egyszerűsítette le az elképzeléseit. Hogy hátha mi, egyszerű mérnökök is megértjük.

Because of the quantum. Ez persze poén, meg szleng, de most kivételesen igaz. Egyszerűen egy bizonyos méret alatt (10 a -18-adik hatványon) nem érvényesek nemhogy a newtoni, de még az einsteini fizika törvényei sem. Tulajdonképpen semmi sem érvényes, látszólag minden összevissza történik. (Ehhez képest kifejezetten bravúr volt a higgs-bozon megtalálása, mert egy csomó tudós azt mondta, hogy ott bizony lennie kell egy bozonnak, aztán tadam, ott is volt.) De nem járunk sokkal jobban, ha felfelé nézünk, a kozmológiában szintén nagyjából a 10 a 18-adik hatványtól felfelé megint nem működik a fizika. Legalábbis az általunk ismert.

Szóval. Ott jártam, hogy magyaráztam annak a Laikus Testvérnek a világot és eljutottam oda, hogy differenciálegyenlet. Megálltam. Mint a motoros fűrész, amikor gancsot ér. Nem tudtam elmagyarázni a lényeget.
Amiben az a vicces, hogy nekem valahol ez a tanult szakmám.

Úgy érzem, ez némi magyarázatra szorul. Ráérek, szóval Ádám&Évától kezdem.

Mindig is jó matekos voltam. Középsulisként kétszer is eljutottam az Arany Dániel megyei döntőbe, amihez azért egy iskolai első/második helyezés kellett. Az egyetem viszont nem jött be. Azt várták volna el, hogy dobjak ki minden középsulis tudást és kezdjük újra a halmazokkal. Halmazok! Mi az istent lehet csinálni a halmazokkal? Egyszerű krumplik. Nos, nem. Mint kiderült, az egész egyetemi anyagnak a halmazelmélet volt az alapja, én pedig ott maradtam alapok nélkül, később pedig már nem találtam rá az útra. Ettől még levizsgáztam, persze. Szerencsére meglepően jól tudtam vizsgázni.
A nyolcvanas években kifejezetten modern, kísérletező egyetem volt a veszprémi. Itt vezették be egyedül az ún. kétlépcsős képzést. Ez gyakorlatilag a mai bachelor/master szisztémát jelentette, de nem volt szabad annak nevezni, mert fúj, kapitalista métely. Az első három éven átbukdácsoltam, majd húztam egy bátrat. Közöltem, hogy maradok a masteren is. A rendszermérnökin. Ami gyakorlatilag heti 38 óra matekból állt. (A maradék két óra volt a tesi meg a nyelv.) Mindezt úgy, hogy az egyetemi matekkal kifejezetten hadilábon álltam.
Szerinted sikerült?
Naná, hogy nem.
A második fokozaton gyakorlatilag nem lehetett megbukni. Az oktatók már kollégaként kezelték a hallgatókat, akik valójában azok is voltak, hiszen a mérnöki címet már megszerezték az első fokozaton. Ha valami gond volt, addig segítették a delikvenst, amíg ki nem izzadta a kettest.
Kivéve a rendszermérnöki szakot. Itt rögtön belekerültünk a szorítóba, ahol ‘teher alatt nő a pálma’ felkiáltással rongyosra pofoztak mindenkit. Kezdve rögtön a differenciálegyenlet-rendszerekkel. Melyekről természetesen nem mondtak semmit, hiszen ennek a tudásnak ekkor már kézségszintűnek kellett volna lennie.

Várjál, nem is meséltem arról, hogy mi volt a képzésünk célja. Gyakorlatilag a valóság modellezése matematikai módszerekkel. Vegyipari egyetem volt, vörös farokként ott lógott, hogy habár le tudnánk modellezni bármit is, de a végén mindig valamilyen vegyipari eszközt kellett. Viszont az elvárás az volt, hogy mindent tudjunk. Amikor például a vizsgán a docens úr azt kérdezte R-től, hogy kávézni szeret, vagy inkább teázni, a leány agya egyből elkezdett kattogni, hogy melyiket szeretné jobban modellezni? De ugyanez megvolt a fürdés/zuhanyzás párossal is.
Hogyan néz ki egy ilyen modellezés? Felskicceltük a fázisteret, azaz azt az N dimenziós koordinátarendszert, melynek a tengelyein az általunk fontosnak található mennyiségek helyezkedtek el, majd igyekeztünk annyi független differenciálegyenletet felírni a változók között, amennyit csak tudtunk.
Na, én itt vesztem el. Ránéztem arra a 4-5 differenciálegyenletből álló egyenletrendszerre, majd átlapoztam a jegyzetben azt a 10-20 oldalt, ahol a docens úr addig tekergette a kígyót, míg végül ki nem esett egy használható modell… és azt mondtam, hogy megaharapósló.
Megbuktam. Ott, ahol nem lehetett. Annyi tartás azért volt bennem, hogy még azelőtt, hogy bármiből is elmentem volna vizsgázni, bementem a tanulmányi osztályra, közölni, hogy game over. Innentől hosszú, időnként vidám, időnként szomorú, de mindenképpen groteszk hónapok jöttek, de ezekről már írtam korábban.
A lényeg, hogy szeptemberben újra nekimentem a rendszermérnöki szaknak. Csak éppen közben feltápoltam magamat.

A kihagyott hat hónapból négy hónapot az egyetemen melóztam műszaki ügyintézőként. (Ez egy vicces státusz volt, mert semmi köze nem volt ahhoz, amire felvettek – laboráns – de ahhoz meg végképp nem volt köze, amit csináltam. Semmit.) Utána még lenyomtam Fűzfőn egy hónapot vegyipari segédmunkásként. De erről is rengeteget írtam már. A lényeg az volt, hogy mindvégig az egyetem közelében nyüzsögtem és a számítóközpont egyik supervisora még katonakoromból jó cimborám volt. Konkrétan megadta nekem a supervisori jelszavát. Ennyit az akkori informatikai biztonságról. Úgy száguldoztam fel-alá az egyetemi nagygépen, hogy fogalmam sem volt arról, mit csinálok. Persze, csak egy ideig, aztán kezdtem beletanulni. Közben összehaverkodtam a másik két supervisorral is, nagykanállal kaptam az igét. Ha akkor valaki meg akarta volna festeni az IT Kocka képét, elég lett volna, ha délután beül a Kismocskos nevű vendéglátó egységbe és szorgalmasan vászonra pacsmagolja, ahogy négy nagydarab, szőrös faszi, sörözés közben azon vitatkozik, a témához képest némileg túlzónak ható indulattal, hogy pl. milyen vezérlő szerkezetekbe illik kívülről beleugrani.

Semmilyenbe. Az ilyesmi szegénységi bizonyítvány.

Na szóval, megtanultam a nagygépet. És időközben mélyebben is belenéztem a félelmetesnek tűnő Numerikus Matematika tankönyvbe, pontosabban Obádovics Gyula tankönyvébe. Tátva maradt a szám. Ez valami elképesztő! Ezek az emberek csalnak! És ennek mindenki örül!

Akkor megint egy kis kitérő.

Amikor Euler alsós általános iskolás volt, a tanárának egy nap semmi kedve nem volt tanítani. Így kiadta a kölyköknek, hogy adják össze az összes számot egytől ezerig. Majd hátradőlt és gyönyörködött a svájci hegyekben. Két percig. A kis Leó ugyanis ennyi idő alatt megoldotta a feladatot. Rájött, hogy ha két oldalról folyamatosan befelé haladva összeadja a szélső számokat, akkor azok mindig 1001-et adnak. Innentől már csak annyi volt hátra, hogy 500*1001.
Aranyos sztori, kár, hogy némileg ellentmond neki az a tény, hogy Euler iskolában csak latint tanult, matekozni magántanárhoz járt. Pedig a sztori biztosan igaz, mert a Magyar Anekdotakincsben olvastam.

Na de mindegy is, a történetben pontosan benne van az, hogy hogyan csal a numerikus matematika. Melynek Euler nagy tudora volt. És ezzel a numerikus matematikával mindent lehet. Meg lehet oldani minden egyenletet. A megoldhatatlanokat is. Meg lehet oldani a differenciálegyenleteket. A differeciálegyenlet-rendszereket. A megoldhatatlanokat is. És nem kell hozzá kifordítani az agyunkat 20 oldalnyi levezetésen keresztül. Egyszerűen be kell dobni az adatokat a gépbe, az meg kidobja a végeredményt. Maga a numerikus matematika pedig arról szól, hogy hogyan lehet ilyen gépeket építeni.

Pontosabban, amikor ezt az egészet elkezdték piszkálni, gépekről még szó sem volt. Ekkor algoritmusokat gyártottak. Ezekkel dolgozni nagyjából akkora élvezet lehetett, mint sajtreszelővel recskázni, de bizonyos esetekben nem volt más. Nem kell túl bonyolult dolgokra gondolni: vegyél egy teljes negyedfokú, nullára rendezett egyenletet. Ha ez nem egy matekversenyes kitenyésztett példa, akkor nem lehet leegyszerűsíteni. Megoldhatatlan. Egzakt módszerekkel.
De csalással megoldható!
Veszel egy kockás papírt. X koordináta, Y koordináta. Azt mondod, hogy X legyen 1000. Kiszámolod az Y-t, berajzolod a pontot. Aztán azt mondod, hogy X legyen -1000. Kiszámolod. Berajzolod. Aztán így tovább, egy csomószor. Előbb-utóbb találsz egy olyan szakaszt, ahol a függvény képe metszi a vízszintes tengelyt. (Persze nem garantált.) Ezt az X értéket leolvasod. És máris találtál egy megoldást.
Ez az elv. A gyakorlatban látható, hogy a módszer ezer sebből vérzik. Mi van, ha az egyedüli helyes X érték mondjuk -123456789? Ekkora papír nincs. Meg mire egy ilyet csak úgy rajzolgatással megtalálunk, megőszülünk. Ezért kell az algoritmus.
Veszünk két számot: egy nagyon kicsit és egy nagyon nagyot. Kiszámoljuk az Y értékeket. Ha eltérő előjelűek, akkor dörzsöljük a tenyerünket. Tutira lesz a két érték között egy tengelymetszés.
Megfelezzük az intervallumot. Ahol megegyezik a két előjel, azt az intervallumot eldobjuk.
Megfelezzük a maradék intervallumot.
És így tovább.

Nem, ne gyere azzal, hogy de, meg hanem. Ez itt fent csak az elv. Értelemszerűen rengeteget lehet rajta csiszolni. És igen, én is tudom, hogy nem csak egy megoldás létezhet.

Na most ugyanilyen tötyörgős algoritmusokat kidolgoztak differenciálegyenletekre, sőt egyenletrendszerekre is. Konkrétan maga Euler is, de a legnépszerűbb megoldás két német matematikustól (Runge és Kutta) származik.

Az mindenesetre látszik, hogy amíg kézzel kellett számolgatni, addig ez inkább elvont, elméleti tudomány volt. Na de amikor megjelentek a számítógépek!

Nézd meg, mi az elméleti háttér. Egyrészt a két német csóka már 1900-ban kidolgozta a módszert. Ha neadjisten mérnökember vagy, próbáld meg követni is a levezetést. :) (Nekem nem megy, én már csak Excel táblákkal tudok dolgozni.)
De valójában nem ez a lényeg. Az oldal alján ott van a szoftverkód is. Egyáltalán nem bonyolult.

Aki esetleg elmerülne a kód értelmezésében, vigyázzon. Van benne egy kis trükközés. Olyan differenciálegyenletről van szó, amelynek létezik egzakt megoldása és a kódban ezt az egzakt megoldást is kirajzoltatják. Sőt, a gyakorlatban elterjedt negyedrangú megoldás mellett a kód tartalmazza a másodrendű megoldást is.

És a lényeg: ez a módszer mindenre jó!
Ha le akarod modellezni a világmindenséget, de eddig az tartott vissza, hogy nem tudtál mit kezdeni egy tízezer változós, tízezer egyenletből álló differenciálegyenlet-rendszerrel, akkor most már nem tarthat vissza semmi. Dobáld bele a paramétereket egy rungekutta négybe és már kész is van a modell.

Itt álljunk meg egy kicsit. Mit is jelent az, hogy készen van a modell?
Mi is a differenciálegyenlet egzakt megoldása? Egy függvény. Egy képlet.
Mit kapunk egy RK4 módszerrel? Hát semmiképpen sem a függvény matematikai képletét. Azt kapjuk meg, hogy mindenféle, folyamatosan beadott (gyakorlatilag ciklusváltozó) X értékek esetén kiíródnak/kirajzolódnak az _eredményfüggvény_ Y értékei. Azaz a megoldást jelentő függvény képlete helyett a függvény grafikus megjelenítését kapjuk.

Hogyan néz ki akkor egy modell megoldása?

Ilyenkor az X tengely tipikusan az idő. Legyenek a megfigyelt értékek mondjuk egy reaktorban a hőmérséklet, a nyomás és az A anyag koncentrációja. Felírtunk három független diffegyenletet erre a három változóra. Ezeket az egyenleteket beleprogramozzuk egy RK4 algoritmusba. Aztán beadjuk a kezdeti értékeket és a görbéken nézzük, hogyan alakulnak a fenti értékek a modellben. Aztán később megcsinálhatjuk a szimulációt más kezdeti értékekkel is.

Innentől pedig már minden csak finomítás kérdése. Márpedig finomítani meglepő részletekig lehet. Az anyatanszékem például olyan frankón lemodellezte az ajkai timföldgyár működését (nem, a zagytároló nem volt benne), hogy a rendszer a működés közben folyamatosan futó modell realtime értékeit fogadta el valósnak és ezekhez igazította, ezekhez szabályozta be a valóságot.

Jó hosszú kitérő volt.

Nekem mindenesetre a numerikus matematika konkrétan az életkedvemet adta vissza. Nem kellett a nemlétező matematikai tudásommal napokon, heteken keresztül megoldanom mindenféle differenciális szörnyetegeket. Elég volt felírnom az egyenleteket, utána pedig már csak algoritmusokat kellett leprogramoznom. Mindjárt élhetőbb lett a világ.
Olyannyira megszerettem ezt a területet, hogy pusztán szórakozásból nekiálltam az Obádovics alapján algoritmusokat kódolni. Na jó, benne volt azért még az is, hogy egyrészt tanultam, másrészt meg bármikor jól jöhetett egy ilyen eljárásgyűjtemény. Harmadrészt meg egy csomó ismerősöm adogatott be ezekből a nyúlfaroknyi programokból egyet-egyet számítástechnika évközi beadandóként. Örültek nekik, jó kis programocskák voltak ezek.

Ehhez képest némileg furcsa lehet, hogy én végül kegyelemkettessel mentem át a numerikus analízis vizsgán. Abból a tantárgyból, mely két részből állt: nagygépes programozás és numerikus matematika. Igen, a két nagy kedvenc. Két olyan terület, melyeket _nagyon_ tudtam. És igen, kegyelemkettes.
A magyarázat a sértett egó, az alapvetően aljas jellem, mondjuk ki, a geciség kontra hübrisz párosban rejlik. Azaz mindketten vastagon benne voltunk: a tanár is meg én is.

Első óránk. Nagy elvárásokkal ültem a padban. Éreztem, hogy ez lesz a kedvenc tárgyam. A tanár egyben a számítóközpont vezetője is. Jó lesz ez.
Aztán bejött a hapsi. Lelkesen, harsány jókedvvel kezdte hirdetni az igét. És fényezni magát. Hogy nekünk milyen szerencsénk van, hogy megkaphatjuk ezt a képzést. Hiszen itt olyan csodák lesznek, hogy na. Ezzel nem is lett volna baj, de túlságosan elragadtatta magát. Nem csak arról beszélt, hogy milyen számítógépes háttérrel fogunk dolgozni, hanem belerongyolt a teljes tananyagba. Villogni akart és belerohant az adatbáziskezelés rejtelmeibe, csak úgy szórta a többiek számára ismeretlen kifejezéseket. Aztán folytatta az indexelésekkel. Megint egy csomó ismeretlen szakszó.
Aztán jelentkeztem.
A tanár totál kiesett a szerepből.
– Mit szeretnél mondani?
– Az X tipusú adatbázisoknál nem használható a tanár úr által említett Y tipusú indexelés.
– Tessék?
– Tanár úr azt állította, hogy az X tipusú adatbázisoknál lehet Y indexelés. Nos, nem.

A vidámság egyből eltűnt. Úgy nézett rám, mint egy féregre.
– Ezt miből gondolod?
– Tudom.
– Márpedig rosszul tudod. Itt én vagyok a tanár!
– Egy tanár is tévedhet.
– Ne pimaszkodj. Igenis lehet!

Megvontam a vállam. Ment tovább az óra, de már nem volt önfeledt lelkendezés.

Ebédszünet. Az én időbeosztásom addigra végképp letisztult, nem jártam a menzára, akart a franc annyit sorbaállni, inkább beültem a Kismocskosba és ettem két tepertős pogácsát meg ittam hozzá két kisfröccsöt. Éppen a pogikat majszoltam, amikor megérkezett a supervisor csapat. Ahogy megláttak, harsányan elkezdtek röhögni.
– Te voltál, mi? – kérdezte D.
– Micsoda?
– Te, a főnök egy órája habzó szájjal rúgta ránk az ajtót.
– És?
– És azt kérdezte, hogy az X tipusú adatbázisoknál használható-e az Y indexelés?
– Mit mondtatok?
– Hogy ez egy oltári faszság. Ki állított ilyet?
– Hehe.
– Ő mondta mi?
– Persze.
– Te meg lecsaptad a labdát. Kisakkoztuk. Tudtuk, hogy veletek volt órája.
– Erre igyunk.

Aztán ennyi. A második óra után a tankörtársak hol röhögve, hol szörnyülködve jöttek át a szobámba, miszerint a tanár egész órán engem keresett, mert kitalált valami hónaljból kitekert magyarázatot, hogy miért mondta azt, amit mondott. És kurvára dühös volt, hogy nem mentem be és nem mondhatta el nekem. Nos, ez a frusztrációja tartósan megmaradt, mert abban a félévben egy órájára sem mentem be. Nem éreztem úgy, hogy bármit is tudnék tanulni tőle.

Csak hát ott volt a vizsga. Hozzáteszem, simán megcsinálhatta volna, hogy egyszerűen nem írja alá a félévemet. De úgy látszik, inkább csak el akart szórakozni velem.
Bementem.
– Ááá! – mosolygott 64 foggal – Egy ritkán látott vendég!
Visszamosolyogtam.
– Na nézzük, nézzük – hümmögött – Nagygépes programozásból nem kérdezek, az csak a dedósoknak való. Legyen mondjuk az XY algoritmus levezetése!
Jól sejtettem, az egyik legretkesebb levezetés volt. De én tényleg szerettem ezt a tantárgyat, a tanár pedig erről nem tudott, hiszen nem volt alkalma felmérni. Komótosan nekiálltam a levezetésnek.
A tanár a felénél megállított.
– Állj! Mi ez itt? – mutatott a lapra.
– Egy nulla.
– De miért húztad át?
– Mert megtetszett az ötlet a számítástechnikából. Így meg lehet különböztetni az ‘O’ betűtől.
– De hát a számítógépeknél fordítva van az áthúzás! – vágta rá diadalmasan.
– Tényleg?
– Tényleg. Ne haragudj, de ez súlyos hiba. Maximum kettest tudok adni.
– Jó lesz.

És ennyi.