GNU OCTAVE: Eine Einführung

Ähnliche Dokumente
S. Bouattour, D. Paulus 21. Mai 2003

Einführung in MATLAB

3 Kurzeinführung in Matlab

Informationsverarbeitung im Bauwesen

Matlab Übersicht. Matlab steht für MATrix LABoratory, die Fa. The Mathworks wurde 1984 gegründet

Übung 4: Einführung in die Programmierung mit MATLAB

Matlab Einführung Einführung in die Neuroinformatik SS 12. Miriam Schmidt Institut für Neuroinformatik

10:Exkurs MATLAB / Octave

Matlab Einführung Theorie Neuronaler Netze WS 11/12. Miriam Schmidt Institut für Neuroinformatik

Einführung in MATLAB zur Veranstaltung Einführung in die Numerik

Installation. Arbeiten mit der MATLAB-Entwicklungsumgebung. MATLAB als Taschenrechner mit Matrix- und Vektorrechnung.

Eine Einführung zum numerischen Programmieren mit Matlab

1 Konsole öffnen. 2 matlab & und return eingeben. 3 Konsole dauerhaft geöffnet lassen. 1 Menüpunkt File - Exit MATLAB oder. 2 quit (und return) oder

INTELLIGENTE DATENANALYSE IN MATLAB

Jens Kappei. Vorlesung Numerische Basisverfahren 21./

MATLAB Onlinevorlesung. Dipl.-Inf. (FH) Patrick Rogge Seite 1

Datei-Verarbeitung. Peter Sobe 60

Quadrieren Sie die Zahlen 3, pi, 1 und i mit Hilfe des Operators ^ und ziehen Sie aus den Ergebnissen jeweils die Wurzel.

Matlab - eine kurze Einführung

3 Schnellkurs in MATLAB

Termin 4: Programmieren in MATLAB

Tipps und Tricks für Matlab

Tutorial: GNU Octave und Gnuplot

Einführung in die Vektor- und Matrizenrechnung. Matrizen

MATLAB. Eingabe und Ausgabe

4.4. Rang und Inversion einer Matrix

Mathematik am Computer 7. Vorlesung: Matlab, Teil II

Matrizen, Determinanten, lineare Gleichungssysteme

FreeMat unter Windows & Linux

MATLAB. im Rahmen der Vorlesung Digitale Bildverarbeitung

Matlab-Seminar: Grundlagen

Übungen zur Vorlesung Wissenschaftliches Rechnen I. Grundelemente von Java. Eine Anweisung. wird mit dem Wertzuweisungsoperator = geschrieben.

10 Lesen und Schreiben von Dateien

Übung zur Vorlesung Multimedia im Netz

Einführung in MATLAB für Maschinenbauer im ersten Semester

Matlab Einführung. Tobias Wunner

Java 8. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Oktober 2014 JAV8

Eine kurze Einführung in MATLAB

Statistisches Programmieren

Die Programmiersprache C Eine Einführung

Einführung in die C-Programmierung

Eine kurze Einführung in scilab

Einstieg in die Informatik mit Java

Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015

Herzlich Willkommen zur Informatik I. Programme in MATLAB. Funktionen schreiben im Matlab. Agenda

PHP Code Konventionen Um einen einheitlichen Code zu generieren, der von jedem gelesen werden kann, müssen folgende Konventionen eingehalten werden.

Anwendungssoftware III (MATLAB)

1 Definition. 2 Besondere Typen. 2.1 Vektoren und transponieren A = 2.2 Quadratische Matrix. 2.3 Diagonalmatrix. 2.

Linux Prinzipien und Programmierung

4 Einführung in Maple

Linux Tutorium. 12. Shellprogrammierung. Version vom :38:56

MATLAB Grundlagen MATLAB. Grundlagen. Vorlesung Matlab/Simulink Dipl.-Ing. U. Wohlfarth

1 Lineare Algebra. 1.1 Matrizen und Vektoren. Slide 3. Matrizen. Eine Matrix ist ein rechteckiges Zahlenschema

