Magasszintű programozási felület idősorok nemlineáris analízisére



Hasonló dokumentumok
SZOFTVERFEJLESZTÉS. Földtudományi mérnöki mesterszak / Geoinformatikus-mérnöki szakirány. 2017/18 II. félév. A kurzus ebben a félévben nem indult

AWK programozás, minták, vezérlési szerkezetek

Java-ról Kotlinra. Ekler Péter AutSoft BME AUT. AutSoft

Programozás 6. Dr. Iványi Péter

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

AWK programozás, minták, vezérlési szerkezetek

Programozás II. 2. Dr. Iványi Péter

AWK programozás Bevezetés

Java I. A Java programozási nyelv

HORVÁTH ZSÓFIA 1. Beadandó feladat (HOZSAAI.ELTE) ápr 7. 8-as csoport

Térinformatikai programozás Pythonban

A PiFast program használata. Nagy Lajos

Komputeralgebra Rendszerek

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Informatika terméktervezőknek

Programozási nyelvek Java

1. Alapok. Programozás II

MATLAB alapismeretek I.

Programozási nyelvek JAVA EA+GY 1. gyakolat

Pénzügyi algoritmusok

Felvételi vizsga mintatételsor Informatika írásbeli vizsga

7. gyakorlat Sorozatok, Fájlkezelés

Matematikai programok

Python tanfolyam Python bevezető I. rész

Modellező eszközök, kódgenerálás

FEGYVERNEKI SÁNDOR, Valószínűség-sZÁMÍTÁs És MATEMATIKAI

Objektum Orientált Szoftverfejlesztés (jegyzet)

Egészítsük ki a Drupal-t. Drupal modul fejlesztés

1. Bevezetés szeptember 9. BME Fizika Intézet. Szám. szim. labor ea. Tőke Csaba. Tudnivalók. feladat. Tematika. Moodle Házi feladatok

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós május 6. Széchenyi István Egyetem, Gy r

Mintavételes szabályozás mikrovezérlő segítségével

OPENCV TELEPÍTÉSE SZÁMÍTÓGÉPES LÁTÁS ÉS KÉPFELDOLGOZÁS. Tanács Attila Képfeldolgozás és Számítógépes Grafika Tanszék Szegedi Tudományegyetem

Matematikai programok

Programozási alapismeretek :: beadandó feladat. Felhasználói dokumentáció. Molnár Tamás MOTIABT.ELTE

Inga. Szőke Kálmán Benjamin SZKRADT.ELTE május 18. A jegyzőkönyv célja a matematikai és fizikai inga szimulációja volt.

BASH script programozás II. Vezérlési szerkezetek

Szoftvertechnológia alapjai Java előadások

Szerző. Varga Péter ETR azonosító: VAPQAAI.ELTE cím: Név: Kurzuskód:

Programozás I. Matematikai lehetőségek Műveletek tömbökkel Egyszerű programozási tételek & gyakorlás V 1.0 OE-NIK,

Programozás III CSOMAGOK. Az összetartozó osztályok és interfészek egy csomagba (package) kerülnek.

Komputeralgebra rendszerek

Visszacsatolt (mély) neurális hálózatok

C programozási nyelv

HÁZI FELADAT PROGRAMOZÁS I. évf. Fizikus BSc. 2009/2010. I. félév

7. gyakorlat. Fájlkezelés IO haladó Függvények haladó

A MATLAB alapjai. Kezdő lépések. Változók. Aktuális mappa Parancs ablak. Előzmények. Részei. Atomerőművek üzemtana

1. Alapok. #!/bin/bash

Operációs Rendszerek II. labor. 2. alkalom

Felhasználó által definiált adattípus

Kommunikációs rendszerek teljesítőképesség-vizsgálata

GPU Lab. 5. fejezet. A C++ fordítási modellje. Grafikus Processzorok Tudományos Célú Programozása. Berényi Dániel Nagy-Egri Máté Ferenc

KOOPERÁCIÓ ÉS GÉPI TANULÁS LABORATÓRIUM

