Hága Péter ELTE Komplex Rendszerek Fizikája tanszék Unix/Linux alapok Hága Péter ELTE Komplex Rendszerek Fizikája tanszék
Unix és Linux Unix: gyors, biztonságos szerver operációs rendszer 1969-ből. Sun - Solaris, IBM - AIX, Hewlett-Packard - HP-UX. Linux: legelterjedtebb Unix változat, amit 1991-től fejlesztenek. Linus Torvalds, finn programozó fejlesztett ingyenes Unix alapú OS-t, és megosztotta a kódjait azokkal akik részt akartak venni a munkában.
Miért használjunk Linux-ot? - általában Linux robosztus és stabil Linuxban kevesebb bug található, mint más OS-ben Linux erőteljes Linux nagy teljesítményű Linux szinte minden eszközzel együttműködik Linux flexibilis Testreszabható hardver támogatás Teljes mértékben testreszabható szoftverek Linux számos platformon fut Linux jól támogatott Linux meglehetősen olcsó Nincsenek licensz díjak Hatékony szoftverek egybecsomagolva a rendszerrel
Miért használjunk Linux-ot? - szerintem Linux erőteljes Linux nagy teljesítményű Linux szinte minden eszközzel együttműködik Linux jól támogatott Linux meglehetősen olcsó Ezért elterjedt egyetemi környezetben Elterjedt szerveres, superszámítógépes környezetben Hatékony szoftverek egybecsomagolva a rendszerrel Linux jól scriptelhető Szinte minden szoftver meghívható parancssorból Szoftverek jól kapcsolózhatóak, paraméterezhetőek Linux parancsok összefűzhetőek (pipe-olás) Linux szerverek távolról könnyen elérhetőek Linux jogosultságkezelés
Linux a valóságban Cygwin Virtuális gépek Disztribuciók Debian Mandrake Red Hat Ubuntu Cygwin Virtuális gépek Felhasználói felületek (GUI) Gnome KDE
Linux belépési módok accountra van szükség helyi login távoli login username és password helyi login távoli login parancs soros terminál grafikus belépés ssh [-X] username@machineAddress
File rendszer felépítése
Egyszerű parancsok Tab-ra kiegészítés Fel nyílra ugrik az előző parancsra Bash history Reguláris kifejezések parancs & - parancsok háttérben futtatása | - (pipe) parancsok összefűzése man - manual (help) Apropos gcc – c fordító
Egyszerű parancsok grep – kifejezés keresés less, more, cat emacs, gedit, vim ,... pwd - shows the current directory cd - changes directory / -abszolút path ./ -relatív path ../ - egy könyvtárral feljebb ls mkdir - makes directory rmdir - removes directory cp - copies mv - moves rm - removes [-r]
Megoldandó feladat
Feladat Ellenőrizzük azt az állítást, hogy a tőzsdei részvényárfolyamok véletlen bolyongással modellezhetőek! Azaz hasonlítsunk össze véletlen bolyongási adatokat valódi részvény árfolyamokkal Az statisztikai összehasonlítás módja pl. az eloszlás függvényeik, vagy a hisztogramjaik összehasonlítása
Megoldás lépései Két részfeladat: Véletlen bolyongás leprogramozása Véletlen bolyongás megvalósítása és vizsgálata Részvény árfolyam vizsgálata Véletlen bolyongás leprogramozása c nyelven adatsor elemzése awk segítségével ábrázolás gnuplottal adatsor letöltés: Google Finance Eredmények összehasonlítása, interpretációja, diszkusszió
Véletlen bolyongás
Véletlen bolyongás Diszkrét időlépés Normális eloszlású növekmény 1D, 2D, 3D
Véletlen bolyongás – c kód #include <stdlib.h> // függvény könyvtár betöltés #include <math.h> int main () { // program törzs kezdete int i; // változó deklarálások double x1,x2,y1,y2; double pos=0; srand(102); // pszeudo véletlenszám generátor inicializálás for (i=0;i<50000;i++) { // bolyongás léptetése x1=(double)rand()/RAND_MAX; // egyenletes eloszlású pszedo véletlen szám generálás x2=(double)rand()/RAND_MAX; y1 = sqrt( - 2*log(x1) )*cos( 2*3.14*x2 ); // normális eloszlású véletlen szám generálás y2 = sqrt( - 2*log(x1) )*sin( 2*3.14*x2 ); pos+=y1; // pozíció update printf("%.3f %.3f %.3f %.3f %.3f\n",x1,x2,y1,y2,pos); // eredmény kiírás } return 0; // visszatérési érték
Véletlen bolyongás – eredmény $ gcc randomwalk.c –o randomwalk -lm # forráskódunk futtathatóvá fordítása $ ./randomwalk # futtatás X1 X2 Y1 Y2 POS 0.380 0.863 0.901 -1.060 0.901 0.285 0.848 0.908 -1.299 1.809 0.566 0.067 0.972 0.438 2.781 0.786 0.864 0.454 -0.524 4.862 0.359 0.708 -0.380 -1.380 4.482 0.750 0.633 -0.509 -0.561 3.973 0.993 0.785 0.026 -0.118 4.000 0.688 0.650 -0.507 -0.700 3.492 ….
Véletlen bolyongás – AWK feldolgozás $ cat randomwalk.dat | cut -f3 -d" " > randomwalk_nov.dat # Y1 adatsor kiválasztása, mint növekmény $ MAX=`cat randomwalk_nov.dat | sort -n | tail -1` # legnagyobb növekmény $ MIN=`cat randomwalk_nov.dat | sort -n | head -1` # legkisebb növekmény $ echo $MAX $MIN # kiírás $ cat randomwalk_nov.dat | awk -v min=$MIN -v max=$MAX -v N=100 'BEGIN{for (i=0;i<N;i++) {h[i]=0;}}{h[int(($1-min)/((max-min)/N))]++} END{for (i=0;i<N;i++) print i*((max-min)/N)+min,h[i]}' > hist_randomwalk.dat # AWK hisztogram készítés
AWK hisztogram készítés $ cat randomwalk_nov.dat | awk -v min=$MIN -v max=$MAX -v N=100 ‘ BEGIN{ for (i=0;i<N;i++) {h[i]=0;} } { h[int(($1-min)/((max-min)/N))]++ END{ for (i=0;i<N;i++) print i*((max-min)/N)+min,h[i] ' > hist_randomwalk.dat
Részvény árfolyam vizsgálat
Részvény árfolyam vizsgálat Date,Open,High,Low,Close,Volume 22-Oct-08,19.31,20.19,18.13,19.33,37919533 21-Oct-08,20.14,21.48,19.34,20.20,40227081 20-Oct-08,20.17,20.79,19.07,19.77,32976429 17-Oct-08,17.97,20.26,17.52,19.24,46668538 16-Oct-08,18.60,19.25,16.93,18.69,63137199 15-Oct-08,20.23,20.46,17.61,18.13,86911035 14-Oct-08,21.21,24.20,20.55,21.94,138553805 13-Oct-08,15.43,19.06,12.66,18.10,199815501 10-Oct-08,9.19,11.30,6.71,9.68,207088145 9-Oct-08,17.98,18.30,11.95,12.45,102932615 8-Oct-08,16.99,19.47,16.23,16.80,40976047 7-Oct-08,24.28,24.28,14.13,17.65,90516780 6-Oct-08,22.49,24.40,20.17,23.50,27022695 3-Oct-08,24.40,26.73,22.51,23.92,30168804 2-Oct-08,23.91,25.12,23.10,23.21,17885644 1-Oct-08,22.72,24.87,21.76,24.42,36159359 …
Részvény árfolyam vizsgálat - AWK Date,Open,High,Low,Close,Volume 22-Oct-08,19.31,20.19,18.13,19.33,37919533 21-Oct-08,20.14,21.48,19.34,20.20,40227081 20-Oct-08,20.17,20.79,19.07,19.77,32976429 17-Oct-08,17.97,20.26,17.52,19.24,46668538 16-Oct-08,18.60,19.25,16.93,18.69,63137199 15-Oct-08,20.23,20.46,17.61,18.13,86911035 14-Oct-08,21.21,24.20,20.55,21.94,138553805 13-Oct-08,15.43,19.06,12.66,18.10,199815501 10-Oct-08,9.19,11.30,6.71,9.68,207088145 9-Oct-08,17.98,18.30,11.95,12.45,102932615 8-Oct-08,16.99,19.47,16.23,16.80,40976047 7-Oct-08,24.28,24.28,14.13,17.65,90516780 6-Oct-08,22.49,24.40,20.17,23.50,27022695 3-Oct-08,24.40,26.73,22.51,23.92,30168804 2-Oct-08,23.91,25.12,23.10,23.21,17885644 1-Oct-08,22.72,24.87,21.76,24.42,36159359 … $ cat data.csv | cut -f5 -d"," > close.dat # záróárfolyamok kivágása
Részvény árfolyam vizsgálat - AWK $ cat close.dat | awk '{if (NR>2) {print $1-old}; old=$1}' > diff.dat # növekmény lépésenkénti meghatározása $ MAX=`cat diff.dat | sort -n | tail -1` # legnagyobb növekmény $ MIN=`cat diff.dat | sort -n | head -1` # legkisebb növekmény $ cat diff.dat | awk -v min=$MIN -v max=$MAX -v N=250 'BEGIN{for (i=0;i<N;i++) {h[i]=0;}}{h[int(($1-min)/((max-min)/N))]++} END{for (i=0;i<N;i++) print i*((max-min)/N)+min,h[i]}' > reszveny_hist.dat # AWK hisztogram készítés, ld. pár oldallal korábban
Eredmény / Gyakorlat
Gyakorlat Az előző feladat egyéni megvalósítása Kapott két hisztogram ábrázolása gnuplottal A kapott eredmények összehasonlítása, közös interpretációja, diszkusszió
Kérdések? haga@elte.hu