Tag 9: Datenstrukturen

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein

Übung 4: Schreiben eines Shell-Skripts

GNU Octave GRUNDLAGEN MARCUS SCHÜTTLER. HTW BERLIN s

ohne Semikolon erhält man eine bestätigende Ausgabe von MATLAB

Grundlagen der Programmiersprache C++

Shell-Programmierung

Vektoren. 2.1 Darstellung. Kapitel Subtraktion und Addition

Visual Basic Basisbefehle Hinweis: Der Text in eckigen Klammern [ ] ist variabel, z.b. [var] => 5.3. Eckige Klammern sind stets wegzulassen!

Java Programmierung auf der Konsole / unter Eclipse

SAS-Online Dokumentation: zu finden über Internetsuche nach sas online documentation

Spezialfall: Die Gleichung ax = b mit einer Unbekannten x kann mit Hilfe des Kehrwerts 1 a = a 1 gelöst werden:

Dateiname Name(n) und Matrikelnr. des/der Bearbeiter Tel.-Nr. und -Adresse für den Fall, dass die Diskette nicht lesbar ist.

Lua Grundlagen Einführung in die Lua Programmiersprache

Erstellung eines SharkNet Installers für Windows mit Inno Setup Compiler 5.4.2

Was ist MATLAB? Typische Anwendungen

Gliederung. Links-Rechts-Zerlegung Elimination faktorisiert A = L R. Determinante Inverse. Kleinste Quadrate. Lösung durch. Links-Rechts- Zerlegung

Kapitel 2: Matrizen. 2.1 Matrizen 2.2 Determinanten 2.3 Inverse 2.4 Lineare Gleichungssysteme 2.5 Eigenwerte 2.6 Diagonalisierung

Autor: Michael Spahn Version: 1.0 1/10 Vertraulichkeit: öffentlich Status: Final Metaways Infosystems GmbH

Stata I: Analyseorganisation und erste Schritte

Übung: Entwickeln eines Shell-Skripts

Informatik. Studiengang Chemische Technologie. Michael Roth WS 2012/2013. Hochschule Darmstadt -Fachbereich Informatik-

Excel Funktionen durch eigene Funktionen erweitern.

Gnuplot. Justin Simon Bayer. 12. Januar 2006

Computergrundkenntnisse und Programmieren, WS 11/12, Übung 7: Grafik

4.Grundsätzliche Programmentwicklungsmethoden

Die Programmiersprache C

Numerisches Programmieren

Tutorium Mathematik II, M Lösungen

Octave für Windows. Leichte Variante (kein Cygwin installiert)

Steuerung von Programmabläufen. Vorlesung Computergestützte Mathematik zur Linearen Algebra. Lehrstuhl für Angewandte Mathematik Sommersemester 2009

Tutorium Rechnerorganisation

Steht in der ersten Zeile #!/usr/bin/python und hat man die Ausführungsrechte gesetzt kann man es direkt ausführen.

Unterprogramme, Pointer und die Übergabe von Arrays

Jürgen Roth Didaktik der Linearen Algebra & Analytischen Geometrie

Matlabskripte und Funktionen

Grundlagen. Die Komponenten eines C Programms. Das erste Programm

Korrelationsmatrix. Statistische Bindungen zwischen den N Zufallsgrößen werden durch die Korrelationsmatrix vollständig beschrieben:

Tutorium zur Makroökonomik

Informatik I. Informatik I. 6.1 Programme. 6.2 Programme schreiben. 6.3 Programme starten. 6.4 Programme entwickeln. 6.1 Programme.

MATLAB: Kapitel 2 Grafiken

Einführung in Python Teil I Grundlagen

Transkript:

GNU OCTAVE: Eine Einführung PD Dr. Markus Bause Universität Erlangen-Nürnberg Department Mathematik bause@am.uni-erlangen.de http://www.am.uni-erlangen.de/home/bause Wintersemester 2009/2010 Stand: 16. Oktober 2009 1 / 44

