BEVEZETÉS

Kiknek szól

Mindenkinek, aki valamilyen okból érdeklődik a numerikus matematikai eljárások iránt, tanulmányai, munkája során szüksége van numerikus matematikai megoldásokra. Ugyanakkor a könyv nem numerikus matematikai és nem Python tankönyv, hanem egy kézikönyv, amely a Python nyelv használatával mutatja be a numerikus matematika leggyakrabban használt algoritmusait, eljárásait. A könyv zárt egységet alkot abban az értelemben, hogy a legtöbb numerikus matematikai eszközöket igénylő, műszaki, közgazdasági probléma pusztán a könyvben található eljárások (függvények) segítségével megoldható, adott esetben mindennemű programozási ismeret nélkül is. Feltételezzük az alapvető numerikus matematikai ismereteket, de legalább az adott probléma megoldásához szükséges minimális háttér ismeretét, pl. annak felismerését, hogy milyen eszközökre (egy lineáris egyenletrendszer vagy egy nemlineáris egyenlet megoldására, stb.) van szükség. Ugyanakkor konkrét problémák (pl. egy lineáris egyenletrendszer) megoldása a matematikai háttér mélyebb ismerete nélkül, az eljárások értelemszerű használatával megoldhatók.

Miért a Python

A Python egy mindenki számára könnyen elérhető, manapság a legelterjedtebb script nyelv. Használata – legalábbis az alapokat tekintve – könnyen elsajátítható és script nyelvként lényegesen könnyebben alkalmazható, mint bármilyen ismert hagyományos fordításon alapuló programnyelvé, mint pl. a C, C++ vagy a Java, hogy a korábbi programnyelvekről mint a FORTRAN vagy az Algol ne is beszéljünk. Az egyszerű használhatóság okán kiválóan alkalmas arra, hogy használatával numerikus matematikai algoritmusokat igénylő feladatok egyszerűen megoldhatók legyenek. Annak érdekében, hogy a közölt eljárások, azok alapjait jelentő algoritmusok könnyen érthetők, az olvasó számára is – szükség esetén minimális Python ismeretekkel is – módosítható legyen csak a legegyszerűbb nyelvi elemek kerültek felhasználásra. Gyakorlottabb Python használók számára talán furcsa lehet, hogy számos nagyszerű nyelvi lehetőség – mint pl. az osztályok használata – egyáltalán nem, vagy csak nagyon kevéssé, óvatosan kerültek felhasználásra. Ennek oka is a lehető legszélesebb körű használhatóság, a lehető legkönnyebb megérthetőség, a lehető legrugalmasabb tovább fejleszthetőség, továbbá a mindennemű fejlesztőkörnyezettől való lehető legnagyobb függetlenség. Ez utóbbi által az eljárások nemcsak számítógépeken, hanem okostelefonokon és táblagépeken is használhatók.  A könyv minden eljárása az IDLE környezetben került kifejlesztésre, kipróbálásra. Az IDLE a   Python „hivatalos” fejlesztői környezete, amely egyszerűen letölthető a Python hivatalos honlapjáról (www.python.org). Ezen célok okán csak a minden Python környezetben megtalálható math és a legtöbb környezetben megtalálható Tkinter modul egyes elemei kerültek alkalmazásra. (A Tkinter modul csak a grafikus megjelenítés során került felhasználásra, így esetleges hiánya az egyes algoritmusok használhatóságát nem érinti.)

Mi található a könyvben

  1. Deklarációs függvények valós és komplex elemeket tartalmazó vektorok és mátrixok létrehozására
  2. Vektorok és mátrixok formázott oszlop, illetve táblázat formában történő megjelenítése
  3. Vektorok és mátrixok kezelését (másolását, feldarabolását és összefűzését) segítő függvények
  4. Adatok ki- és bevitelét (ideértve adatok billentyűzetről történő rögzítését is) végző függvények
  5. Adatok grafikus megjelenítése
  6. Alapvető vektor és mátrix műveletek (vektorok, mátrixok összeadása, szorzása stb.)
  7. Lineáris egyenletek megoldása és speciális mátrixműveletek (pl. mátrixok hatványozása)
  8. Mérési adatok feldolgozása (adatsorok simítása, legkisebb négyzetek módszerének alkalmazását lehetővé tevő regressziós modellek összeállítása)
  9. Interpoláció
  10. Numerikus deriválás és integrálás
  11. Polinom műveletek
  12. Egyváltozós valós, nemlineáris egyenletek megoldása
  13. Közönséges differenciálegyenletek és egyenletrendszerek megoldása és speciális függvények

