Valós értékű folytonos intervallum modellezése és alkalmazásai

Az intervallum azon valós számok halmaza, amelyek két adott szám mint korlát közé esnek.

Ez eddig valószínűleg nem újdonság. Ha azonban programban modellezni akarjuk, akkor egy kicsit mélyebbre kell tekinteni. Valójában egy intervallum matematikailag egy speciális halmaznak tekinthető, ezért az alapvető halmazműveletek mint az unió, metszet, részintervallum és tartalmazásvizsgálat értelmezhetők. Ugyanakkor az intervallum el is tér a halmazoktól, mert sorba rendezhetők hiszen nagyság szerinti sorrendben meghatározott alsó és felső korláttal rendelkeznek, amelyek az intervallum végpontjai. A számegyenesen való ábrázoláskor az alsó korlát az intervallum értékkészletének bal oldalán, a felső korlát annak jobb oldalán van. Ezért az alsó és felső végpontot, bal illetve jobb oldali végpontnak is nevezik.

Az intervallumot a végpontjai azonban még nem teljesen definiálják. Ugyanis azonos végpontértékekkel rendelkező két intervallum különbözhet egymástól attól függően, hogy a végpontértékeket az intervallum értékkészlete tartalmazza vagy sem. Ha az adott végpontot nem tartalmazza, akkor azon az oldalon az intervallum nyitott, ha tartalmazza akkor zárt. Ennek kombinációi (mindkét oldalon zárt, mindkét oldalon nyitott, bal oldalon zárt és jobb oldalon nyitott, bal oldalon nyitott és jobb oldalon zárt) határozzák meg az intervallum típusát. Ezért egy intervallumot két végpontjának értékei és típusa együttesen definiál.

Ebből következik, hogy az intervallum típusát a műveleteknél figyelembe kell venni. Ez az, ami a halmazokhoz képest összetettebbé teszi az intervallumokkal végzett műveleteket és ezért megvalósításuk némi átgondolást igényel.

Alább egy valós értékű folytonos intervallumot modellező Interval nevű osztály egy lehetséges definíciója látható. A metódusok egyik csoportja az alapvető halmazműveleteket adaptálja, a másik a rendezhetőségből adódó lehetőségeket és igényeket fedi le. Az egyes metódusok szerepét és működésének megértését a dokumentációs karakterláncok segítik.

Alkalmazási lehetőségek és példák

Az Interval osztály, illetve példányai minden olyan feladatnál és alkalmazásnál hasznosak lehetnek, ahol intervallumok merülnek fel, vagy konkrétan azokkal kell dolgozni. Többek között ilyenek az intervallumfelezést használó eljárások, vagy statisztikai alkalmazások mint például relatív gyakoriságok számítása, hisztogramok készítése, vagy osztályközös gyakorisági sorok statisztikai jellemzőinek (pl. átlag, medián) számítása.

A következőkben az említett három felhasználási esetre láthatunk példát.

Elsőként mutatjuk a négyzetgyökvonás intervallumfelezéssel való elvégzését. Ez nem gyakorlati alkalmazásra készült, hanem inkább csak azt szemlélteti, hogy a felezéses eljárás hogyan valósítható meg az Interval példányokat használva.

A következő két alkalmazás több gyakorlati hasznossággal bír.

Az alábbi egy egyszerű megvalósítású relatív gyakoriságot számoló függvényt mutat:

A kapott értékeket ábrázolva vizuálisan is ellenőrizhetjük, hogy háromszögeloszlásról van szó.

A harmadik alkalmazási példában a magyarországi nyugdíjak és egyéb ellátások átlagát és mediánját becsüljük meg a KSH adatsorai és egyéb nyilvános információk alapján, viszonylag egyszerű módon, az Interval példányokat és metódusaikat is használva. Az eredmények jó közelítéssel egyeznek a sajtóban közölt értékekkel.

A forráskódok a https://github.com/pythontudasepites/real_interval linken elérhetők.

Az Interval osztály definálásánál és az alkalmazási példákban hangsúlyosan kerülnek elő a speciális konténerek mint például a namedtuple és Counter, a felsorolás típus, valamint a véletlen számok és a statisztikai jellemzők számítása. Ezekkel a Python tudásépítés lépésről lépésre című e-könyvben részletesen a „Különleges osztálydefiníciók” fejezet „Felsorolástípus” alfejezete, a „Készétel fogyasztás – a szabványos könyvtár moduljainak használata” fejezet „Speciális konténer típusok”, „A véletlen használatba vétele” és a „Statisztikai eszköztár” című alfejezete foglalkoznak.

Érdekel a Python tudásépítés lépésről lépésre az alapoktól az első asztali alkalmazásig című e-könyv.