Installation Windows Gehen Sie zur WWW-Seite http://www.octave.org von GNU Octave und folgen Sie dem Link Download. Im Absatz Windows wählen Sie den Link Octave Forge und dann den Link Windows installer (Octave and Octave-Forge). Laden Sie setup-3.0.1-setup.exe oder das setup.exe einer aktuelleren stabilen Version herunter. Führen Sie setup-3.0.1-setup.exe aus. Wählen Sie als CPU-type im Zweifel den Eintrag Generic aus und führen Sie die Installation durch. Es empfiehlt sich eine Verknüpfung mit Octave auf dem Desktop zu erstellen. Starten Sie Octave über Start Alle Programme GNU Octave Octave oder über die Verknüpfung auf dem Desktop. Bemerkung: Die Standard-Installation von Octave erfordert Java, das Sie ggf. unter http://www.java.com/de/download erhalten. Markus Bause GNU Octave 2 / 44

Linux Viele Linux-Distributionen enthalten bereits Octave, so dass Sie das Octave-Paket von der Installions-DVD bzw. über einen Download direkt installieren können. Alternative: Gehen Sie zur WWW-Seite http://www.octave.org von GNU Octave und folgen Sie dem Link Download. Im Abschnitt Latest Release finden Sie die aktuelle Octave-Version. Speichern Sie octave-3.0.1.tar.gz bzw. eine aktuellere Version. Unzippen und entpacken Sie das File octave-3.0.1.tar.gz mit gunzip octave-3.0.1.tar.gz und tar -xvf octave-3.0.1.tar. Wechseln Sie in das Verzeichnis octave-3.0.1. Rufen Sie zunächst./configure auf (ggf. mit der Option --disable-readline). Compilieren Sie Octave durch den Aufruf von make. Sie können nun Octave mit dem Befehl octave starten. Es empfiehlt sich einen (Soft-)Link auf das Executable von Octave zu setzen. Markus Bause GNU Octave 3 / 44

Grundlagen Grundlagen Was ist Matlab/GNU Octave? Matlab MATLAB MATLAB R eine hochentwickelte Sprache für wissenschaftlichtechnische Berechnungen und eine interaktive Umgebung zur Algorithmen-Entwicklung, zur Visualisierung und Analyse von Daten sowie für numerische Berechnungen. MATRIX LABORATORY Produkt der Firma The MathWorks Inc. http://www.mathworks.com Octave ist auch eine interaktive Scriptsprache und weitgehend mit dem proprietären MATLAB kompatibel, im Gegensatz dazu jedoch freie Software. Unterschiede gibt es im Grafikbereich. http://www.octave.org Markus Bause GNU Octave 4 / 44

Grundlagen Matlab-Oberfläche Markus Bause GNU Octave 5 / 44

Grundlagen Octave-Shell (Kommandozeilen-Interface) Markus Bause GNU Octave 6 / 44

Grundlagen Im Folgenden werden die grundlegenden Strukturen und Befehle von GNU Octave beschrieben. Auf Besonderheiten und Unterschiede von Octave zu Matlab wird nicht eingegangen. Hierzu wird auf die Dokumentation von Octave/Matlab verwiesen. Hilfe und Dokumentation help listet alle Befehle und internen Variablen auf. help name gibt Hilfetext zur Variablen oder Funktion name aus. doc ruft das Menü der Octave Manual Pages auf. doc name gibt Dokumentation bzw. Menü der Octave Manual Pages zur Variablen oder Funktion name aus. Windows Standard-Installation: Pdf-Dokumentation (618 Seiten) im File C:\Programme\Octave\doc\PDF\octave.pdf. Beispiel: octave:1> help exit octave:1> doc graphics Markus Bause GNU Octave 7 / 44