Minden eljárás (Python függvény) hátterének, matematikai alapjának és használatának példákon keresztül történő bemutatása és minden egyes függvény, számos a megértést elősegítő megjegyzéssel ellátott, kódja.

Hogyan használjuk a könyvet

Amint már többször említettük a könyv egy kézikönyv, tehát nem kell az első betűtől az utolsóig elolvasni ahhoz, hogy egy – egy feladat megoldására megtaláljuk a megfelelő módszert. Komplex problémák numerikus problémák megoldása is elvégezhető mindennemű programozási ismeret nélkül is, egyszerűen csak a közölt függvényeknek – mint parancsoknak – a használatával. A konkrét numerikus matematikai algoritmusokat megvalósító Python függvényeken kívül számos olyan függvény is található, amelyek az algoritmusok használatához szükséges háttérfeladatokat (adatok ki- és bevitele, grafikus megjelenítés, mátrixok, vektorok darabolása és összefűzése) végzik. A függvények felsorolásánál ezek külön csoportba kerültek, de ugyanakkor tárgyalásuk nem egyszerre, hanem annak a fejezetnek a keretében történik, ahol először felhasználásra kerülnek, illetve ahol használatuk szükséges vagy ajánlott. Például az adatok beolvasását és az adatmodellek összeállítását végző függvényeket a Mérési adatok feldolgozásáról szóló fejezetben tárgyaljuk, de természetesen felhasználhatók mátrixok, lineáris egyenletrendszerek vagy a SIMPLEX módszer kényszerítő feltételeinek összeállításánál is. Minden fejezet egy, egy nagytémakört – és az előbbiek szerint a szükséges kisegítő függvényeket – foglal magában. Az egyes fejezetek bevezetőjében az adott fejezetben található eljárások matematikai hátterének ismertetése található. Amennyiben valaki csak egy probléma megoldását megvalósító eljárásra kíváncsi akkor az elméleti bevezető átugorható, az esetek többségében maguk az eljárások még közvetlenül alkalmazhatók. Például egy többváltozós lineáris egyenletrendszer gyakorlati megoldásának nem akadálya a megoldást szolgáltató Gauss-Jordan algoritmus ismeretének hiánya. Ugyanakkor fontosnak tartottuk a matematikai háttérnek legalább vázlatos ismertetését azon olvasók részére, akik érdeklődnek a matematikai háttér iránt. A matematikai háttér ismerete elsősorban akkor fontos, ha komplexebb feladat megoldásáról van szó vagy egy algoritmust az olvasó saját programjában szeretne felhasználni, illetve azt tovább fejleszteni vagy tanulmányaival, korábbi ismereteivel szeretné összekötni a közölt eljárásokat. Az egyes numerikus eljárások, algoritmusok sokféleképpen vezethetők be, ugyanannak az eljárásnak a bevezetése különböző szakirodalmakban különböző módokon történhet. Igyekeztünk mindenhol az adott helyzetben legkézenfekvőbb bevezetést követni, de ettől az Olvasó még más matematikai megközelítéssel is találkozhat. Számos szakirodalmat ajánlunk a matematikai hátteret behatóbban tanulmányozni kívánó olvasók részére. Az egyes fejezeteknél külön is felhívjuk a figyelmet a mélyebb matematikai ismereteket tartalmazó részek átugrásának lehetőségére, mert az eljárások akkor is használhatók, ha az olvasó nincs tisztában annak matematikai hátterével, illetve nem is akarja azt részleteiben megismerni csak használni, pl. egy lineáris egyenletrendszer megoldása akkor is megtehető, ha valaki nem ismeri vagy nem is akarja megismerni a Gauss féle kiküszöbölési algoritmust. A közölt eljárások kiválasztásának legfontosabb szempontja a lehető legszélesebb érdeklődési kör lefedése volt. Ezért szerepelnek olyan egyszerű függvények is, mint pl. két mátrix összeadása vagy szorzása, de kerültek be olyan eljárások, teljes programok, mint pl. a SIMPLEX módszer vagy egy széleskörben felhasználható egy- és többdimenziós, lineáris- és nem lineáris regresszió. A könyvben található eljárások önállóan pl. az IDLE használatán keresztülparancs módban vagy saját függvényekbe beépítve is használhatók. Mind a két módszerre mutatunk példát. A függvények többségét önálló – parancsmódban – példákon mutatjuk be, de összetetteb feladatok megoldására is közlünk tesztprogramokat.

