ABSTRACT: octave (matlab(R) clone) wird vorgestellt AUDIENCE: users SYSTEM: any unix SECTION: usefull unix applications AUTHOR: mond COPYRIGHT: GNU Free Documentation Licence http://www.gnu.org/licenses/fdl.txt nachdem wir die basis konzepte von unix und den grundlagen der systemadministration hinter uns gebracht haben haben wollen wir uns jetzt eine zeit lang mal nuetzlichen applicationen widmen. octave ist ein cloen (selbe funktion aber neu programmiert) der mathematik software "matlab" (kosten etwa 500 EUR oder mehr... ) octave ist fuer numerische berechnungen. rechnet also nicht symbolisch sondern mit konkreten zahlen. man kann interaktiv rechnen. matrizen verarbeiten und 2 oder 3 dimensionale plots ausgeben. bei plots greift octave auf das bewerte "gnuplot" zurueck. neben dem interaktiv rechnen kann man in sogenannten .m files eigen funktionen definieren. hier gibt es eine breite sammlung an sogennanten "toolboxen" (viele davon eigentlich fuer matlab geschrieben die auch auf octave laufen). weiters kann man auch in bester unix tradition scripts in octave schreiben. eine beispiel octave sitzung: octave danach haben wir einen octave prompt: octave:1> octave verwendet gnu readline und die bedinung ist wie in der bash gewohnt. alfons=3 weisst der variable alfons den wert 3 zu. alfons*7 gibt uns den wert 21 aus. t=[1 3 7] erzeugt einen zeilen vekotr (d.i eine matrix mit nur einer zeile aber (hier) 3 spalten.) t=[1:10] erzeigt einen zeilenvektor mit den werten 1 2 3 ... bis 10. der vektor wird danach ausgegeben. bei grossen vektoren und matrizen will man die nicht unbedingt sehen (1000 und mehr werte muellen einem ziemlich dem bildschirm zu). setzte man hinter einen octave ausdruck einen ; so wird das ergebeniss der berechnung NICHT ausgegeben: t=[0:0.1:10]; erzeugt einen zeilenvektor mit den 101 werten [0 0.1 0.02 ... 9.9 10 ] t[7:9] list das 7te 8te und 9te element von t aus. a=sin(t); wendet die sinus funktion auf jedes element des vektors an. und erzeugt so einen ergebniss zeilenvektor. plot(t,a); erzeugt einen plot mit dem t vektor als x werte und dem a vektor als y werte. (funktioniert nur wenn man im X11 eingelogt ist). will man den plot nicht am bildschirm sondern in eine datei kann man das mit dem befehel: gset term postscript gset output "bla.ps" sagt man dem octave dass es die plot ausgaben (via gnuplot) in die datei bla.ps im postscript format schreiben soll. grid schaltet gitterlinien bei plots ein replot zeichnet den plot von vorhin neu. diesmal dann in die datei bla.ps octave (gnuplot) kann auch in den formaten: aed512 aed767 aifm bitgraph cgm corel dumb dxf eepic emtex epson-180dpi epson-60dpi epson-lx800 fig gpic hp2623a hp2648 hp500c hpdj hpgl hpljii hppj imagen kc-tek40xx km-tek40xx latex linux mf mif mp nec-cp6 okidata pbm pcl5 png postscript pslatex pstex pstricks qms regis selanar starc table tandy-60dpi tek40xx tek410x texdraw tgif tkcanvas tpic vttek x11 xlib zeichnen. gset term gibt eine uebersicht ueber die wichtigsten formate. gset output gset term X11 setzt wieder die X11 obeflaeche als ausgabegeraet. octave kann nicht nur grafik sondern auch sound ausgeben: t=(1:8000)/8000*2*pi;playaudio(sin(t*400)*125) spielt einen 400hz ton eine sekunde lang ab (die sample rate ist per default 8khz und die amplitude ist ein 8 bit signed integer) t=(1:8000)/8000*2*pi;playaudio(40*rand(size(t)).+ sin(400*t)*80) waere ein sinuston mit rauschen unterlegt. help gibt eine uebersicht ueber eingebaute oder im pfad vorhanden .m file funktionen. z.b: help pmt erklaert die funktion pmt. die rechnet z.b. die tilgunsraten eines kredits aus. m=rand(5,3) erzeugt eine 5 zeile/ 3 spalten matrix mit zufaelligen werten zwischen 0 und 1; plot(m) zeichnet die graphen der 3 spaltenvektoren. mesh(m) eine 3 dimensionale oberflaeche beschrieben durch die werte der matrix. m=5*m; skalierte die matrix mit 5; b=m' transponiert die matrix (zeilen werden zu spalten und vv.) b*m bildet das matrizenprodukt b*m size(m) gibt die spalten und zahlen der matrix aus. ones(size(m)) erzeugt eine matrix mit nur einsen. t*ones(size(t))' waere also das inprodukt von t mit einem vektor der genauso gross ist wie t und nur einsen hat. also aller elemente summe von t. einfacher zu erreichen mit: sum(t) oft will man mathematische operationen nicht im matrizen stil machen sondern jedes ellement einer matrix oder eines vektors mit dem korrespondierenden ellement einer anderen matrix verarbeiten. fuer diese operationen schreibt man in octave .* .+ ./ etc.. z.b: a=t .+ sin(t) ; bildet einen vektor aus der elemntweisen adition des ersten vektors (t) mit dem zweiten vektor der aus der elemenweisen anwendung des sinus auf den vektor t entstanden ist. plot(t .+ sin(t)); zeigt den vektor an. fuer techniker praktisch sind auch die logarithmischen plots: semilogx semilogy loglog .... octave arbeitet selbstverstaendlich auch mit komplexen zahlen: plot(roots(1:100),'x') rechnet (naeherungsweise) die nullstelen des polynoms 1*z^99 + 2*z^98 + ... 99*z + 100 die conjugiert komplexen loesungen werden mit 'x' markiert und liegen interssanterweise fast auf einem kreis. eigene funktionen kann man in .m files schreiben. z.b.: in das file bla.m im aktuellen verzeichniss schreiben wir: function ergebniss = bla (x) ergebniss = sin(x) .* cos(x) ; endfunction dann rufen wir in octave die funktion auf: bla([0 pi/4 pi/2 ]) ans = 0.00000 0.50000 0.00000 variablen kann man auch abspeichern und laden: save bla.txt m t speichert die variablen m und t im file bla.txt ab. das file ist ascii text und kann mit einem editor bearbeitet werden. load bla.txt laed alle in bla.txt enthaltenen variablen wieder in die octave umgebung. wie gesagt laesst sich octave auch als script sprache verwenden: im file: bla.oct #!/usr/bin/octave gset term postscript gset output "bla.ps" grid plot(sin(0:0.1:5*pi)); und dann ./bla.oct ausgefuehrt erzeut den plot als bla.ps file. mehr zu octave in der doku... EXERCISES: * zeichne eine parabel und eine sinuskurve * wie klingt eine schwebung aus einem ton mit 1000 und einem mit 1002 hz? * zeichne einen mesh plot mit einer flaeche die, von einem zentrum ausgehende wellenlinien zeigt. REFERENCES: info octave help am octave prompt. http://www.octave.org/ http://www.octave.org/doc/octave_toc.html