Grundlagen Eingabekonventionen Alle Befehle können sowohl interaktiv, als auch über Script-Dateien eingegeben werden. Hierzu werden Octave Kommandos unter Verwendung eines Editors (z.b. edit oder emacs) in ein File (Script) geschrieben. Der Name dieses Files muss die Endung.m besitzen und vor dem Punkt einen Namen haben, der kein Octave-Kommando ist. Beispiel: prog1.m Ein Script wird durch Aufruf des Dateinamens ohne Suffix eingelesen und verhält sich so, als ob ihr Inhalt Zeile für Zeile eingegeben wird. Beispiel: octave:1> prog1 Die Variable path enthält die spezifizierten Suchpfade für Script-Dateien. Mit addpath( Pfadname ) kann ein neuer Suchpfad hinzugefügt werden. Mit savepath werden die Suchpfade für die nächste Sitzung gespeichert. Markus Bause GNU Octave 8 / 44

Grundlagen Beispiel (Linux): octave:1> addpath( /home/markus/octave/test ) octave:2> savepath Beispiel (Windows): Erzeuge das Verzeichnis C:\Dokumente und Einstellungen \Markus\Eigene Dateien\Octave\Mathe4IngIWS0809. Wechsele in das Verzeichnis (Tabulator-Taste verwenden!): octave-3.0.1-exe:1> cd C:\ octave-3.0.1-exe:2> cd Dokumente und Einstellungen\Markus\Eigene Dateien\Octave\Mathe4IngI WS0809 octave-3.0.1-exe:3> pwd ans = C:\Dokumente und Einstellungen\Markus\Eigene Dateien\Octave\Mathe4IngI WS0809 octave-3.0.1-exe:4> addpath(ans) octave-3.0.1-exe:5> savepath octave-3.0.1-exe:6> path Markus Bause GNU Octave 9 / 44

Grundlagen Das Semikolon ; trennt mehrere Befehle in einer Zeile und unterdrückt die Ausgabe von Werten. Das Komma, trennt Befehle in einer Zeile, gibt aber Werte aus. Drei Punkt... am Zeilenende bedeutet, dass der Ausdruck in der nächsten Zeile weitergeht. Kommentare werden mit % eingeleitet. Octave unterscheidet zwischen Groß- und Kleinschreibung. Octave wird mit quit oder exit beendet. Datei-Management Innerhalb von Octave können die Betriebssystembefehle ls, dir, pwd, cd, delete <Filename> verwandt werden. Markus Bause GNU Octave 10 / 44

Grundlagen Variablen und Standardoperationen varname = expression weist varname den Wert expression zu. Beispiel: octave:1> a=5; Es gibt die üblichen Funktionen +,,, /, ˆ, sin, cos, exp, acos, abs, usw. Die elementaren logischen Operationen sind: < kleiner <= kleiner oder gleich & und > größer >= größer oder gleich oder == gleich <> ungleich nicht Zur Diagnose von benutzerdefinierten Objekten gibt es: whos zeigt alle definierten Variablen und Funktionen (siehe unten). clear name löscht name aus dem Speicher. clear löscht alle Variablen und Funktionen aus dem Speicher. type name gibt die Variable/Funktion name am Bildschirm aus. Markus Bause GNU Octave 11 / 44

Grundlagen disp(varname) gibt den Wert von varname am Bildschirm aus. Beispiele 1 Das Script prog1.m mit Inhalt x=4; y=5; z=x+y liefert die Ausgabe octave:1> prog1 z = 9 Weiterhin liefert octave:2> whos *** local user variables: Prot Name Size Bytes Class ==== ==== ==== ===== ===== rwd x 1 1 8 double rwd y 1 1 8 double rwd z 1 1 8 double Markus Bause GNU Octave 12 / 44

Grundlagen 2 Andere Beispiele sind octave:1> x=1/8, str= Ein String x = 0.12500 str = Ein String octave:2> sqrt(-1)-i ans = 0 octave:3> x=sqrt(2); sin(x)/x ans = 0.69846 Hierbei ist i die imaginäre Einheit i = 1. Octave kann also mit komplexen Zahlen ( Abschnitt Grundlagen im Mathe-Skript) rechnen. Markus Bause GNU Octave 13 / 44