A függvények és változók elnevezésében eltértünk a Python ma megszokott jelölésrendszerétől és egy, a numerikus eljárásoknál bevett módszert követtünk. A függvények neve mindig a függvény által érintett témakörre utal, amelyet kisbetűvel írtunk, ezt követi a függvény neve, amely nagybetűvel kezdődik. Pl. a mátrixok szorzására vonatkozó eljárás neve matrMult, utalva, hogy egy mátrix műveletről – matr – és a szorzásról – Mult - van szó. Minden esetben igyekeztünk olyan viszonylag rövid, könnyen megjegyezhető, de beszédes, informatív elnevezéseket használni, amely lehetőség szerint különböznek és így nem összekeverhetők más, az interneten hozzáférhető függvénykönyvtárakban (modulokban) található függvények elnevezésével. A függvények elnevezése általában angol nyelven történt és szándékunk szerint hasonlít az ilyen témával foglalkozó szakkönyvekben található megnevezésekhez. A numerikus matematikai megoldások, algoritmusok többsége nem mai eredetű, hiszen gyakorlati feladatok megoldására mindig is szükség volt. A matematika szinte mindennapi, gyakorlati alkalmazását az analízis – differenciál- és integrálszámítás – felfedezése, valamint a korszerű algebra (mátrixok, determinánsok, polinomok elméletének) kidolgozása tette lehetővé. A matematika gyakorlati alkalmazásával, konkrét feladatok numerikus megoldásával a legnagyobb matematikusok és fizikusok is foglalkoztak. Így a legismertebb, leggyakrabban alkalmazott algoritmusok között  Newton, Leibniz, Poisson, Fourier vagy éppen a matematika óriásaként emlegetett Gauss neve is gyakran előfordul.

Az eljárások, függvények alkalmazását bőséges példaanyagon keresztül mutatjuk be, amelyek egy része valós adatokon, valós problémák megoldását mutatja be. A könyvet megvásárlók számára lehetőség van a teljes függvénykönyvtár, a tesztállományok és tesztprogramok letöltésére is.

Az egyes algoritmusok ismertetése azonos szerkezetben történik az alábbiak szerint:

Függvény (eljárás) neve

Leírás: A függvény által végzett feladat, megvalósított algoritmus leírása, amelyre szükség szerint hivatkozik

Alkalmazás: A bemenő adatok és visszaadott értékek ismertetése.

Függőségek: Annak érdekében, hogy az egyes függvények használatát, más programokba történő beillesztését elősegítsük, megadjuk az adott eljárásban használt azon függvényeket, amelyek nem a Python nyelvi alapjaiban fordulnak elő.

Példák az alkalmazásra
Bőséges példaanyagot mutatunk az egyes eljárások használatára, amely alapján bárki képes akár bonyolult feladat megoldására is mindennemű Python nyelvi, programozási ismeret nélkül is.

Kód: Az adott eljárás teljes kódja. A kódokat igyekeztünk a működés megértését elősegítő bőséges megjegyzésekkel ellátni. Természetesen, ha valaki közvetlenül valamely fejlesztőrendszerbe közvetlen begépeléssel szeretné az eljárásokat használni, akkor a magyarázatokat elhagyhatja. A letölthető függvénykódok általában már kevesebb megjegyzést tartalmaznak.