Eine sehr kurze Einführung in Octave
Vorbemerkung: Diese Einführung gilt für die XP-Version von Octave.
Inhaltsübersicht
- Am besten man tut es
- Etwas systematischer..
- Wie einem Hilfe zuteil wird
- Matrixfunktionen mit Beispielen
- Skripte und Funktionen
- Beispiele aus der Numerik
- Grafik & Visualisierung
- Am besten man tut es
In Octave können Zahlen sehr einfach eingegeben und berechnet werden. Z.B.
In diesem Dokument sind die Octave EINGABEN grün und die AUSGABEN blau dargestellt.
Die Ausgabe wird in der Octavevariablen ans gespeichert. Der wichtigste Datentyp in Octave ist die Matrix (eine Zahl ist eine 1x1-Matrix). Matrizen können Variablen zugeordnet werden, z.B. die Magische-Dürer-Matrix:
A=[16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1]
A =
16 3 2 13
5 10 11 8
9 6 7 12
4 15 14 1
Bei der Eingabe werden die Zahlen in einer Zeile mit Blanks oder Kommta getrennt, die einzelnen Zeilen mit Semikolon. Um z.B. die Summe aller Elemente der ersten Spalte zu erhalten, geben wirA(1,1)+A(2,1)+A(3,1)+A(4,1)
ans = 34
ein. Viel schneller geht die Benutzung des Doppelpunkt-Operators (:). Z.B.also finden wir das obige Ergebnis mit der sum-Funktion
Noch kürzer ist die automatische Nutzung des kleinsten und größten Indexes
sum(A(:,1))
ans = 34
bzw. die Summation über alle Spalten auf einmal:Um desgleichen mit den Zeilen zu veranstalten, benutzen wir einfach die transponierte Matrix:
B=A'
B =
16 5 9 4
3 10 6 15
2 11 7 14
13 8 12 1Oder für die Diagonale mit dem diag-Kommando
Wenn die Matrix um die Mittelachse gespiegelt wird ,können wir auch die Summe der Gegendiagonalen berechnen.
B=fliplr(A)
B =
13 2 3 16
8 11 10 5
12 7 6 9
1 14 15 4
Magische Quadrate lassen sich im übrigen ganz einfach in Octave z.B. mit
B=magic(4)
B =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1erzeugen. Dies entspricht nicht ganz unserer Eingangsmatrix. Dies läßt sich leicht korrigieren:
C=B(:,[1,3,2,4])
Zurück zur Inhaltsübersicht
C =
16 3 2 13
5 10 11 8
9 6 7 12
4 15 14 1 - Etwas systematischer..
Als Matrix-Element kann jeder gültiger Octaveausdruck verwendet werden:
x=[-1.3 sqrt(3) (1+2+3)*4/5]
x =
-1.3000 1.7321 4.8000Auf Matrixelemente wird mit der Angabe des Indexes in Klammern zugegriffen
x(4)=42
x =
-1.3000 1.7321 4.8000 0 42.0000(Beachten Sie, daß x(4) vorher noch nicht definiert war!)
Komplexe Zahlen werden einfach mit einem i oder j als imaginärer Einheit eingegeben. Z.B.:
A=[1 2 ;3 4]+i*[5 6; 7 8]
A =
1.0000 + 5.0000i 2.0000 + 6.0000i
3.0000 + 7.0000i 4.0000 + 8.0000i
Z.B. finden wir für die bekannte Euler-Formelexp(i*(1+i))
ans = 0.1988 + 0.3096iund
cos(1+i)+i*sin(1+i)
ans = 0.1988 + 0.3096iWie erwartet ;-)
Zurück zur Inhaltsübersicht
- Wie einem Hilfe zuteil wird, man aufräumt
und man andere Informationen erhält:
Am einfachsten benutzt man das help-Kommando. Z.B.
help sum
Sum is a built-in function
- Built-in Function: sum (X, DIM)
Sum of elements along dimension DIM. If DIM is
omitted, it defaults to 1 (column-wise sum).
Overloaded function
gsum(galois,...) spsum(sparse,...)
spsum(complex_sparse,...)
Additional help for built-in functions, operators, and variables
is available in the on-line version of the manual. Use the command
`help -i <topic>' to search the manual index.
Help and information about Octave is also available on the WWW
at http://www.octave.org and via the help-octave@bevo.che.wisc.edu
mailing list.
Um sich den Zustand der definierten Variablen und Funktionen anzusehen, kann man das who bzw. whos-Kommando benutzen.
who
*** dynamically linked functions:
dispatch*** currently compiled functions:
columns fliplr magic mod
*** local user variables:
A B C x
whos
*** dynamically linked functions:
prot type rows cols name
==== ==== ==== ==== ====
r-- dynamically-linked function - - dispatch
*** currently compiled functions:
prot type rows cols name
==== ==== ==== ==== ====
rwd user-defined function - - columns
rwd user-defined function - - fliplr
rwd user-defined function - - magic
rwd user-defined function - - mod
*** local user variables:
prot type rows cols name
==== ==== ==== ==== ====
rwd complex matrix 2 2 A
rwd matrix 4 4 B
rwd matrix 4 4 C
rwd matrix 1 4 x
Um alle definierten Variablen zu löschen geben wir
- Matrixfunktionen
In Octave sind grundsätzlich alle Rechenoperationen wie +-*/ und ^ für Matrizen definiert. Einige Beispiele:
A=[1 2 3;4 5 6]; B=[0 1 2; 4 5 6];
(Hier dient das Semikolon zwischen den Definitionen zum trennen der Eingaben und unterdrücken der Ausgaben.)
A/B
ans =
0.7500 0.2500
0.0000 1.0000A\B
ans =
2.0000 1.5000 1.0000
0 0 0
-0.6667 -0.1667 0.3333Hierbei entspricht der /-Operator der Rechts- und der \-Operator der Links-Division. D.h. das Ergebnis von X=B/A entspricht der Lösung der Gleichung X*A=B und X=A\B der Gleichung A*X=B .
Die Matrix-Links-Divison A\B ist immer definiert, wenn B soviele Zeilen hat wie A. Für die Rechts-Divison gilt A/B=(B'/A')' . Für über- bzw. unterbestimmte Systeme wird dann ein Ausgleichsverfahren (Least Squares) angewendet.D=[1,2,3;3,5,6;7,8,9]
D =
1 2 3
3 5 6
7 8 9D^2
ans =
28 36 42
60 79 93
94 126 150x=[1 2 3]; y=[4 5 6]';
x*y
ans = 32Wird eine komponentenweise Multiplikation, Division oder Exponentation gewünscht, ist der Operation ein Punkt (.) voranzustellen.
A./B
ans =
Inf 2.0000 1.5000
1.0000 1.0000 1.0000D.^2
ans =
1 4 9
9 25 36
49 64 81Für Matrizen sind viele weitere Funktionen, wie Eigenwerte (eig) , LU-Zerlegung (lu), Matrix-Exponential (expm), usw. definiert. Für dünn besetzte große Matrizen (sparse) gibt es in Octave spezielle Verfahren, die sehr viel Speicher und Rechenzeit sparen.
Zurück zur Inhaltsübersicht - Skripte und Funktionen
Skripte sind einfache ASCII-Textfiles, die Octavebefehle enthalten. Zeilen, denen ein %-Vorangestellt ist, werden als Kommentar verarbeitet. Aus einer Octave-Session heraus kann das Skript durch Aufrufen des Dateinmens aufgerufen werden. Das Standardverzeichnis, aus dem die abgespeicherten Dateien gelesern werden können ist ~\octave_files. Temporär kann das Arbeitsverzeichnis mit dem Befehl cd dir oder chdir dir geändert werden.
Ein gültiges Skript wäre z.B:
%fibscript.m
%Fibonacci-Zahlen
f=[1 1]; n=1;
while f(n) + f(n+1)<80
f(n+2)=f(n)+f(n+1);
n=n+1;
end;
fDieses Textfile sollte dann unter dem Namen fibscript.m abgespeicht werden.
!Achtung Windows-Editoren neigen dazu ein nicht sichtbares ".txt" an die Datei anzuhängen. Man vergewissere sich mit der rechten Maustaste und "Eigenschaften" und benutze ggf. den Befehl "umbenennen", um das ".txt" zu entfernen.
Ausgeführt wird das Skript mit
fibscript
f =
1 1 2 3 5 8 13 21 34 55Eleganter ist allerdings die Formulierung mit Hilfe einer Funktion. Diese könnte so aussehen:
function f=fibfun(n)
%FIBFUN berechnet die n-te Fibonacci Zahl
if n>2
f=fibfun(n-1)+fibfun(n-2);
else
f=1;
end;
end;Die Funktion wird unter dem Namen fibfun.m abgespeichert.
Hinweis: Der Funktionsname (erste Zeile) muss identisch dem Dateinamen sein, unter dem die Funktion abgespeichert wird.
Jetzt können wir die 10-te Fibonacci-Zahl einfach mitaufrufen. Ein Hilfesystem wird durch die Kommentar-Zeile gleich mitgeliefert:
help fibfun
Zurück zur Inhaltsübersicht
FIBFUN berechnet n-te Fibonacci Zahl - Beispiele aus der Numerik - Insbesondere
Polynome
Polynome werden in Octave sehr einfach durch die Angabe des Koeffizientenvektors definiert., z.B. wird das Polynom y=x3-30x+30 in Octave mit
dargestellt. Jetzt muß noch ein Wertebereich für x definiert werden:
(-8 bis 8 mit der Schrittweite 0.1). Die Funktionswerte y bekommen wir dann (alle auf einmal) mit der Funktion polyval :
Das kann geplottet werden:
Nullstellen finden wir mit roots :x0=roots(p)
x0 =
-5.92167
4.88447
1.03719Test:
polyval(p,x0)
Zurück zur Inhaltsübersicht
ans =
1.0e-013 *
0.42109
-0.21316
0.03553 - Grafik & Visualisierung
Octave benutzt zur grafischen Darstellung gnuplot. Sämtliche gnuplot-Operationen können angewendet werden. Octave kennt viele Befehle zur Visualisierung von Daten. Die plot-Funktion haben wir bereits kennen gelernt. Es gibt eine besondere Funktion, um Funktionen zu plotten, die noch keinen definierten Wertebereich haben.
Die Funktion muß in Apostrophs eingeschlossen sein. Bei einem etwas komplizierterem Beispiel und schalten wir noch das Gitter ein:grid on
fplot('sin(x)+exp(-x)',[0 12])
Für die Visualisierung von Matrizen als 3-dimensionale Daten definieren wir uns einen Wertebereich mit der meshgrid-Funktion:Jetzt kann x bzw. y in einer Formel wie eine normale Variable verwendet werden. Z.B. der Eierkarton
Alls Sammlung von 2-D Kurven
Oder als Kontur-Plot
Oder als Kombination von Kontur- und Flächenplot
surfc([-3:1/8:3],[-3:1/8:3],z)
Es gibt viele weitere Plotfunktionen und –Optionen, sehen Sie sich die entsprechenden Hilfen z.B. zu
Zurück zur Inhaltsübersicht
plot3, pcolor, mesh, image usw. an