Vektor- und Matrizoperationen Vektor- und Matrizoperationen Matrizen und Vektoren ( Abschnitt Lineare Algebra im Mathe-Skript) sind die wichtigsten Grundbausteine zur Programmierung in Octave. Vektoren Zeilenvektor v = (1, 2, 3): v=[1,2,3] Spaltenvektor v = (1, 2, 3) : v=[1;2;3] Automatische Erzeugung von Vektoren mit konstantem Inkrement: Angang[:Inkrement]:Ende Beispiele octave:1> x=3:6 x = 3 4 5 6 octave:2> y=0:0.15:0.7 y = 0.00000 0.15000 0.30000 0.45000 0.60000 octave:3> z=pi:-pi/4:0 z = 3.14159 2.35619 1.57080 0.78540 0.00000 Markus Bause GNU Octave 14 / 44

Vektor- und Matrizoperationen Matrizen Eine Matrix A = octave:1> A=[1,2;3,4] A = 1 2 3 4 ( ) 1 2 wird erzeugt durch: 3 4 Matrizen können aus Teilmatrizen erzeugt werden: octave:2> b=[5;6]; octave:3> M=[A,b] M = 1 2 5 3 4 6 Zur Generierung wichtiger (m n)-matrizen existieren eigene Befehle. Falls m gleich n ist, muss nur ein Argument übergeben werden. Markus Bause GNU Octave 15 / 44

Vektor- und Matrizoperationen eye(m,n) erzeugt eine Matrix mit 1-ern auf der Hauptdiagonale. Im Spezialfall m = n ergibt sich die Einheitsmatrix. zeros(m,n) erzeugt eine Nullmatrix der Dimension (m n). rand(m,n) erzeugt eine Zufallsmatrix der Dimension (m n) mit gleichverteilten Einträgen. Für andere Verteilungen wird auf help randn verwiesen. Grundlegende Operationen +, - und bezeichnen Matrixaddition, -subtraktion und -multiplikation. A ist die zu A transponierte und konjugierte Matrix. A. ist die zu A transponierte Matrix. Markus Bause GNU Octave 16 / 44

Vektor- und Matrizoperationen Beispiele octave:1> A=[1,2;3,4]; B=2*ones(2,2); octave:2> A+B, A-B, A*B ans = 3 4 5 6 ans = -1 0 1 2 ans = 6 6 14 14 Markus Bause GNU Octave 17 / 44

Vektor- und Matrizoperationen Elementweise Operationen Während z.b. die standard Matrixmultiplikation bezeichnet, gibt es alle Operatoren mit vorangestelltem Punkt für elementweise Verknüpfung:.,./,.ˆ usw. Beispiele octave:1> A=[1,2;3,4]; A.ˆ2 % elementweise Potenz ans = 1 4 9 16 octave:2> Aˆ2 % matrixweise Potenz ans = 7 10 15 22 Markus Bause GNU Octave 18 / 44

Vektor- und Matrizoperationen Indizierung und Slicing v(k) ist das k-te Element des Zeilen- oder Spaltenvektors v. A(k,l) ist Matrixelement a kl. v(k:m) ist der Subvektor ( Slice ) des Vektors v vom k-ten bis zum m-ten Eintrag. A(k,:) ist die k-te Zeile der Matrix A. A(:,l) ist die l-te Spalte der Matrix A. Bestimmung der Größe: length(v) gibt die Länge des Vektors v zurück. [Zeilen,Spalten]=size(A) gibt die Anzahl der Zeilen und Spalten von A zurück. Markus Bause GNU Octave 19 / 44

Vektor- und Matrizoperationen Änderung der Gestalt: reshape(a,m,n) formt A in eine (m n)-matrix um. diag(a) liefert die Diagonale a jj der Matrix A. diag(v) erzeugt eine Matrix mit dem Vektor v auf der Hauptdiagonalen. diag(v,k) erzeugt eine Matrix mit dem Vektor v in der k-ten Nebendiagonalen. A(k,:) = zv weist der k-ten Zeile von A den Zeilenvektor zv zu. A(:,l) = sv weist der l-ten Spalte von A den Spaltenvektor sv zu. A(:,k) = [] löscht die k-te Spalte aus A. Markus Bause GNU Octave 20 / 44

