Matematika a számítógéppel
Jeszenszky Péter Debreceni Egyetem, Informatikai Kar
[email protected]
1
Bemutatásra kerülő nyílt forrású matematikai szoftverek ●
●
TeX: –
Szövegszedő rendszer, amellyel nyomdai minőségű dokumentumokat lehet készíteni
–
Eredetileg is arra tervezték, hogy képes legyen matematikai képleteket kezelni, ebben szinte verhetetlen
R: –
Statisztikai és grafikai környezet
–
Egyben hatékony funkcionális és objektum-orientált programozási nyelv
●
A kettő együttes használata
2
TeX ●
Szövegszedő rendszer, amellyel nyomdai minőségben lehet dokumentumokat előállítani –
●
Például leveleket, tudományos publikációkat, könyveket, diplomamunkákat, de akár kottákat is
Nem szövegszerkesztő!
3
Jellemzők ●
Nyílt forrású és ingyenesen elérhető
●
Hardverigénye minimális
●
●
●
Minden géptípusra és elterjedten használt operációs rendszerhez rendelkezésre áll (Linux, UNIX, Mac OS X, Windows, DOS, … ) Nagyon széles körben alkalmazható A műszaki, tudományos életben elterjedten használt, bizonyos tudományágakban megkerülhetetlen
4
Eredet és történet (1) ●
●
A számítógép-programozás művészete című művének szedéséhez alkotta meg az 1970-es évek második felében Donald E. Knuth –
Olyan programot alkotott, amellyel szép és esztétikus megjelenésű, nyomdai minőségű dokumentumokat lehet készíteni
–
Olyan program, amely képes matematikai képletek szedésére
A művészet jelentésű görög (kiejtés: „ techné” ) szóból származik a TeX elnevezés
5
Eredet és történet (2) ●
Nagyon megbízhatóan működő program, amelyben már csak ritkán változtatnak –
●
●
A verziószám a számhoz tart, jelenleg 3.141592
Megoldható általa minden tipográfiai feladat –
Több száz parancs használható, lehetőség makrók írására
–
Makrók nélkül nagyon bonyolult lenne a használat
A szedést megkönnyítő makrócsomagok készültek –
Maga Knuth írta a „ plain TeX” makrócsomagot
6
LaTeX ●
●
●
Eredetileg az 1980-as évek elején Leslie Lamport által kifejlesztett magas szintű dokumentumleíró nyelv, amely a TeX-re épül A legtöbb nagy kiadó foglalkozik LaTeX-hel szedett művek kiadásával A műszaki-tudományos életben általában ezt szokták használni, ha TeX-ről beszélnek
7
Használat (1) ●
●
A TeX nem szövegszerkesztő, hanem szövegszedő program! –
A dokumentumok készítéséhez használni lehet bármilyen szövegszerkesztőt
–
A szövegben elhelyezett parancsokkal vezérelhető a szedés
A szerző és a tipográfus munkájának éles szétválasztása –
Nem kell, hogy a szerző a vizuális megjelenéssel foglalkozzon, azt stílusállományok határozzák meg
8
Használat (2) file.dvi monitor TeX fordító
file.ps
file.tex PDFTeX fordító szövegszerkesztő
nyomtató
file.pdf
billentyűzet
9
WYSIWYG szövegszerkesztő programok ●
What You See Is What You Get (WYSIWYG) –
●
Ilyen például az OpenOffice.org Writer vagy az MS Word
A legtöbb felhasználó általában nem ért a tipográfiához –
Ösztönösen választanak például betűméretet, betűtípusokat, térközöket
–
Sok WYSIWYG szövegszerkesztő programokban így elkészített dokumentumok láttán egy tipográfust megütne a guta
10
TeX és a WYSIWG programok (1) ●
●
●
Természetesen WYSIWYG programokra is szükség van, megvan a létjogosultságuk A TeX használata lehetővé teszi egységes megjelenésű dokumentumok készítését Nehéz olyan bárki számára könnyen elérhető WYSIWYG programot találni, amellyel a TeXhez fogható minőségben lehet műszakitudományos szövegeket szedni
11
TeX és a WYSIWG programok (2) ●
●
Akár egy informatikában kevésbé jártas, nem szakmabeli felhasználó is könnyen elsajátíthatja a TeX alapszintű használatát –
Nincs szüksége matematika formulákra sem, csak alapvető szövegformázó parancsokra, amelyekből egy tucatnyi elég számára
–
Számottevő mennyiségű MS Word melletti szitkozódás megtakarítható általa:)
Vannak WYSIWYG-jellegű programok TeX dokumentumok előállításához
12
További előnyök ●
●
Kimagasló megbízhatóság Nemzeti nyelvek és az Unicode szabvány támogatása –
●
●
A magyar nyelv kimagasló támogatása
A TeX-ben készített dokumentumokat verziókezelő rendszerekben – mint például a CVS vagy a Subversion – tárolva bármelyik korábbi állapotuk visszaállítható Egyszerűen lehet TeX dokumentumokat automatikusan generálni
13
Felhasználói közösség ●
Több országban társaságokba tömörülnek a felhasználók és a fejlesztők –
●
A legfőbb társaság az USA-beli székhelyű TUG (TeX Users Group) http://www.tug.org/
Magyar TeX Egyesület http://www.inf.unideb.hu/~matex/
14
Hozzáférhetőség ●
●
Comprehensive TeX Archive Network (CTAN) http://www.ctan.org/ Több TeX disztribúció: –
TeX Live (Linux, UNIX, MS Windows, Mac OS X)
–
teTeX (Linux és UNIX rendszerekre) – általában alapértelmezésben rendelkezésre áll az operációs rendszerben
–
MiKTeX (MS Windows) http://www.miktex.org/
–
proTeXt (MS Windows) http://www.tug.org/protext/
–
MacTeX (Mac OS X) http://www.tug.org/mactex/
15
Felhasznált irodalom ●
Wettl Ferenc – Mayer Gyula – Szabó Péter: LaTeX kézikönyv. Budapest, 2004, Panem Kiadó.
16
Mi az R? ●
●
●
●
●
Nyílt forrású statisztikai, grafikai környezet és programozási nyelv Az S nyelv implementációja Bizonyos tekintetben – például grafika terén – fejlettebb, mint az S-PLUS! Az implementációra nagy hatással volt a Scheme programozási nyelv Eltérések a többi implementációtól az R javára (gyorsabb, letisztultabb, kifinomultabb)
17
Fő jellemzők (1) ●
●
Funkcionális objektum-orientált programozási nyelv
●
Elegáns, tömör szintaxis
●
Kimagasló grafikus lehetőségek
●
Interaktív környezet, egyben egyszerű és hatékony interpretált programozási nyelv
Klasszikus és modern statisztikai eljárások széles választéka áll rendelkezésre (beépítve és csomagokban)
18
Fő jellemzők (2) ●
●
●
●
●
Nyílt forrású (GNU GPL) és ingyenesen hozzáférhető Többféle géptípuson és az elterjedten használt operációs rendszerekhez rendelkezésre áll (Unix/Linux, MS Windows, Mac OS X) Kitűnően dokumentált (on-line dokumentáció, könyvek) Aktív felhasználói közössége van Könnyen tanulható, megszerethető (szubjektív 19 vélemény)
Fejlesztők ●
Eredeti szerzők: Ross Ihaka, Robert Gentleman (Department of Statistics, University of Auckland, New Zealand) –
●
●
A motiváció az volt, hogy az S kereskedelmi forgalomban kapható megvalósítása (S-PLUS) megfizethetetlenül drága volt az egyetemek számára
1997 óta a fejlesztést az R Core Team koordinálja és végzi Az R Foundation az R támogatására létrehozott 20 nonprofit szevezet
Célközönség ●
Olyanok használják, akiknek munkája során statisztikai módszereket és eljárásokat kell használniuk –
●
Nagyszerűen használható ábrák készítéséhez –
Például statisztikusok, közgazdászok, pszichológusok, biológusok és orvosok (bioinformatika) Például diplomamunkákhoz, tudományos publikációkhoz
21
Elérhetőség ●
Fő szerver: http://www.r-project.org/
●
CRAN (Comprehensive R Archive Network):
●
–
Szoftver, dokumentáció és csomagok
–
Magyar tükör: http://cran.hu.r-project.org/ (SOTE)
Magyar nyelvű dokumentáció: –
Solymosi Norbert: R<-… erre, erre… ! (Bevezetés az R-nyelv és környezet használatába) (123 oldalas PDF dokumentum) http://cran.r-project.org/doc/contrib/Solymosi-Rjegyzet.p
22
Kapcsolódó projektek ●
●
●
Bioconductor: Open Source Software for Bioinformatics (R csomagok) http://www.bioconductor.org/ The Omega Project for Statistical Computing (R csomagok) http://www.omegahat.org/ Grafikus felhasználói felületek (nyílt forrásúak és kereskedelmiek egyaránt) http://www.r-project.org/GUI/
23
Telepítés
●
Minden platformra bináris állományok (CRAN)
●
Csomagok telepítése és frissítése: –
Lokálisan az állományrendszerben található csomagok telepítése parancssorból: R CMD INSTALL csomagok
–
Interaktív módon hálózatról – CRAN szerverekről – az interpreterben a download.packages(), install.packages(), update.packages() függvényekkel
–
Rgui (Windows): csomagok telepítése, frissítése menüből
24
25
26
Használat ●
●
●
Tipikusan interaktív módon az interpreterben, de természetesen parancsállományokat is végre lehet hajtani Az R különböző fajta objektumokkal dolgozik, amelyeket műveletekkel és függvényekkel lehet létrehozni más objektumokból, vagy pedig külső forrásokból IO műveletekkel Van egy elég egyszerű beépített táblázatszerkesztője is
27
IO (1) ●
●
Adatok betöltése táblázatos formájú szöveges állományokból (CSV) Lehetséges más statisztikai rendszerekből származó adatok betöltése (foreign csomag): –
●
●
Képes adatokat betölteni relációs adatbázis kezelő rendszerekből Képes hálózati kommunikációra: –
EpiInfo, SAS, S-PLUS, SPSS, Stata, Systat
Egy átlagos felhasználó számára annyit jelent, hogy állománynevek helyett lehet URL-eket használni
28
IO (2) ●
Csomagok alkalmazás specifikus formátumok feldolgozásához: –
Speciális bináris formátumok (HDF5, netCDF)
–
JPEG (rimage csomag – digitális képfeldolgozás)
–
WAV (sound és tuneR csomagok – digitális hangfeldolgozás)
●
Adattömörítés (gzip, bzip2)
●
XML
29
Objektumok, amelyekkel az R dolgozik ●
A legegyszerűbb adatszerkezet a vektor: –
●
Egyéb fajta objektumok, amelyek fontosak: listák, kifejezések, függvények, mátrixok, data frame-ek, faktorok –
●
Logikai, egész, valós, karakter, komplex és bináris vektorok
Számos olyan egzotikus fajta objektum van, amelyekkel egy átlagos felhasználó soha nem is találkozik
A különböző fajta objektumokat szinte megszorítás nélkül szabadon lehet keverni
30
Vektoraritmetika ●
Vektorok bárhol előfordulhatnak aritmetikai kifejezésekben (műveletek elemenkénti végrehajtása) –
●
●
●
Kifejezésekben szereplő vektorok normalizálása közös hosszra
Vektorokkal indexelni lehet vektorokat Nagyon komplex kifejezéseket nagyon tömören le lehet írni Mindezeket általánosítani lehet tömbökre és mátrixokra, amelyek szintén vektorok
31
Példák vektorok használatára (1) ●
●
●
Sorozatok: 1:5 3:-3
1 2 3 4 5 3 2 1 0 -1 -2 -3
Összefűzés: c("X","Y","Z") c(1:4,4:1)
"X" "Y" "Z" 1 2 3 4 4 3 2 1
Vektor aritmetika: c(1,2,3,4)*c(2,3,4,5) 1:5*2 sin(1:10) -0.5440211 c(1,2,3)%*%c(1,2,3)
2 6 12 20 2 4 6 8 10 0.8414710 ... 14 32
Példák vektorok használatára (2) ●
●
●
●
Vektor első 10 elemének kiválasztása: x[1:10] Minden páros indexű elem kiválasztása: x[1:(length(x)/2)*2] Az összes elem kiválasztása minden 13. elhagyásával: x[-(1:(length(x)/13)*13)] Vektor negatív elemeinek helyettesítése nullákkal: x[x<0]<-0
33
Funkcionális programnyelv ●
●
A függvényeket úgy lehet manipulálni, mint bármely más fajta objektumokat –
Függvény lehet függvény visszatérési értéke
–
Függvény megváltoztathatja más függvények argumentumlistáit és törzsét
Kifejezés-objektumokkal kifejezéseket lehet manipulálni –
Például lehet kifejezéseket szimbolikusan deriválni
34
Példa ●
Példa függvényt visszaadó függvényre: f <- function(beta) function(x) 1 / (1 + exp(-beta * x)) plot(f(1), 5, -5) # a =1 paraméterű szigmoid # függvény ábrázolása a # [-5,5] intervallumon f(1)(0)
●
# a =1 paraméterű szigmoid függvény # értéke x=0 esetén
Példa kifejezés objektumok használatára: e <- expression(sin(x) * cos(x)) D(e,"x") # a kifejezés x szerinti deriváltja
35
Grafika ●
Nagyon fejlett grafikus lehetőségek –
●
●
●
●
Például matematikai képletek megjelenítése hasonlóan ahhoz, ahogyan a LaTeX is csinálja
A beépített grafikus lehetőségeket további csomagok bővítik Többféle grafikus eszköz támogatása (PostScript, PDF, LaTeX, XFIG, JPEG, PNG) Sokféle beállítási lehetőség, de az alapértelmezések elfogadásával is egyszerű ízléses ábrákat készíteni Interaktív grafika is készíthető
36
1. példa Függvények és görbék megjelenítése (1): standard normális eloszlásból származó minta empirikus eloszlásfüggvényének megjelenítése x <- rnorm(100) pdf(file="ecdf.pdf") plot(ecdf(x), do.points=FALSE, verticals=TRUE) curve(pnorm, add=TRUE, col="red") dev.off()
37
38
2. példa Pontok és vonalak megjelenítése (1): Brownmozgás szimulációja x <- sample(c(-1, 1), replace=TRUE, size=100) y <- cumsum(x) plot(y, type="b", main="Brown-mozgás", xlab="t", pch=19, lty="dotted", col="green3") abline(0, 0, col=gray(0.8))
39
40
3. példa Pontok és vonalak megjelenítése (2): Brownmozgások távolsága n <- 100 y1 <- cumsum(rnorm(n)) y2 <- cumsum(rnorm(n)) x <- c(1:n, n:1) y <- c(y1, rev(y2)) plot(x, y, type="n", main="Brown-mozgások távolsága") polygon(x, y, col="lightgreen") abline(0, 0, col=gray(0.8))
41
42
4. példa Oszlopdiagram (1): levelezési lista éves forgalma data <- c(584, 535, 623, 516, 416, 690, 690, 581, 774, 745, 840, 604) names(data) <- c("Jan", "Feb", "Már", "Ápr", "Máj", "Jún", "Júl", "Aug", "Sze", "Okt", "Nov", "Dec") barplot(data, main="A jena-dev levelezési lista forgalma(2004)", sub="Forrás:http://groups.yahoo.com/group/jenadev/")
43
44
5. példa Oszlopdiagram (2): operációs rendszerek piaci részesedésének megoszlása data <- read.table("OS_stat_2004.tab", header=TRUE, check.names=FALSE) barplot(as.matrix(data), legend=rownames(data), ylim=c(0, 100), beside=TRUE, col=rainbow(nrow(data)), border="white", main="Operációs rendszerek százalékos piaci részesedése (2004)")
OS_stat_2004.tab: "Win XP" Mac Jan 44.1 Feb 46.0 Már 48.0 49.7 Ápr ...
W2000
"Win 98"
"Win NT"
"Win 95"
33.6 32.8 31.1 30.2
10.4 9.5 9.4 8.7
0.4 0.4 0.4 0.3
2.4 2.5 2.4 2.5
3.0 2.9 2.4 2.2
2.7 2.6 2.6 2.7
Linux
45
46
6. példa Oszlopdiagram (3): SF.net projektek és programozási nyelvek – a 10 legnépszerű programozási nyelv data <- read.table("SF_projects.tab",header=TRUE) n <- min(10, nrow(data)) i <- order(data$projects, decreasing=TRUE)[1:n] barplot(rev(data$projects[i]), names.arg=rev(rownames(data)[i]), horiz=TRUE, col=rev(heat.colors(n))) title(main="SF.net projektek és programozási nyelvek", sub="Forrás: http://sourceforge.net/softwaremap/")
SF_projects.tab:
projects "ActionScript" "Ada" 89 "APL" 13 ...
7
47
48
7. példa Kördiagram (1): webböngésző statisztikák data <- c(65.4, 4.5, 2.1, 18.7, 4.1, 0.3, 1.1) names(data) <- c("IE 6", "IE 5", "O 7", "Ffox", "Moz", "NN 4", "NN 7") pie(data, labels=paste(names(data), " (", data, "%)", sep=""), col=gray(seq(0.4, 1, length=length(data)))) title("Böngészőprogramok piaci részesedése (2005. január)", "Forrás: http://www.w3schools.com/browsers/browsers_stats.asp")
49
50
8. példa Hisztogram (1): szürkeskálás JPEG kép hisztogramja (rimage csomag)
library(rimage) oldpar <- par() par(mfrow=c(2, 1)) data <- read.jpeg("frogs.jpg") title <- paste("JPEG image data,", nrow(data), "x", ncol(data), ",", attr(data, "type")) plot(data, main=title) breaks <- 100 hist(data, breaks=breaks, col=gray(0:breaks / breaks), xlab=NULL, ylab=NULL, main=NULL) par(oldpar)
51
52
9. példa Sok-dimenziós adatok megjelenítése: borok vegyi összetétele data.url <- "ftp://ftp.ics.uci.edu/pub/machinelearning-databases/wine/wine.data" data <- read.csv(url(data.url), header=FALSE) pairs(data[7:10], main="Chemical Analysis of Wines", labels=c("Total phenols", "Flavanoids", "Nonflavanoid phenols", "Proanthocyanins"), bg=c("red", "green", "blue")[data[[1]]], pch=21, cex=1.5, font.main=4) title(sub=paste("Source:" , data.url)
53
54
10. példa 3D grafika (1): felület perspektivikus megjelenítése f <- function(x, y) besselJ(sqrt(x^2 + y^2), 0) x <- seq(-10, 10, length=100) y <- x z <- outer(x, y, f) persp(x, y, z, theta=45, phi=30, col="coral") title(expression(paste(f(x, y) == J[0], bgroup("(", sqrt(x^2 + y^2), ")"))))
55
56
11. példa 3D grafika (2): felület kontúr-térképe x <- seq(-5, 5, length=100) y <- x f <- function(x, y) sin(x * y) z <- outer(x, y, f) filled.contour(x, y, z, color.palette=heat.colors) title(expression(f(x) == sin(x * y)), xlab="x", ylab="y")
57
58
12. példa 2D FFT (1): JPEG kép Fourier spektruma (rimage csomag) library(rimage) oldpar <- par() par(mfcol=c(2, 1)) data <- read.jpeg("frogs.jpg") title <- paste("JPEG image data,", nrow(data), "x", ncol(data), ",", attr(data, "type")) plot(data, main=title) plot(fftImg(data), main="FFT") par(oldpar)
59
60
13. példa Interaktív grafika: Spline-görbe illesztése az egérrel kijelölt pontokra plot.new() plot.window(c(-10, 10), c(-10, 10)) axis(1) axis(2) box() p <- locator(type="p", pch=16, col="red") f <- splinefun(p) plot(f, -10, 10) points(p, pch=16, col="red")
61
62
14. példa Kifejezés objektumok: különböző paraméterű szigmoid függvények ábrázolása f <- function(beta) function(x) 1 / (1 + exp(-beta * x)) plot.new() plot.window(c(-5,5), c(0, 1)) axis(1) axis(2) box() title(main=expression(f(x)==frac(1, 1 + exp(-beta * x)))) beta <- seq(from=1, to=10, length=5) legend <- expression() for (i in 1:length(beta)) { plot(f(beta[i]), -5, 5, add=TRUE, col=rainbow(length(beta))[i]) legend <- c(legend, substitute(beta == value, list(value=beta[i]))) } legend("bottomright", legend=legend, xjust=0.5, fill=rainbow(length(beta)))
63
64
Gráfok ●
A Bioconductor projekt keretében fejlesztett graph és Rgraphviz csomagok szükségesek gráfok kezeléséhez –
●
Gráfok, irányított gráfok, véletlen gráfok kezelése –
Az utóbbihoz telepíteni kell a nyílt forrású Graphviz programot http://graphviz.org/
Gráfok manipulálása, gráfalgoritmusok, gráfok síkba rajzolása, IO (DOT formátum)
65
15. példa Gráfok (1): véletlen gráf létrehozása, amelyben bármely két csúcs között p valószínűséggel összekötött library(Rgraphviz) g <- randomEGraph(LETTERS[1:10], p=0.5) for (layout in c("dot", "neato", "twopi")) { png(file=paste(layout, ".png", sep="")) plot(g, layout, main=paste("Layout:", layout)) dev.off() }
66
67
16. példa Gráfok (2): férfiak és nők közötti (véletlenszerű) szimpátia kapcsolatokat reprezentáló gráf létrehozása library(Rgraphviz) g <- new("graphNEL", edgemode="directed") N1 <- c("Erika", "Nóra", "Sára", "Zita") N2 <- c("Attila", "Béla", "Imre", "Jenő", "Lajos", "Ottó") g <- addNode(N1, g) g <- addNode(N2, g) for (n in N1) { g <- addEdge(n, sample(N2, 2), g, 1) } for (n in N2) { g <- addEdge(n, sample(N1, 2), g, 1) }
68
16. példa (folytatás) Hogy a lehető legszebb eredményt kapjuk, a gráfot két részgráfra bontjuk sg1 <- subGraph(N1, g) sg2 <- subGraph(N2, g) subGList <- list(list(graph=sg1), list(graph=sg2)) attrs <-list(node=list(fontcolor="white",fillcolor="black")) plot(g, subGList=subGList, attrs=attrs)
69
70
R és LaTeX ●
R ábrák beillesztése LaTeX dokumentumokba: –
●
R objektumok beillesztése LaTeX dokumentumokba: –
Minden ábra PicTeX, PostScript vagy PDF formátuma menthető, amelyet a szokásos módon illeszthetünk be LaTeX dokumentumba
A Hmisc csomag latex() függvénye R objektumokat LaTeX-be konvertál
71