1.1 Was istOctave? Der NameOctavehat mit Musik nichts zu tun! Es ist der Name eines ehemaligen Chemie Professors vom 1 Autor vonOctavehcereBfle-.iDurf¨inseleTabentreseforPosserawrbackoftheenvelop¨rhutms,hcenllfie nungendurchzuf¨uhren.EsisteineinteraktiveSkriptsprache,diespeziellf¨urvektorbasierteBerechnungen optimiert ist und dabei Standardroutinen der numerischen Mathematik (z.B. EISPACK oder LAPACK) auf einfacheWeisezug¨anglichmacht[?]. Zusa¨tzlich zu der Lo¨sung von Problemen der Linearen Algebra und derIntegralrechnung,demL¨osenvonGleichungssystemeundPolynomenetc.,istesm¨oglich,eigeneFunk-tionen zu denierenund/oder dynamisch geladene Module in C++, C oder Fortran zu verwenden. Dadurch ist Octave fast uneingeschra¨nkt erweiterbar!
1.2 Installation GNUOctavelDticsiterhibnutiondenalelrgVenmreeienwednn¨noufufgednneifrofeSartwdee,tsienie Lizenzregeln (General Public License GPL) unterliegt.
Linux:Octaveist ein Native-Linux-Programm, das bei vielen Distributionen schon als Binary-Package vorhanden ist. Ist dies nicht der Fall, so siehehttp://www.octave.org/download.html.
Windows:ObwohlOctaveein Linux-Programm ist, so existiert auch eine Portierung nach Windows. Dieses erfordert jedoch dennoch Linux-Grundwissen, weshalb eine FAQ unter http://octave.sourceforge.net/Octave Windows.htmeingerichtet wurde.
1.3 Aufruf vonOctave •Starten vonOctavedurch:
Œ−→Interaktiver Modus. octave Œ−→Ausfu¨ hrung der Skriptdatei (s. Abschnitt1.4) und beenden vonOctave octave file.m .
•Verlassen vonOctavedurch oder . quit exit
1.4 Syntaxkonventionen Die Syntax vonOctaveist der von MATLAB sehr a¨hnlich.Octave-Programme ko¨nnen meist von MATLAB ausgefu¨hrtwerden.DerUmgekehrteWegistaufgrunddesgr¨oßerenFunktionsumfangvonMATLABnicht immer gewa¨hrleistet.
•Skriptdateien sind Textdateien mit dem Sufx.m. Sie werden im interaktiven Modus durch die Ein-gabe des Dateinamens ohne sufxinterpretiert (gelesen und ausgefu¨ hrt). Sie ko¨nnen aber auch durch den Aufruf von von der Shell aus interpretiert werden. In beiden Fa¨llen verhalten octave file.m sie sich so, als ob ihr Inhalt Zeile fu¨ r Zeile am Prompt eingegeben wu¨ rde.
•Octaveist case-sensitive.
•Das Semikolon (;ckt die Ausgabe der Auswer-) trennt mehrere Befehle in einer Zeile und unterdru¨ tung.
•Das Komma (,hrmententr)enienielhefeBeredr¨unterle,urZeibadeuAgsrenekcdtuArerewsgnut abernicht.Dieskannf¨urAblaufkontrolleundDebuggingn¨utzlichsein.
1 John W. Eaton
2
•Drei Punkte (. . .ned,sadsreuAdsurckindern¨achtenZieeloftregeszmtaw)tiirldZ.eenenbedeutde Dies ist sinnvoll, um zu lange Zeilen in mehrere aufzuteilen.
•Kommentare beginnen mit dem Zeichen%oder#.
1.5 Hilfe! •listet alle Befehle und internen Variablen auf. help •gibt einen Hilfetext zur Variable oder Funktion finamefl aus. help name Beispiel:
2
octave:6> help norm
Datentypen
Intern bearbeitetOctave fastalle Datentypen als Matrizen; auch ein Skalar ist eine1×1Matrix.
2.1 Numerische Objekte 2 •Reale und Komplexe Skalare:liegtsind gespeichert in doppelter Genauigkeit. Der Wertebereich −308 308−16 zwischen2.2251×10und1.7977×10. Die relative Genauigkeit ist2.2204×10.
•Matrizen:k¨neinonneibeilebeeßo¨rGegndnubeha¨oGrreiheßydanimcs¨hnaedrn.DieWerteeiner Matrix sind wiederum reale oder komplexe Skalare. Beispiel:
octave:32> [1 2; 3 4] ans =
1 2 3 4 octave:33> [1+2i ans =
1 + 2i 3 + 0i
2 + 0i 4 - 4i
2; 3 4-4i]
2.2 String-Objekte String-ObjektesindZeichenfolgen,diezwischeneinfachenoderdoppeltenAnf¨uhrungszeicheneingeschlos-sen sind (¨oder´. Intern speichertOctaveStrings als Matrizen von Zeichen. Alle Indizierungsoperationen, dief¨urMatrizendeniertsind,arbeitenauchaufStrings. Beispiel:
octave:11> x = ["das ", "ist ", "ein ", x = das ist ein Beispielsatz.
"Beispielsatz."]
octave:12> y = ["das ist ein Beispielsatz."] y = das ist ein Beispielsatz.
octave:12> x(8) == y(8) ans = 1 2 auf Systemen, die das IEEE oating-pointFormat verwenden
3
2.3 Datenstrukturen DatenstrukturendienenderZusammenfassungvonObjektenverschiedenerTypen.DieSyntax¨ahneltC-style Strukturen. Intern sind sie als assoziative Arrays implementiert. Beispiel:
octave:17> c.real=2; octave:18> c.img=3.45; octave:19> c.name="complex"; octave:20> c % Ausgabe der Struktur c = { name = complex real = 2 img = 3.4500 }
3
Operationen
•Wertzuweisung: variable = expression •Skalaroperationen:+die u¨ blichen Operatoren sind vorhanden: - * / ˆ \ •Logische Operatoren:n:deanDbeiekitnameShrovdnisder¨nmitchenublietOnaknnoterepar . < <= > >= == & | Ausserdemstehtfu¨rungleichundf¨urnicht. <> ˜ •Matrixoperationen:Matrizen sind die wichtigsten Bausteine zur Programmierung inOctave. Des-wegen ist eine besonders grosse Anzahl an Operationen zur Matrixmanipulation vorhanden. Eine ¨ubersichtlicheAuistungfolgtdeshalbimn¨achstenAbschnitt.
•FunktionentigenMatvern¨unfoStfawerehamit-kjiebredeeid,olnseinsdeanrhvohcuanelhef,netl beiOctavenicht: usw. Wenn diese Operationen mit Matrizen sin,cos,exp,log,atan,abs, aufgerufen werden, so werden sie auf jedes Element der Matrix angewendet. Zusa¨tzlich bietetOctave viele andere Funktionen an, die sich mit bestimmten Themengebiete der Mathematik befassen (linea-re Algebra, nicht-lineare Gleichungen, Arithmetik, Differentialgleichungen, Optimierung, Statistik, Manipulation von Polynomen, Kontrolltheorie, Bildverarbeitung und Sprachverarbeitung usw.).
3.1 Matrixoperationen •Zeilenvektor:
v = [ 1 2 3 ] oder v = [1,2,3,4]
•Spaltenvektor:
v = [ 1; 2; 3 ]
Optional kann auch jedes Semikolon durch eine neue Zeile ersetzt werden:
v = [ 1 2 3 ]
•Automatische Erzeugung von Zeilen-Vektoren mit konstantem Inkrement:
Begin:Inkerement:Ende
4
octave:47> x = 1:0.5:3 x =
1.0000
1.5000
•Erzeugung einer Matrix:
2.0000
octave:48> A = [1 2; 3 4] A =
1 3
2 4
•Zusammensetzung von Matrizen:
octave:48> A = [1 2; 3 4] A =
1 2 3 4 octave:49> b = [5;6] b =
5 6 octave:50> C=[A b] C =
1 3
2 4
5 6
2.5000
3.0000
•bezeichnen Matrixaddition,- substraktion und -multiplikation. + - * •transponiert und konjugiert A. A' •transponiert A. A.' •ckt durch einen dem Operator vorangestellten Punkt:Elementweise Operatoren werden ausgedru¨ usw. .* ./ .- .ˆ
A = [ 1 2; 3 4]; A.ˆ2 Aˆ2 % Quadrierung der
•Indizierung und Slicing:
% Elementweise Matrix
potenzieren.
Œist das k-te Element des Zeilen- oder Spaltenvektor, wobei Indices bei 1 beginnen (nicht v(k) bei 0, wie bei Java/C/C++). Œist das Matrixelementakl A(k,l) Œist das fiSlicefl des Vektors vomm-ten bis zumn-ten Eintrag. v(m:n) v Œist diek-te Zeile der Matrix A. A(k,:) Œist diel-te Spalte der Matrix. A(:,l) •Wichtige Matrixoperationen:
Œweist derk-ten Zeile von A den Zeilenvektor zv zu. A(k,:) = zv Œ¨olhtscedik-te Zeile aus A. A(k,:) = []
5
4
Œweist derl-ten Spalte von A den Spaltenvektor sv zu. A(:,l) = sv Œ¨lhcsoeidtl-te Spalte aus A. A(:,l) = [] •Wichtige Matrixfunktionen:
Œgibt die La¨nge des Vektors v zuru¨ ck. length(v) Œgibt die Gro¨sse von A zuru¨ ck. [Zeilen, Spalten]=size(A) Œerzeugt einem×nMatrix mit 1-ern auf der Diagonalen. eye(m,n) Œerzeugt eine Nullmatrix. zeros(m,n) Œerzeugt eine Matrix, deren Elemente gleich 1 sind. ones(m,n) Œerzeugt eine Zufallsmatrix mit gleichverteilten Eintra¨gen. Andere Verteilungen, rand(m,n) z.B. Normalverteilung siehe . help randn
Kontrollstrukturen
4.1 Schleifen Die Syntax von for- und while Schleife soll anhand eines Beispiel vorgestellt werden:
for i=0:-2:-10 printf("%d\n",i); end
while k<K k=k+1; end
4.2 if- und switch Anweisungen Analog zu Schleifen werden hier zwei Beispiele vorgefu¨ hrt:
if x==0 error('x ist 0!') else y=1/x; end
switch pnorm case 1; sum(abs(v)) case inf; max(abs(v)) otherwise sqrt(v'*v)
end
4.3 Funktionen Funktionen werden innerhalb von Textdateien mit dem Sufx.mdeniert. Die Unterschiede zu Skripten bestehen im Wesentlichen in folgenden Punkten:
•Das erste Code Fragment (keine Kommentare) innerhalb einerSkriptdateiist keine Funktionsdekla-ration. (ist die erste Zeile z.B so wird eine .m Datei zu einer Skriptdatei). 1; •Funktionen ko¨nnen mit Argumenten aufgerufen werden.
6
•Variable innerhalb einer Skriptdatei und ausserhalb von Funktionen sindglobal. •Alle innerhalb der Funktionen verwendeten Variablen sindlokal. •deklariert als globale Variable. global name name
function foo(arg1,arg2) global N %vdeklariere N tue was.. end
•dasTLABmussie(nnIAMet¨ibureioktdansdeenunrFedtimaNmitmmm.A.estisnamtionFunkDre sosein);IstdasnichtderFall,somussdieDatei,inderdieFunktiondeniertist,explizit¨uberden Befehl geladen werden. load •werden. (In MATLAB ist dieses FeatureIn einer Skriptdatei ko¨nnen mehrere Funktionen deniert nicht vorhanden!!)
•Dokumentation:Octaveist in der Lage, den ersten Kommentarblock nach der Deklaration des Funk-tionskopfeszuerkennenundbeimAufrufvonf¨urdieseFunktionauszugeben.Diesgiltf¨ur help Funktionen, die in Skript- und in Funktionsdateien deniertsind.
Beispiel:
function [R_ortho,d]=Orthogonalize(R) %%Orthogonalize a square matrix based on svd. %%returns orthogonal Matrix and its determinant. if(rows(R) != columns(R)) error ("Orthogonalize: Orthogobalization requires a square matrix."); end
[u,s,v]=svd(R); %Funktion liefert mehr als ein Parameter zur"uck.
% recalculate R with all singular % values set to 1 R_ortho = u*v'; d=det(R_ortho); endfunction
5
Fehlermeldungen
•Parse errormeldet einen Syntaxfehler an der mit (x) markierten Stelle:
octave:1> a=[1 2 3]; %deklaration eines Zeilenvectors octave:2> a*b % Multiplikation mit b: nicht definiert error: `b' undefined near line 2 column 3 %colum 3: dritte Stelle in der Zeile error: evaluating expression near line 2, column 3
7
% line 2: aktuelle Zeile. s. Prompt error: evaluating binary operator `*' near line 2, column 2 error: evaluating assignment expression near line 2, column 2