Vektor- und Matrizoperationen Beispiele octave:1> A=[1,2,3;4,5,6]; v=[7;8]; octave:2> A(2,3)=v(2) A = 1 2 3 4 5 8 octave:3> A(:,2)=v A = 1 7 3 4 8 8 octave:4> A(1,1:2)=v A = 7 8 3 4 8 8 Markus Bause GNU Octave 21 / 44

Vektor- und Matrizoperationen Lösen linearer Gleichungssysteme A\b löst die Gleichung Ax = b. Falls A eine (n n)-matrix ist, wird Gauß-Elimination verwendet, sonst wird eine QR-Zerlegung durchgeführt und eine Lösung im Sinne der kleinsten Fehlerquadrate berechnet. Ist A schlecht konditioniert oder singulär, wird eine Warnung ausgegeben. Inverse, Zergungen, Eigenwerte, etc. B=inv(A) berechnet die Inverse von A. [L,U,P]=lu(A) berechnet die LU-Zerlegung PA = LU. [QR]=qr(A) berechnet die QR-Zerlegung A = QR. R=chol(A) berechnet die Cholesky-Zerlegung von A. S=svd(A) berechnet die Singulärwert-Zerlegung von A. H=hess(A) bringt A auf Hessenberg-Form. E=eig(A) berechnet alles Eigenwerte von A. Markus Bause GNU Octave 22 / 44

Vektor- und Matrizoperationen [V,D]=eig(A) berechnet eine Diagonalmatrix D, die die Eigenwerte von A enthält, und eine Matrix V mit den zugehörigen Eigenvektoren. Es gilt also AV = VD. norm(x,p) berechnet die p-norm des Vektors X. Falls X eine Matrix ist, kann p die Werte 1, 2 oder inf haben. Der Default-Wert ist 2. cond(a) berechnet die Konditionszahl von A in der 2-Norm. Viele dieser Befehle unterstützen weitere Optionen. Diese können mit help funcname erfahren werden. Test auf Nulleinträge [i,j,v]=find(a) findet die Indizes aller Elemente ungleich Null in A. Es gilt: A i(l),j(l) = v l 0. any(a) ist 1, falls A Elemente ungleich Null enthält. Bei Matrizen operiert any auf den Spalten. Markus Bause GNU Octave 23 / 44

Kontrollstrukturen Kontrollstrukturen Funktionen Funktionen (Octave: function) sind ebenfalls Textdateien mit Suffix.m. Im Unterschied zu einem Script können Funktionen mit Argumenten aufgerufen werden. Alle innerhalb der Funktion verwandten Variablen sind lokal (sie beeinflussen die vorher definierten Variablen nicht). Syntax function ausgabe = f(eingabe) <Anweisungen> end Hierbei sind ausgabe und eingabe Werte, Vektoren oder Matrizen und f ein eigener Funktionsname. Beispiel: [a,b]=myfunc(x,y) Markus Bause GNU Octave 24 / 44

Kontrollstrukturen Bemerkung Ocatve kann beliebig viele Funktionen in einer.m -Datei definieren. Matlab hingegen lässt strikt nur eine Funktion pro.m -Datei zu und der Funktionsname muss mit dem Dateinamen übereinstimmen. Dies kann aus Gründen der Übersichtlichkeit verwandter Funktionen sinnvoll sein. Beispiel function y = singrad(x) % Sinus mit Argument im Gradmass y = sin(pi*x/180); end Der Aufruf von singrad erfolgt durch octave:1> a=singrad(90) a = 1 Markus Bause GNU Octave 25 / 44

Kontrollstrukturen Alternativ kann der Aufruf von singrad auch aus einem Script testsingrad erfolgen. Die Datei testsingrad.m enthalte: % Script zum Test der Funktion singrad x=90; a=singrad(x) Der Aufruf erfolgt durch: octave:1> testsingrad a = 1 Globale Variablen global name deklariert name als globale Variable. Markus Bause GNU Octave 26 / 44

