Ez a könyv azoknak szól, akik numerikus matematikai feladataik megoldására keresnek konkrét, azonnal alkalmazható, további neten történő keresgélést, utánajárást nem igénylő megoldásokat. A könyv, amelyet az olvasó kezében tart, nem Python és nem numerikus matematikai tankönyv, hanem numerikus matematikai eljárásokat tartalmazó kézikönyv.
Reméljük, hogy haszonnal forgatják mindazok, akik a Python nyelvi környezetben szeretnék a legkülönfélébb numerikus matematikai, mérési-adatfeldolgozási feladataikat megoldani, a lineáris egyenletrendszerektől, a mérési adatok kiértékelésén keresztül, a differenciálegyenletek megoldásáig, akár mindennemű Python nyelvi, programozási ismeret nélkül, egyszerűen.
Photo by Cliff Roles
Programtervező matematikus, számos kutatási projekten dolgozott, majd „pályaelhagyóként” a kétszintű bankrendszer létrehozását követően az Állami Fejlesztési Intézet vezérigazgató helyetteseként vett részt a Magyar Államkincstár létrehozásában és annak informatikai igazgatójaként tevékenykedett.
Számos területen vezetett informatikai projekteket, 2010-ben közigazgatási informatikáért felelős helyettes államtitkár, de fenti munkája közben is mindig igyekezett időt szakítva kedvenc témakörében – a gáz-folyadék kromatográfiában – egy- egy kutatásban részt vállalni.
1996-óta a Szervezési és Vezetési Tudományos Társaság elnökségének tagja, jelenleg a szervezet elnöke.
Photo by Cliff Roles
Ha a programozási nyelveknek lenne „slágerlistájuk”, akkor az elmúlt évek listavezetője minden bizonnyal a Python lenne. Guido van Rossum 1991 februárjában tette közzé a Python első változatát (0.9.0 verzió), amely az eltelt 28 évben töretlen és egyre nagyobb népszerűségnek örvend, amelyet elsősorban nagyon magas szintje, könnyű tanulhatósága és hallatlan eleganciájának köszönhet. Szinte minden operációs rendszer „alapból” tartalmazza a Python valamelyik verzióját és szinte bármilyen (régi) gépre található olyan változat, amely futtatható rajta. Numerikus matematikai megoldásokra ma is mint sok, sok évszázada rengeteg területen van szükség. Mi sem természetesebb tehát mint numerikus matematikai algoritmusokat Python környezetben megvalósítani. A Pyton tanulásához, alkalmazásához számtalan könyv, dokumentáció, függvénykönyvtár (modul) érhető el a neten. Mi szükség van akkor erre a „sokadik” könyvre, eljárásgyűjteményre?
Igen, igaz, hogy a neten hosszabb, rövidebb (inkább hosszabb) kutakodás után rengeteg könyv, leírás, modul (függvénykönyvtár, pl. a numpy) érhető el. De ez az információdömping már néha zavaró, főleg a kezdők számára. Néhány modul nem kompatibilis egymással, nem fut a rendelkezésre álló környezetben, vajon melyik leírásban, hozzászólásban kapom meg az aktuális kérdésemre a konkrét, azonnal használható – további kutakodást nem igénylő – választ? Mit tegyen egy Pythonban kezdő - egy hallgató, egy idősebb mérnök, közgazdász, egy amatőrcsillagász és sor folytatható - aki segédtudományként tanulja, alkalmazza, alkalmazni szeretné a numerikus matematikát és nem célja professzionális Python scriptek készítése és nem akar órákat, napokat egy kérdés megválaszolása érdekében a neten szörfölni? Mit tegyen az, az érdeklődő, aki akár csak egy adott probléma numerikus megoldásához, egy algoritmus kipróbálásához, tanulmányozásához szintén nem akar órákat a neten tölteni azt vizsgálva, hogy a rendelkezésre álló Python környezetnek melyik függvénykönyvtár felel meg a legjobban, vagy adottságai függvényében mit, honnan, kell letöltenie, ha egyszerűen csak az éppen rendelkezésre álló környezetben használni szeretne egy algoritmus?
Ez a könyv azoknak szól, akik numerikus matematikai feladataik megoldására keresnek konkrét, azonnal alkalmazható, további neten történő keresgélést, utánajárást nem igénylő megoldásokat. A könyv, amelyet az olvasó kezében tart, nem Python és nem numerikus matematikai tankönyv, hanem numerikus matematikai eljárásokat tartalmazó kézikönyv. Reméljük, hogy haszonnal forgatják mindazok, akik a Python nyelvi környezetben szeretnék a legkülönfélébb numerikus matematikai, mérési-adatfeldolgozási feladataikat megoldani, a lineáris egyenletrendszerektől, a mérési adatok kiértékelésén keresztül, a differenciálegyenletek megoldásáig, akár mindennemű Python nyelvi, programozási ismeret nélkül, egyszerűen.
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.
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.)
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.
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.
vectNULL | n elemű 0 értékű elemeket tartalmazó vektor létrehozása |
matrNULL | n sorból és m oszlopból álló 0 értékű elemeket tartalmazó mátrix létrehozása |
DIM | Egy- és kétdimenziós valós tömb (vektor vagy mátrix) létrehozása, adott értékű elemekkel történő feltöltése |
COMPLEX | Egy és kétdimenziós komplex tömb (vektor vagy mátrix) létrehozása, adott értékű elemekkel történő feltöltése |
vectPrint | Vektor elemeinek az „fstr” stringben megadott formátum szerinti nyomtatása |
matrPrint | Az F mátrix elemeinek az „fstr” stringben megadott formátumú nyomtatása |
mPrint | Vektor vagy mátrix elemeinek, az „fstr” stringben megadott formátumú nyomtatása |
vectCopy | Vektor másolása egy másik, új vektorba |
matrCopy | Mátrix másolása egy másik, új mátrixba |
mCopy | Mátrix vagy vektor másolása egy másik új vektorba vagy mátrixba |
mdRow | Vektor (adatlista) egy tartományának kivágása |
mdCol | Egy mátrixból adott indexű oszlopok leválogatása. Mérési adatok feldolgozásánál használt fontos függvény. Segítségével lehet egy adatmátrixból a függő- és függetlenváltozókat kiválasztani. |
vectMove | Vektornak egy mátrix sorába vagy oszlopába másolása |
mConcat | Vektorok és/vagy mátrixok összefűzése |
vectShift | Vektor elemeinek n pozícióval történő jobbra vagy balra léptetése |
sgn | Előjelfüggvény |
mdInput | Mérési adatok beolvasása billentyűzetről |
mdSave | Mérési adatok mentése |
mdLoad | Mérési adatok betöltése |
mdReadCSV | csv file beolvasása |
Axes | Rajzolási terület beállítása és tengelyek rajzolása |
autoAxes | Rajzolási terület beállítása és a tengelyek automatikus felrajzolása |
Az alábbi függvények az Axes -el lés autoAxes-el létrehozott objektum metódusaiként érhetők el | |
dPlot | Az x és y vektorokban adott függvényértékek kirajzolása |
fPlot | Az FNY függvény értékeinek adott függetlenváltozó értékeknél folyamatos vonallal történő felrajzolása |
exportPlot | Rajz exportálása post script formátumban |
vectScal | Vektornak skalárral történő szorzása |
matrScal | Mátrixnak skalárral történő szorzása |
mScal | Egy tömb (vektor vagy mátrix) minden elemének skalárral történő szorzása |
vectAdd | Vektorok összeadása |
matrAdd | Mátrixok összeadása |
vectSub | Vektorok különbsége |
matrSub | Mátrixok különbsége |
mAdd | Két mátrix vagy vektor összege vagy különbsége. Egyesíti a vectAdd, matrAdd, vectSub, matrSub függvények által megvalósított műveleteket. |
vectDot | Vektorok skaláris szorzata |
matrMvect | Mátrixnak vektorral jobbról történő szorzása |
matrMult | Mátrixok, vektorok szorzása. (vektor, vektor), (vektor, mátrix), (mátrix, mátrix) (szám, vektor) (szám, szám) szorzás |
vectAbs | Vektor maximális abszolút értékű eleme |
vectLen | Vektor hossza (abszolút értéke) |
vectAngl | Két vektor által bezárt szög |
matrDiag | n dimenziós diagonálmátrix létrehozása, az átlóban adott értékkel feltöltve |
matrTrans | Mátrix transzponálása |
matrEukl | Mátrix abszolútértéke |
matrInv | Mátrix inverzének meghatározása Gauss-Jordan módszerrel |
matrGauss | Lineáris egyenletrendszer megoldása Gauss-Jordan módszerrel |
matrEigen | Mátrix maximális sajátértékének és a hozzá tartozó sajátvektor meghatározása |
matrExp | Mátrix hatványozása |
setList | Egy lista értékekkel történő feltöltése Min-től - Max-ig, Step lépésenként |
evalFunc | Egyváltozós függvény értékeinek kiszámítása adott független változó értékekre |
evalPFunc | Egyváltozós függvény értékeinek kiszámítása egy listában adott független változó értékekre |
mdPolyval | n-ed fokú polinom értékének kiszámítása |
mdBstat | Alapvető statisztikai jellemzők meghatározása |
mdLinfit | Lineáris és lineárisra visszavezethető regresszió |
mdCorrcoef | Egy két oszlopból álló mátrix két oszlopa közötti korrelációs együttható |
mdCorrcoeff | Két független listaként (vektorként) megadott változók közötti korrelációs együttható |
mdPolyfit | Mérési adatok közelítése n-ed fokú polinommal, a legkisebb négyzetek módszerével |
mdSmooth | Heurisztikus simító eljárás |
mdFocus | Mérési hibákkal terhelt pontsorozat simítása. Az mdSmooth függvénnyel használható! |
regrModell osztály | Mérési adatok közelítése linearizálható és parametrikus függvények segítségével, a legkisebb négyzetek módszerének felhasználásával |
A modellben rendelkezésre álló linearizálható függvények: | |
| |
A modellben rendelkezésre álló parametrikus függvények: | |
| |
A modellben rendelkezésre álló többváltozós függvények: | |
| |
Speciális függvény: Antoine függvény | |
A regressziós modell metódusai: | |
Eredmények nyomtatása | |
Save | Eredmények mentése |
Plot | Az eredeti mérési pontok és a közelített értékek felrajzolása |
findAlfa | Parametrikus függvények alfa paraméterének keresése |
exportPlot | Rajz exportálása postscript formátumban |
interpolLagrange | Lagrange interpoláció |
interpolNewton | Harmadfokú Newton interpoláció |
interpolAkima | Akima szemi-Spline interpoláció |
difFunc | Kifejezéssel adott függvény adott pontban vett differenciálhányadosának közelítése |
difTable | Pontonként adott függvény adott pontban vett differenciálhányadosának közelítése |
integrTrap | Határozott integrál számítása trapéz módszerrel |
integrSimps | Határozott integrál számítása Simpson módszerrel |
integrTR | Pontsorozattal adott függvény integrálása trapéz módszerrel és lineáris interpolációval |
integrTRL | Pontsorozattal adott függvény integrálása trapéz módszerrel és Lagrange interpolációval |
integrTAK | Pontsorozattal adott függvény integrálása trapéz módszerrel és Akima interpolációval |
polyAdd | Polinomok összeadása vagy kivonása |
polyMult | Polinomok szorzása |
polyDiv | Polinomok osztása |
polyInfo | Információ polinom valós gyökeiről |
rootBisect | Valós egyváltozós nemlineáris egyenlet gyökének közelítése intervallumfelezés módszerrel |
rootSecant | Valós egyváltozós nemlineáris egyenlet gyökének közelítése érintő módszerrel |
rootRegula | Valós egyváltozós nemlineáris egyenlet gyökének közelítése 'regula falsi' módszerrel |
rootNewton | Valós egyváltozós nemlineáris egyenlet gyökének közelítése Newton módszerrel |
rootAitken | Valós, egyváltozós nemlineáris egyenlet gyökének közelítése Aitken iterációval |
diffEuler | Közönséges differenciálegyenlet megoldása explicit Euler módszerrel |
diffRungeKutta | Közönséges differenciálegyenletek megoldása Runge-Kutta módszerrel |
diffAB | Közönséges differenciálegyenlet megoldása Adams-Bashforth prediktor-korrektor módszerrel |
diffAdamsBashforth | Explicit Adam-Bashforth módszer |
diffMilneHamming | Milne-Hamming prediktor-korrektor módszer |
diffEMilneHamming | Differenciálegyenletrendszer megoldása Milne-Hamming prediktor-korrektor módszerrel |
appGamma | Gamma függvény |
approxGamma | Segédfüggvény a Gamma függvény számításához |
logGamma | log(Gamma) függvény közelítése Lánczos módszerrel |
LGamma | Segédfüggvény a Gamma függvény Lánczos módszerrel történő közelítéséhez |
besJ | Elsőfajú Bessel függvények, a Gamma függvényen alapuló definíció alapján |
BESJ | Elsőfajú Bessel függvények H. Goldstein, R.M. Thaler módszerével |
besY | Másodfajú Bessel függvény |
besYxGR4 | Segédfüggvény besY-hoz; x>4 eset |
A könyv megrendelése 4.500 + 1400,- Ft házhozszállítási költséggel az alábbi linken lehetséges:
A könyvhöz tartozó mellékletek letöltéséhez, olvassa be a könyvben szereplő, vagy az itt látható QR-kódot!
Letöltöm a mellékleteket!