Dinamikus modellek szerkezete, SDG modellek

tétel: különböző típusú adatokat csoportosít, ezeket egyetlen adatként kezeli, de hozzáférhetünk az elemeihez is

Operációs rendszerek. 11. gyakorlat. AWK - szintaxis, vezérlési szerkezetek UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Programozás 5. Dr. Iványi Péter

Operációs rendszerek. 3. gyakorlat. Jogosultságkezelés, linkelés, csővezeték UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Aradi Bernadett. 2017/18 ősz. TensorFlow konvolúciós hálózatokhoz 2017/18 ősz 1 / 11

4. Laborgyakorlat. A fájlokról ezeket az adatokat, a fájlrendszer tárolja. Számunkra az 1, 3, 4. oszlopok lesznek az érdekesek.

Operációs rendszerek. UNIX/Linux fájlrendszerek

OOP. Alapelvek Elek Tibor

3. Gyakorlat Ismerkedés a Java nyelvvel

MATLAB alapismeretek III.

12. gyakorlat Enum; Tárolási osztályok Preprocesszor utasítások; Moduláris programozás

2017/01/27 08:59 1/6 Gettext Rendszer

Függvények ábrázolása

SZOFTVERES SZEMLÉLTETÉS A MESTERSÉGES INTELLIGENCIA OKTATÁSÁBAN _ Jeszenszky Péter Debreceni Egyetem, Informatikai Kar jeszenszky.peter@inf.unideb.

Programozás alapjai. 5. előadás

LINUX PMB LINUXOS PARANCSOK ÉS HASZNÁLATUK - GRUB

Introduction to 8086 Assembly

Java programozási nyelv 6. rész Java a gyakorlatban

BASH SCRIPT SHELL JEGYZETEK

Szkriptnyelvek. 1. UNIX shell

2018, Funkcionális programozás

C programozási nyelv Pointerek, tömbök, pointer aritmetika

M-Fájlok létrehozása MATLAB-ban

Digitális technika VIMIAA01 9. hét Fehér Béla BME MIT

Digitális technika VIMIAA01 9. hét

Programozás II. 2. gyakorlat Áttérés C-ről C++-ra

Teljesítmény Mérés. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Teljesítmény Mérés / 20

Objektum orientáltság alapjai A Java nyelv Fordítás - futtatás

Szathmáry László Debreceni Egyetem Informatikai Kar

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

Jelek és rendszerek Gyakorlat_02. A gyakorlat célja megismerkedni a MATLAB Simulink mőködésével, filozófiájával.

Intervenciós röntgen berendezés teljesítményszabályozójának automatizált tesztelése

2018, Funkcionális programozás

Occam 1. Készítette: Szabó Éva

PYTHON. Avagy hosszú az út a BioPythonig

Java I. A Java programozási nyelv

S z á m í t ó g é p e s a l a p i s m e r e t e k

Bevezetés a Python programozási nyelvbe

Pénzügyi algoritmusok

A C programozási nyelv VI. Parancssori argumentumok File kezelés

Szoftver újrafelhasználás

Programozás C nyelven FELÜLNÉZETBŐL elhullatott MORZSÁK. Sapientia EMTE

Programozás I. gyakorlat

Bevezetés a programozásba I.

Szerző Lővei Péter LOPSAAI.ELTE IP-08PAEG/25 Daiki Tennó

PHP alapjai, bevezetés. Vincze Dávid Miskolci Egyetem, IIT

Az Összetett hálózatok vizsgálata elektronikus tantárgy részletes követeleményrendszere

Átírás:

XII. Erdélyi Tudományos Diákköri Konferencia Magasszintű programozási felület idősorok nemlineáris analízisére Papp István Babes Bolyai Tudományegyetem, Fizika kar, Kolozsvár II.év Témavezető Dr. Lázár Zsolt József Elméleti és Számítógépes Fizika Tanszék Fizika kar Babes Bolyai Tudományegyetem 1