Kontrollstrukturen Beispiel function out=foo(in) global N % Verwende N als globale Variable <Anweisung> end Wird N in der Funktion verändert, ändert das auch den ursprünglichen Wert von N im workplace. Schleifen Syntax der for-schleife for k = AW:SW:EW <Anweisungen> end Hierbei ist k die Laufvariable, AW ihr Anfangswert, SW ihre Schrittweite und EW ihr Endwert. Markus Bause GNU Octave 27 / 44

Kontrollstrukturen Beispiel a=0; for k=0:2:10 a=a+2ˆk; end a Dieses Script berechnet 2 0 + 2 1 + 2 2 + 2 10. Syntax der Rückwärts-for-Schleife for k = 20:-1:10 <Anweisungen> end Markus Bause GNU Octave 28 / 44

Kontrollstrukturen Syntax der while-schleife while (<Bedingung>) <Anweisungen> end Beispiel t=0; T=10; h=1; while t<t t = t + h; end t Die Variable t besitzt am Ende den Wert 10. Markus Bause GNU Octave 29 / 44

Kontrollstrukturen Verzweigungen Syntax der if-anweisung if (< Bedingung >) <Anweisungen> else <Anweisungen> end Der else-anteil ist optional. Beispiel if (2+1<4) a=7 else a=6 end Markus Bause GNU Octave 30 / 44

Kontrollstrukturen Syntax der geschachtelten if-anweisungen if (<Bedingung>) if (<Bedingung>) if (<Bedingung>)... <Anweisungen>... end end end Markus Bause GNU Octave 31 / 44

Kontrollstrukturen Syntax der mehrseitigen if-anweisungen if (<Bedingung 1>) <Anweisungen 1> elseif (<Bedingung 2>) <Anweisungen 2>... else <Anweisungen n> end Der elseif- und der else-anteil ist optional. Markus Bause GNU Octave 32 / 44

Kontrollstrukturen Syntax der switch-anweisung switch <case-ausdruck> case <Fall 1> <Anweisungen 1> case <Fall 2> <Anweisungen 2>... otherwise <Anweisungen n> end Markus Bause GNU Octave 33 / 44

Kontrollstrukturen Beispiel switch monat case {4, 6, 9, 11} tage = 30; case {1, 3, 5, 7, 8, 10, 12} tage = 31; case 2 tage=28; otherwise tage=0; % Fehler end Markus Bause GNU Octave 34 / 44

Kontrollstrukturen Funktionen von Funktionen eval(string) wertet string als Octave-Code aus. Beispiel: eval( a = acos(-1); ); feval(funcname,arg1,...) ist äquivalent zum Aufruf von funcname mit den Argumenten arg1,... Beispiel Berechnung der Werte z 1 = f(x) + f(y) und z 2 = f(x) f(y) mit Übergabe der Funktion f(u) = u 3. Das Script-File prog2.m ist: x=2.0; y=1.0; % z1 = f(x)+f(y) und z2=f(x)-f(y) mit f(u)=uˆ3 [z1,z2] = myfunc(@mycube,x,y); % Ausgabe disp(sprintf( xˆ3+yˆ3: %17.8e,z1)); disp(sprintf( xˆ3-yˆ3: %17.8e,z2)); Markus Bause GNU Octave 35 / 44

Kontrollstrukturen Die Berechnung von z 1 und z 2 erfolgt in myfunc: function [z1,z2] = myfunc(f,x,y) z1=feval(f,x)+feval(f,y); z2=feval(f,x)-feval(f,y); % Es kann sogar auf feval verzichtet werden: % z1=f(x)+f(y); % z2=f(x)-f(y); end Die Funktion myfunc ist in myfunc.m gespeichert. Die Funktionsauswertung erfolgt in mycube: function y = mycube(u) y = u.ˆ3; end Die Funktion mycube ist in mycube.m gespeichert. Markus Bause GNU Octave 36 / 44

