Matematika a számítógéppel
TeX ●
Szövegszedő rendszer, amellyel nyomdai minőségben lehet dokumentumokat előállítani –
Jeszenszky Péter Debreceni Egyetem, Informatikai Kar
[email protected]
●
1
–
●
Szövegszedő rendszer, amellyel nyomdai minőségű dokumentumokat lehet készíteni
●
Nyílt forrású és ingyenesen elérhető
●
Hardverigénye minimális
●
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
3
Jellemzők
TeX: –
Nem szövegszerkesztő!
Bemutatásra kerülő nyílt forrású matematikai szoftverek ●
Például leveleket, tudományos publikációkat, könyveket, diplomamunkákat, de akár kottákat is
●
2
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) ●
●
LaTeX
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
●
●
●
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
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) ●
●
●
Használat (1)
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
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
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
7
A szerző és a tipográfus munkájának éles szétválasztása –
6
Nem kell, hogy a szerző a vizuális megjelenéssel foglalkozzon, azt stílusállományok határozzák meg
8
Használat (2)
TeX és a WYSIWG programok (1) ●
file.dvi monitor ●
TeX fordító
file.ps
file.tex ●
PDFTeX fordító szövegszerkesztő
nyomtató
file.pdf
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
billentyűzet
9
WYSIWYG szövegszerkesztő programok ●
●
●
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 –
–
TeX és a WYSIWG programok (2)
What You See Is What You Get (WYSIWYG) –
Ö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
11
10
●
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ó
–
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/
Egyszerűen lehet TeX dokumentumokat automatikusan generálni
–
proTeXt (MS Windows) http://www.tug.org/protext/
–
MacTeX (Mac OS X) http://www.tug.org/mactex/
13
15
Felhasznált irodalom
Több országban társaságokba tömörülnek a felhasználók és a fejlesztők –
●
Több TeX disztribúció: TeX Live (Linux, UNIX, MS Windows, Mac OS X)
Felhasználói közösség ●
Comprehensive TeX Archive Network (CTAN) http://www.ctan.org/ –
– ●
Hozzáférhetőség
●
A legfőbb társaság az USA-beli székhelyű TUG (TeX Users Group) http://www.tug.org/
Wettl Ferenc – Mayer Gyula – Szabó Péter: LaTeX kézikönyv. Budapest, 2004, Panem Kiadó.
Magyar TeX Egyesület http://www.inf.unideb.hu/~matex/
14
16
Mi az R? ●
●
●
●
●
Fő jellemzők (2)
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
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)
Fő jellemzők (1) ●
●
Interaktív környezet, egyben egyszerű és hatékony interpretált programozási nyelv
●
Funkcionális objektum-orientált programozási nyelv
●
Elegáns, tömör szintaxis
●
Kimagasló grafikus lehetőségek
●
Fejlesztők
–
Klasszikus és modern statisztikai eljárások széles választéka áll rendelkezésre (beépítve és csomagokban)
Eredeti szerzők: Ross Ihaka, Robert Gentleman (Department of Statistics, University of Auckland, New Zealand)
●
● 18
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 –
●
Kapcsolódó projektek ●
Például statisztikusok, közgazdászok, pszichológusok, biológusok és orvosok (bioinformatika)
●
●
Nagyszerűen használható ábrák készítéséhez –
Például diplomamunkákhoz, tudományos publikációkhoz
21
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/
Elérhetőség Fő szerver: http://www.r-project.org/
●
Minden platformra bináris állományok (CRAN)
●
CRAN (Comprehensive R Archive Network):
●
Csomagok telepítése és frissítése:
●
Szoftver, dokumentáció és csomagok
–
Magyar tükör: http://cran.hu.r-project.org/ (SOTE)
Magyar nyelvű dokumentáció: –
Telepítés
●
–
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.pdf
23
22
–
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
Használat ●
●
●
25
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: –
26
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) ●
Vektoraritmetika
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 ●
●
●
●
Logikai, egész, valós, karakter, komplex és bináris vektorok
●
Egyéb fajta objektumok, amelyek fontosak: listák, kifejezések, függvények, mátrixok, data frame-ek, faktorok –
●
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
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)
A legegyszerűbb adatszerkezet a vektor: –
Vektorok bárhol előfordulhatnak aritmetikai kifejezésekben (műveletek elemenkénti végrehajtása)
30
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) ●
●
●
●
Példa
Vektor első 10 elemének kiválasztása: x[1:10]
●
Példa függvényt visszaadó függvényre: f <- function(beta) function(x) 1 / (1 + exp(-beta * x))
Minden páros indexű elem kiválasztása: x[1:(length(x)/2)*2]
plot(f(1), 5, -5) # a =1 paraméterű szigmoid # függvény ábrázolása a # [-5,5] intervallumon
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
f(1)(0) ●
33
Példa kifejezés objektumok használatára: e <- expression(sin(x) * cos(x)) D(e,"x") # a kifejezés x szerinti deriváltja
Funkcionális programnyelv ●
●
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
●
●
●
●
Például lehet kifejezéseket szimbolikusan deriválni
●
Nagyon fejlett grafikus lehetőségek –
Kifejezés-objektumokkal kifejezéseket lehet manipulálni –
35
Grafika
A függvényeket úgy lehet manipulálni, mint bármely más fajta objektumokat –
# a =1 paraméterű szigmoid függvény # értéke x=0 esetén
34
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
2. 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
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))
x <- rnorm(100) pdf(file="ecdf.pdf") plot(ecdf(x), do.points=FALSE, verticals=TRUE) curve(pnorm, add=TRUE, col="red") dev.off()
37
39
38
40
3. példa
4. példa
Pontok és vonalak megjelenítése (2): Brownmozgások távolsága
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/")
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
43
42
44
5. példa
6. példa Oszlopdiagram (3): SF.net projektek és programozási nyelvek – a 10 legnépszerű programozási nyelv
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)")
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/")
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
SF_projects.tab: 45
46
projects "ActionScript" "Ada" 89 "APL" 13 ...
7
47
48
7. példa
8. példa
Kördiagram (1): webböngésző statisztikák
Hisztogram (1): szürkeskálás JPEG kép hisztogramja (rimage csomag)
49
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)
50
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")
51
52
9. példa
10. példa
Sok-dimenziós adatok megjelenítése: borok vegyi összetétele
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), ")"))))
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
55
54
56
11. példa
12. példa
3D grafika (2): felület kontúr-térképe
2D FFT (1): JPEG kép Fourier spektruma (rimage csomag)
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")
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)
57
59
58
60
13. példa
14. példa
Interaktív grafika: Spline-görbe illesztése az egérrel kijelölt pontokra
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)))
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
63
62
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 (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) }
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() }
67
16. 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
66
68
16. példa (folytatás)
R és LaTeX
Hogy a lehető legszebb eredményt kapjuk, a gráfot két részgráfra bontjuk
●
R ábrák beillesztése LaTeX dokumentumokba: –
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 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