Kivonat Az utóbbi évtizedekben az idősorok nemlineáris analízise áttörő sikereinek lehettünk tanúi a tudomány és technika sok területén. Ezek a módszerek a génszekvenciák, elektroencefalogrammok (EEG), elektrokardiogrammok idősorainak, tőzsdeindexek, meteorológiai és szeizmikus adatok értelmezéséhez és előrejelzésekhez elengedhetetlenek. Tekintve, hogy a lineáris módszerekhez képest a matematika egy relatív fiatal és jelenleg is intenzíven kutatott területe, legnépszerűbb numerikus szoftvercsomagok (Matlab, SciPy) nem tartalmaznak erre vonatkozó algoritmusokat. A TISEAN csomag C és Fortran nyelven íródott, meglehetősen korlátozott módon teszi lehetővé az algoritmusok használatát és erősen UNIX orientált. Mindezek ellenére a leghasználtabb nyílt forrású csomag ezen a területen. Célunk az volt, hogy az eredeti forráskód lehető legkevesebb módosításával biztosítsunk egy rugalmas, magaszintű programozási felületet ehhez a csomaghoz. A dolgozatban bemutatom a TISEAN csomagnak a tudományos körökben egyre népszerűbb Python programozási nyelvhez írt csatolási felületének működését és az így elérhető felhasználói felület alkalmazását EEG adatok analízisére. 2

Tartalomjegyzék 1. Bevezető...4 1.1. Idősorok nemlineáris analízise...4 1.2. EEG...5 2. TISEAN...6 3. Python...8 3.1 Pythonról röviden...8 3.2. Numerikus Python...9 3.3. C Python...9 4. PyTisean...9 4.1 Követelmények...9 4.2 Technikai nehézségek...10 5. Következtetés, kitekintés...11 6. Függelék...12 7. Könyvészet...16 3

1. Bevezetés 1.1. Idősorok nemlineáris analízise A káoszelméletnek az utóbbi évtizedekben elért sikerei nagy mértékben befolyásolták a tudományok széles köreinek fejlődését. A lineáris módszerek csak szabályszerű viselkedését vizsgálják a rendszernek. Ez azt jelenti, hogy kis változtatással a kezdeti feltételben kis változást okozunk a rendszer időbeli evolúciójában. Ezzel ellentétben a nemlineáris rendszerben egy kis változás a kezdeti paraméterekben óriási változást okoz a végkifejletben. Míg a lineáris egyenletek exponenciális csökkenés (vagy növekedés), vagy (csillapított) rezgés alakú megoldásokat adnak, a szabályszerűtlen viselkedést véletlenszámok generálásával vezetik be. Ezzel szemben az analízis nemlineáris módszereivel véletlen bemeneti adatok generálása nélkül is elérhető szabályszerűtlen viselkedés, ez a viselkedés benne van az egyenletbe. 1.1 ábra: Egy terhes nő ECG felvétele, jól látható, hogy a felső grafikonon a magzat szívverése megzavarja a jelet. Az alsó grafikon már már a nemlineáris módszerrel elkülönített magzat életjelei. 4

1.2 Elektroencefalogram (EEG) Az EEG az agy által kibocsátott elektromos jelek elvezetésén alapszik. Az agyban lezajló különböző folyamatok az agy különböző területein más más jelet eredményeznek. Az első elvezetések után (1875 Richard Caton) csak jóval később sikerült létrehozni a legelső EEG laboratóriumot (1924 Hans Berger), és ennek ellenére néhány évtized alatt áttörő eredményekre tettek szert. Előnyei: nem invazív (nem kell az elektródáknak áthatolni a koponyán), nagy az idő felbontása, relatíve olcsó. A jelek lineáris analízissel történő elemzése: spektrum analízis, koherencia, korreláció vizsgálata, nagyjából kimerítettnek tekinthető. Két dolognak köszönhetően az EEG reneszánszát éli: a nemlineáris módszerek fejlődésének és a számítási kapacitás Moore törvénye szerinti töretlen növekedésének köszönhetően. Nemlineáris módszerekkel vizsgálják: komplexitás analízis, szinkronizáció, DFA (detrended fluctuation analysis), PAA (period amplitude analysis), SA (slope analysis), orsó számlálás, stb. Fp1-F7 F7-T5 T5-O1 Fp1-F3 F3-P3 P3-O1 Fp2-F4 F4-P4 P4-O2 Fp2-F8 F8-T6 T6-O2 EKG-A1 F8-A2 T5-A1 T6-A2 1.2 ábra: Az újszülöttől gyűjtött EEG jel. 5 Leye Reye