Kontrollstrukturen Einfache Funktionen Einfache Funktionen können auch mit Hilfe des Function-Handle @ direkt im Script-File spezifiziert werden ( doc handle). Beispiel: Das Script f=@(u,v) uˆ3*vˆ3; x=2; y=1; a=feval(f,x,y) b=f(x,y) liefert für a und b den Wert 8. Die Übergabe von f wird realisiert durch: f=@(u) uˆ3; x=2.0; y=1.0; [z1,z2] = myfunc(f,x,y); % Ausgabe disp(sprintf( xˆ3+yˆ3: %17.8e,z1)); disp(sprintf( xˆ3-yˆ3: %17.8e,z2)); Markus Bause GNU Octave 37 / 44

Kontrollstrukturen Bemerkung Schleifen und Funktionsaufrufe, insbesondere über feval, sind teuer. Daher sollten alle Operationen vektorisiert werden. Die Funktionen exp(), sin() etc. können auch auf Vektoren angewandt werden. Beispiel: Es ist effizienter x=1:1:10000; t=cputime; y=mycube(x); t1=cputime-t anstatt x=1:1:10000; t=cputime; for i=1:1:1000 y(i)=mycube(x(i)); end t1=cputime-t zu verwenden. Markus Bause GNU Octave 38 / 44

Kontrollstrukturen Ein- und Ausgabe save datei var1 [var2...] speichert die Variablen var1 usw. in der Datei datei ab. load datei liest die Datei datei. format [long short] vergrößert oder verkleinert die Anzahl der ausgegebenen Kommastellen. Der Aufruf ohne Argument stellt das Standardverhalten wieder her. fprintf(string[,var1,...]) und sprintf(string[,var1,...]) lehnt sich an die Syntax der Programmiersprache C an. Markus Bause GNU Octave 39 / 44

Grafik Grafik Im Folgenden werden nur einige wichtige Routinen kurz beschrieben. Für eine detaillierte Darstellung der umfrangreichen Möglichkeiten wird auf die Manual Pages von Octave verwiesen. 2D-Grafik plot(x,y[,fmt]) zeichnet eine Linie durch die Punkte (x i, y i ). Mit dem String fmt können Linienart und Farbe gewählt werden ( help plot). semilogx(x,y[,fmt]) funktioniert wie plot, die x-achse wird logarithmisch gezeichnet. semilogy(x,y[,fmt]) funktioniert wie plot, die y-achse wird logarithmisch gezeichnet. loglog(x,y[,fmt]) funktioniert wie plot, beide Achsen werden logarithmisch gezeichnet. Markus Bause GNU Octave 40 / 44

Grafik Beispiel x=-10:0.1:10; y=sin(x).*exp(-abs(x)); plot(x,y); grid; replot; 3D-Grafik [xx,yy]=meshgrid(x,y) erzeugt aus den Vektoren x und y Gitterdaten. mesh(x,y,z) zeichnet eine Fläche in 3D. Beispiel x=-2:0.1:2; [xx,yy]=meshgrid(x,x); z=sin(xx.ˆ2-yy.ˆ2); mesh(x,x,z); Markus Bause GNU Octave 41 / 44

Grafik Mit print können Grafiken in verschiedenen Formaten abgespeichert werden ( doc print). Befehle für 2D- und 3D-Grafiken title(string) schreibt string als Titelzeile in die Grafik. xlabel(string) beschriftet die x-achse mit string. ylabel(string) beschriftet die y-achse mit string. zlabel(string) beschriftet die z-achse mit string. axis(v) legt den Ausschnitt fest; v ist ein Vektor der Form v=(xmin,xmax,ymin,ymax[,zmin,zmax]). hold [on off] legt fest, ob die nächste Grafikausgabe die alte Grafik löschen soll. clg löscht das Grafikfenster. replot erzwingt eine erneute Ausgabe der aktuellen Grafik. Markus Bause GNU Octave 42 / 44

Matlab-Kurs UnivIS Matlab für Ingenieure [MLIng] VORL; 2 SWS; Mo/Di, 14:15 15:45 CIP Pool; Schäfer, F. Markus Bause GNU Octave 43 / 44

Viel Spass beim Arbeiten mit GNU Octave Markus Bause GNU Octave 44 / 44