2. TISEAN A TISEAN (Nonlinear Time Series Analysis) [TISEAN] egy software csomag idősorok analíziséhez, melynek komponensei C illetve Fortran nyelven íródtak, és az algoritmusok a nemlineáris dinamikai rendszerek elméletén alapszanak. A TISEAN algoritmusai meglehetősen korlátozottan használhatók, és elsősorban UNIX/Linux alatt futtathatók. A különböző algoritmusok kizárólag a parancssorból hívhatók meg egy sor opció megadásával. Az adatok szöveges állományokból olvasódnak be illetve íródnak ki, de esetenként a standard ki és bemenet is használható. A forráskód elérhető a GPL alatt. A TISEAN nem objektum orientált és kissé rendezetlen szerkezetú. Mindezek ellenére a leghasználtabb nyílt forrású csomag ezen a területen. A makenoise megfelelő opciók megadásával növeli egy rendszer entrópiáját, vagy adatok megadása nélkül használható véletlenszámok generálására is. A makenoise futtatása shellből: $./makenoise -omakenoise.out -l2 -r3 -m3 -%20 -g makenoise.in Bemeneti adatok: 45.6 123.4 79.8 13.4 15.8 17.9 Az eredeti kód válasza az előző opciókkal: TISEAN 3.0.1 (C) R. Hegger, H. Kantz, T. Schreiber (1998-2007)./source_c/makenoise: Adds noise to a time series or just creates random numbers Using makenoise.in as datafile! Using columns: 1 2 3 get_multi_series: first data item(s) used: 45.600000 123.400000 79.800000 Use 2 lines. Opened makenoise.out for writing A fájlban az adat: 4.424726e+01 1.204070e+02 7.425254e+01 9.043848e+00 1.385074e+01 2.029503e+01 A fenti parancs a makenoise.in nevű állományban található mátrix három oszlopára és két sorára helyez egy normál eloszlású zajt és az eredményt a makenoise.out nevű álományban tárolja. Az 6

opciók teljes dokumentációja megtalalható a függelékben. A delay különböző opciók beállításával egy sor vektort térít vissza a TDE (Time Delay Embedding) módszer alapján, a neki megadott skalár vagy többváltozós idősor elemeiből. A delay futtatása shellből: $ delay -odelay.out -l10 -m5 -M2 -F3,2 -d3 delay.in Bemeneti adatok: 45.6 123.4 13.4 15.8 11.8 21.3 90.7 56.0 22.6 17.9 27.4 16.8 66.8 55.3 89.7 99.0 95.6 74.4 33.4 47.8 Az eredeti kód válasza az előző opciókkal: TISEAN 3.0.1 (C) R. Hegger, H. Kantz, T. Schreiber (1998-2007)./source_c/delay: Produces delay vectors Using delay.in as datafile! Using columns: 1 2 get_multi_series: first data item(s) used: 45.600000 123.400000 Use 10 lines. Opened delay.out for writing A fájlban az adat: 6.680000e+01 9.070000e+01 4.560000e+01 5.530000e+01 5.600000e+01 8.970000e+01 2.260000e+01 1.340000e+01 9.900000e+01 1.790000e+01 9.560000e+01 2.740000e+01 1.180000e+01 7.440000e+01 1.680000e+01 3.340000e+01 6.680000e+01 9.070000e+01 4.780000e+01 5.530000e+01 A fennebb megadott parancs a delay.in állomanyban megadott mátrixból alakít ki 5 dimenziós delay vectorokat. Az öt dimenziós vector hármat vesz az első kettőt a második tengelyről, és 3 sával lépve hátra haladva írja ki az adatot. 7

3. Python 3.1 Pythonról röviden A Python egy könnyen tanulható, sokoldalú programozási nyelv. Könnyen kezelhető magas szintű adatstruktúrákkal rendelkezik, és egyszerű ugyanakkor eredményes az obiektum orientált programozás nyelvi megvalósítása. A Python nyelvtana elegáns, a típuskezelése dinamikus. Értelmezett nyelv, mely a byte fordítást is támogatja (mint pl. a Java), ideális szkriptek készítésére, továbbá nagyon gyors alkalmazásfejlesztést tesz lehetővé több platformon, szerteágazó területeken. A Python értelmező interaktívan is használható. A Python egyre növeli a népszerűségét, az idei májusi felmérések [TIOBE ] szerint a programozási nyelvek közül népszerűségét tekintve a 6 ik helyen áll. Az értelmező és a sokrétű, alaposan kidolgozott alap könyvtár (Standard Library) szabadon elérhető és felhasználható akár forráskódként, akár bináris formában minden jelentősebb platformra. Mivel maga is C ben íródott, egyszerűen kiegészíthető C vagy C++ nyelven (vagy más, C ből hívható nyelven) új függvényekkel és adattípusokkal. A Python lehetővé teszi a programok modulokra történő felosztását, amelyek felhasználhatók más Python programokban is. A nyelvhez tartozó alap könyvtár alaposan kidolgozott modulgyűjteményt tartalmaz, melyek a programok alapjául használhatók. Vannak beépített modulok is mint a fájl I/O, rendszerhívások, socket ek kezelése és interfészek olyan grafikus felülethez, mint a Tk. 3.2 NumPy A Numerikus Python [NumPy] egy kiegészítő csomag része a Python programozási nyelvhez, ez a csomag a SciPy. A SciPy adatstruktúráját a NumPy látja el, amely mindamellett, hogy támogatja a nagymennyiségű, többdimenziós vektorokkal és mátrixokkal való műveleteket, rendelkezik egy széleskörű magas fokú matematikai fuggvényeket kezelő könyvtárral is. A NumPy a klasszikusnak tekintett LAPACK (Linear Algebra Package) [LAPACK] magasszinten optimalizált lineáris algebra csomagon alapszik. Teljesítményben a legtöbb területen lekörözi a Matlabot [NumPy v. MatLab]. Kiegészítve a Matplotlib adatvizualizálás csomaggal a Matlab nyílt forrású versenytársának tekinthető. 8

3.3 C Python A Pythont sajat magunk által megírt C rutinokkal is ki lehet egészíteni. Erre több lehetőség is rendelkezésünkre áll. A legegyszerűbb a Swig [SWIG] mely esetén le kell dokumentálni a C modul felületét és a kötés automatikusan generalódik. Ez az út nehézkessé válik bonyolult adatstrukturák esetén. A másik lehetőseg a hivatalos C Python felület használata. Mivel nekünk a Numpy összetett adatstruktúráival kellett összeegyeztetnünk a TISEAN algoritmusokat ezért választásunk a C Pythonra esett. A Python beépített moduljai bármikor könnyen kiegészíthető C ben vagy C++ ban írt új modulokkal, melyek elősegíthetik a Pythont olyan műveletekben, amelyeket nem tud közvetlenül elvégezni, létrehozhatnak új beépített típusokat, vagy akár meghívhatnak más C könyvtárbeli függvényeket is. 4. PyTisean 4.1 Követelmények Célunk az volt, hogy az eredeti forráskód lehető legkevesebb módosításával biztosítsunk könnyen kihasználható programozási felületet az amúgy értékes szoftvercsomaghoz. A felület két szintű (4.1 ábra): C programozasi felulet Az előbbire épített Python programozási felület. 4.1 ábra: A felületek összekapcsolódása. 9

4.2 Technikai kivitelezés, és nehézségek A TISEAN on belüli modulok nagy mértékben függetlenek egymástól, és csak nagyon kis részük általánosított. A függvénykezelése is nehezen átlátható, az analízis rész nincs kellőképpen elválasztva a konfigurációktól, beolvasás és kiiratástól. Egyes számításokat elvégeznek külön függvények, más számítások pedig main en belül történnek meg. (lásd a B. függeléket) Az adatok bevitele és kimenetele állományból illetve allományba történik. Az előbb említett okok miatt olyan megoldást kellett keresni, amely feltételezi azt, hogy az analízis rész ne változzon, csak a beolvasáson illetve a kiiratáson essen meg a változás. Mindenképpen el akartuk kerülni a forráskód módosítását, ezért az a döntés született, hogy megváltoztatjuk a csomag által használt standard könyvtarak közül a fájlba írás és fájlból olvasás függvények szerepét, ez a függvény "eltérítés" abból a szempontból hátrányos, hogy ha valaki módosítana valamelyik modul kiiratásának vagy beolvasásának módján az eredeti kódban, tehát nem fájlba ír vagy olvas, illetve nem azon a módon ír és olvas fájlba, a módszer nem működne megfelelő képpen, ha az illető a fontosabb részét, vagyis az analízis részét fejlesztené, nincs semmiféle probléma, a felület kompatibils lesz bármilyen módosítással. Persze a cél az általanos felület illeszkedése bármelyik modulra, az illeszthetőséget megkönnyíti az a tény, hogy minden modul hasonlóképpen olvas be és irat ki adatot. Az adatok beolvasása különböző opcióktól függenek, erről részletesebben beszámol a függelék, alapértelmezettként mindenhol a fájlból kerülnek be adatok, Legelőször egy C API ra volt szükség, melynek segítségével bármelyik modul meghívható legyen, és úgy a bemeneti mint a kimeneti adat mátrix vagy tömb legyen, ennek előnye, hogy nem kell kivágni adatokat, a modulok kivágási opciójára nincs is szükség. Azt sem szabad elfelejteni, hogy szinte minden modulban van egy analízis résztől nem független main, amelyek nem hívhatók függvényként, ezért szükség volt egy apró módosítás eszközlésére a kódban mégpedig minden main t át kellett nevezni, a megkülönböztetés végett a fájl nevét választottuk (természetesen kiterjesztés nélkül). A C API egy teljes io eltérítőnek számít, rákapcsolódik a TISEAN ra, mind a bemenet mind a kimeneti adatokat tömbök ként kezeli, függvényként hívja meg a modulokat, felülírva a TISEAN által használt kiegészítőket. A C API ra rátevődik a PyTisean, amely már Python függvények meghívásával dolgozik, a bemeneti adatokat a NumPy on keresztül biztosítja a a C API nak. 10

4.3 Eredmények Sikerült létrehozni néhány algoritmus esetén úgy a C mint a Pythonos felületet. Példaként ha vesszük a makenoise függvényt, annak meghívása C ből az alábbiak szerint történik: void makenoise(double ** array, // az adattomb unsigned long rows, // adattomb sorainak szama unsigned long cols, // adattomb sorainak szama double noiselevel, // relativ zaj int absolute, // 1 - absolute zaj (ha normal //eloszlas, akkor annak a varianciaja) 0 - relativ int gaussian, // 0 - egyenletes,!=0 - normal int change_seed, // valtoztassunk-e random generator // magot? 0 - nem,!=0 - igen int new_seed, // uj mag double ** array_out); // kimeno tomb Pythonbol a következő módon hívható (kivonat az interaktív folyamat kimenetéből): >>> from numpy import * >>> import tisean >>> x = array([[1., 2. 3.], [4., 5., 6.]]) >>> tisean.makenoise(x, 0.2) array([[ 2.00822526, 2.47325951, 3.93971907], [ 4.95812804, 6.09397683, 6.23706164]]) A makenoise ra vonatkozó Python help a C függelékben található 5. Következtetés, kitekintés Lényegében a TISEAN C ben íródott felével sikerült elérni a célunkat, vagyis sikerült egy olyan működőképes rugalmas, magaszintű felületet írni, amely megfelel a követelményeknek, kevés módosítással az eredeti kódban. Másodlagos célnak tűzhető ki a TISEAN csomag Fortranban fejlesztett részére írni egy hasonló felületet, vagy ráépíteni a meglévőt. Legvégső iránynak pedig a TISEAN csomag teljes mértékben való átírását lehet tekinteni. 11

6. Függelék A. Példa TISEAN algoritmusok opcióira A delay parancs: Opció Leírás Alapértelmezett l# használandó pontok száma a teljes állomány x# kivágandó sorok száma 0 M# beolvaslandó oszlopok száma 1 c# beolvasandó oszlopok specializálása 1,.. m# beszúrandó dimenzió 2 F# a delay vector formája nincs beállítva d# késés 1 D# lista különálló késésekre nincs beállítva o# kimeneti állomány neve standard kimenet (stdout) V# verbosity szint, ha 0: csak pánik üzenet 1: minden üzenet 1 h ezeket az opciókat írja ki nincs alapértelmezett A makenoise parancs: Opció Leírás Alapértelmezett l# használandó pontok száma a teljes állomány x# kivágandó sorok száma 0 m# használandó oszlopok száma 1 c# beolvasandó oszlopok száma 1 %# zajszint százalékban 5 r# abszolút zajszint nincs beállítva g gaussian zaj uniform helyett uniform I# megváltoztatja a véletlenszám generátor magját valamilyen konstansok O nem olvas be adatot, véletlenszámot generál (szükséges r, l) nincs beállítva o# kimeneti állomány neve standard kimenet (stdout) V# verbosity szint, ha 0: csak pánik üzenet 1: minden üzenet 1 h ezeket az opciókat írja ki nincs alapértelmezett 12

A makenoise futtatása shellből: $./makenoise -ofajlnev -l2 -r3 -m3 -%20 -g adat Bemeneti adatok: 45.6 123.4 79.8 13.4 15.8 17.9 Az eredeti kód válasza az előző opciókkal: TISEAN 3.0.1 (C) R. Hegger, H. Kantz, T. Schreiber (1998-2007)./source_c/makenoise: Adds noise to a time series or just creates random numbers Using /adat as datafile! Using columns: 1 2 3 get_multi_series: first data item(s) used: 45.600000 123.400000 79.800000 Use 2 lines. Opened filename for writing A fájlban az adat: 4.424726e+01 1.204070e+02 7.425254e+01 9.043848e+00 1.385074e+01 2.029503e+01 Az fájlbaírás eltérítése után, ugyanazokkal az opciókkal a válasz a standard outputra: 4.424726e+01 1.204070e+02 7.425254e+01 9.043848e+00 1.385074e+01 2.029503e+01 Az alábbi egy példa a modulok által használt main re a makenoise ból: B. A makenoise algoritmus main fuggvényének kivonata. A forráskódban kiemeltük a kimenetre vonatkozó sorokat. 1 int main(int argc,char** argv) 4 unsigned long i,j; 2 { 5 double av=0.0,*sigmax; 3 char stdi=0; 6 FILE *fout; 13

7 8 if (scan_help(argc,argv)) 9 show_options(argv[0]); 10 11 scan_options(argc,argv); 12 #ifndef OMIT_WHAT_I_DO 13 if (verbosity&ver_input) 14 what_i_do(argv[0],wid_str); 15 #endif 16 17 if (!justcreate) { 18 infile=search_datafile(argc,argv,null,verbosity) ; 19 if (infile == NULL) 20 stdi=1; 21 } 22 else 23 stdi=1; 24 25 if (outfile == NULL) { 26 if (!stdi) { 27 check_alloc(outfile=(char*)calloc(strlen(infile) +5,(size_t)1)); 28 strcpy(outfile,infile); 29 strcat(outfile,".noi"); 30 } 31 else { 32 check_alloc(outfile=(char*)calloc((size_t)10, (size_t)1)); 33 strcpy(outfile,"stdin.noi"); 34 } 35 } 36 if (!stout) 37 test_outfile(outfile); 38 39 if (!justcreate) { 40 if (column == NULL) 41 array=(double**)get_multi_series(infile,&length, exclude,&dim,"",dimset, 42 verbosity); 43 else 44 array=(double**)get_multi_series(infile,&length, exclude,&dim,column, 45 dimset,verbosity); 46 } 47 else { 48 check_alloc(array=(double**)malloc(sizeof(doub le*)*dim)); 49 for (i=0;i<dim;i++) { 50 check_alloc(array[i]=(double*)malloc(sizeof(dou ble)*length)); 51 for (j=0;j<length;j++) 52 array[i][j]=0.0; 53 } 54 } 55 56 check_alloc(sigmax=(double*)malloc(sizeof(dou ble)*dim)); 57 58 if (!absolute) { 59 for (j=0;j<dim;j++) 60 variance(array[j],length,&av,&sigmax[j]); 61 } 62 63 rnd_init(iseed); 64 65 for (i=0;i<10000;i++) rnd_1279(); 66 67 for (j=0;j<dim;j++) { 68 if (!cgaussian) 69 equidistri(sigmax[j],j); 70 else 71 gauss(sigmax[j],j); 72 } 73 if (!stout) { 74 fout=fopen(outfile,"w"); 75 if (verbosity&ver_input) 76 fprintf(stderr,"opened %s for writing\n",outfile); 77 for (i=0;i<length;i++) { 78 for (j=0;j<dim 1;j++) 79 fprintf(fout, "%e ",array[j][i]); 80 fprintf(fout, "%e\n",array[dim 1][i]); 81 } 82 fclose(fout); 83 } 84 else { 85 if (verbosity&ver_input) 14

86 fprintf(stderr,"writing to stdout\n"); 87 for (i=0;i<length;i++) { 88 for (j=0;j<dim 1;j++) 89 fprintf(stdout,"%e ",array[j][i]); 90 fprintf(stdout,"%e\n",array[dim 1][i]); 91 } 92 } 93 94 for (i=0;i<dim;i++) 95 free(array[i]); 96 free(array); 97 free(sigmax); 98 if (outfile!= NULL) 99 free(outfile); 100 if (infile!= NULL) 101 free(infile); 102 if (column!= NULL) 103 free(column); 104 105 return 0; 106 C. A Makenoise függvény Python csomagolásának dokumentációja: A Python interaktív értelmezőjében az >>> import tisean >>> help(tisean) parancsok kimenete: Help on module tisean: NAME tisean - Wrapper for the TISEAN package FILE /home/zsolt/kutatas/tisean/cpython/tisean.py DESCRIPTION R. Hegger, H. Kantz, and T. Schreiber, Practical implementation of nonlinear time series methods: The TISEAN package, CHAOS 9, 413 (1999) http://www.mpipks-dresden.mpg.de/~tisean/ FUNCTIONS makenoise(array, level, absolute=false, gaussian=false, seed=0) Adding noise to signal Usage: makenoise(array, level, absolute=false, gaussian=false, seed=0) numpy.ndarray array: N x M type of matrix of doubles numpy.double level: noise level (absolute if 'absolute' is True, relative to the signal otherwise). It should be a positive value bool absolute: see above bool gaussian: if True the noise applied has a normal distribution with variance 'level', otherwise uniform int seed: seed value for the random number generator. If '0' the system time is used. 15

7. Könyvészet [TISEAN]TISEAN weboldala: http://www.mpipks dresden.mpg.de/~tisean/tisean_3.0.1/index.html [LAPACK], [Numpy vs. Matlab] Wikipedia http://en.wikipedia.org/wiki/numpy [NumPy] NumP weboldala http://numpy.scipy.org/ [TIOBE] a TIOBE Programing Comunity Index legfrissebb felmérése: http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html [SWIG] a SWIG weboldala: http://www.swig.org/ 16