Universität Bielefeld Angewandte Informatik M AT L AB in Action Marc Hanheide Angewandte Informatik Universität Bielefeld Februar 2003 M AT L AB starten Dokumentation & Hilfe The Art of Programming Effizienz O CTAVE Fazit
Universität Bielefeld
AngewandteInformatik
MATLAB in Action
Marc HanheideAngewandte Informatik
Universität Bielefeld
Februar 2003
MATLAB starten
Dokumentation & Hilfe
The Art of Programming
Effizienz
OCTAVE
Fazit
Universität Bielefeld
AngewandteInformatik Anwendungsbereiche
Auszug aus der Werbung• Technical Computing
• Data analysis and exploration
• Visualization and image processing
• Algorithm prototyping and development
• Modeling and simulation
• Programming and application development
"Für die Belange von Ingenieuren und Wissenschaftlern bietet MATLABden größten Funktionsumfang und ist das höchst entwickelte Programmseiner Klasse." IEEE Spectrum magazine
Marc Hanheide ↖ ⇐ ▲ ▼ ⇒ ↗ 1
Universität Bielefeld
AngewandteInformatik Was ist MATLAB?
• eigene Programmiersprache (Interpreter)
• Funktionsbibliothek (basierend auf LAPACK)
• Entwicklungsumgebung
• Compiler (MATLAB→ C/C++ )
• mächtiges Visualisierungstool (Plots & Bilder)
• GUI-Entwicklungsumgebung
Marc Hanheide ↖ ⇐ ▲ ▼ ⇒ ↗ 2
Universität Bielefeld
AngewandteInformatik MATLAB in der TechFak
• Installiert unter /vol/matlab (Workstations: OSF, IRIX, Solaris)
• für Workstations: rcinfo matlab verfügbar
• in .rcrc oder andere Shell-Konfigurationsdatei bei RCINFO_ILIST denEintrag matlab hinzufügen
• Aufruf durch matlab [-nojvm]
• 35 Lizenzen verfügbar
• Toolboxes “image processing” & “statistics”
Marc Hanheide ↖ ⇐ ▲ ▼ ⇒ ↗ 3
Universität Bielefeld
AngewandteInformatik MATLAB in der TechFak
• Installiert unter /vol/matlab (Workstations: OSF, IRIX, Solaris)
• für Workstations: rcinfo matlab verfügbar
• in .rcrc oder andere Shell-Konfigurationsdatei bei RCINFO_ILIST denEintrag matlab hinzufügen
• Aufruf durch matlab [-nojvm]
• 35 Lizenzen verfügbar
• Toolboxes “image processing” & “statistics”
• Toolbox “image processing” aber natürlich nicht verwenden. . .
Marc Hanheide ↖ ⇐ ▲ ▼ ⇒ ↗ 3
Universität Bielefeld
AngewandteInformatik MATLAB starten
Usage: matlab [-h|-help] [...] [-nosplash] [-mwvisual visualid] [-debug][-nodesktop | -nojvm] [-runtime] [-check_malloc][-r MATLAB_command] [-logfile log][-Ddebugger [options]]
-nosplash - Do not display the splash screen during startup.-debug - Provide debugging information especially for X
based problems.-nodesktop - Do not start the MATLAB desktop. Use the current
terminal for commands. The Java virtual machinewill be started.
-nojvm - Shut off all Java support by not starting theJava virtual machine. In particular the MATLABdesktop will not be started.
-runtime - Start MATLAB in Runtime Server mode. Required onlyif MATLAB is run from the Runtime Development Kit.
-check_malloc - Turn on MATLAB memory integrity checking.-r MATLAB_command - Start MATLAB and execute the MATLAB_command.-logfile log - Make a copy of any output to the command window
in file log. This includes all crash reports.
Marc Hanheide ↖ ⇐ ▲ ▼ ⇒ ↗ 4
Universität Bielefeld
AngewandteInformatik MATLAB-Major-Mode für emacs
MATLAB-IDE ist aus Performanzgründen oft ein schlechte Wahl, daher. . .• matlab-mode für emacs statt MATLAB-IDE• matlab-mode unterstützt nahezu alle Features der integrierten IDE• installiert unter /vol/matlab/share/lisp• Konfiguration in ~/.emacs
(siehe auch /vol/matlab/share/lisp/EMACS-MATLAB-HOWTO ):
(setq load-path (append (parse-colon-path "/vol/matlab/share/lisp") load-path))(autoload ’matlab-mode "matlab" "Enter Matlab mode." t)(setq auto-mode-alist (cons ’("\\.m\\’" . matlab-mode) auto-mode-alist))(autoload ’matlab-shell "matlab" "Interactive Matlab mode." t)(setq matlab-shell-command-switches "-nojvm -nosplash")(setq matlab-indent-function t) ; if you want function bodies indented(setq matlab-verify-on-save-flag nil) ; turn off auto-verify on save(defun my-matlab-mode-hook () (setq fill-column 76))(add-hook ’matlab-mode-hook ’my-matlab-mode-hook)(defun my-matlab-shell-mode-hook () ’())(add-hook ’matlab-shell-mode-hook ’my-matlab-shell-mode-hook)
• Bitte MATLAB nur durch matlab -nojvm oder durch den emacsstarten lassen
Marc Hanheide ↖ ⇐ ▲ ▼ ⇒ ↗ 5
Universität Bielefeld
AngewandteInformatik Hilfe & Unterstützung
• MATLAB-Dokumentation (Kommando helpdesk am MATLAB-Prompt)
• Handbücher
• lokale HOWTOs / FAQs (/vol/matlab/share/HOWTO )
• WWW: http://www.mathworks.com
• command help ... am MATLAB-Prompt
Marc Hanheide ↖ ⇐ ▲ ▼ ⇒ ↗ 6
Universität Bielefeld
AngewandteInformatik Hilfe & Unterstützung
• MATLAB-Dokumentation (Kommando helpdesk am MATLAB-Prompt)
• Handbücher
• lokale HOWTOs / FAQs (/vol/matlab/share/HOWTO )
• WWW: http://www.mathworks.com
• command help ... am MATLAB-Prompt
• Jemanden fragen, der sich mit sowas auskennt
Marc Hanheide ↖ ⇐ ▲ ▼ ⇒ ↗ 6
Universität Bielefeld
AngewandteInformatik The Art of programming MATLAB I
Mischung aus imperativ/funktional (und sogar objektorientiert)
Marc Hanheide ↖ ⇐ ▲ ▼ ⇒ ↗ 7
Universität Bielefeld
AngewandteInformatik The Art of programming MATLAB I
Mischung aus imperativ/funktional (und sogar objektorientiert)
In MatLab...
you have to know...
...what a MATRIX is
• Matrizen sind von herausragenderBedeutung (Alles ist eine Matrix)
Marc Hanheide ↖ ⇐ ▲ ▼ ⇒ ↗ 7
Universität Bielefeld
AngewandteInformatik The Art of programming MATLAB I
Mischung aus imperativ/funktional (und sogar objektorientiert)
In MatLab...
you have to know...
...what a MATRIX is
• Matrizen sind von herausragenderBedeutung (Alles ist eine Matrix)
• komfortable Zugriffsmöglichkeiten aufMatrixelemente mit (: ) und ([...] )-Operatoren
Marc Hanheide ↖ ⇐ ▲ ▼ ⇒ ↗ 7
Universität Bielefeld
AngewandteInformatik The Art of programming MATLAB I
Mischung aus imperativ/funktional (und sogar objektorientiert)
In MatLab...
you have to know...
...what a MATRIX is
• Matrizen sind von herausragenderBedeutung (Alles ist eine Matrix)
• komfortable Zugriffsmöglichkeiten aufMatrixelemente mit (: ) und ([...] )-Operatoren
• Das Semikolon (; ) ist kein Trennzeichenwie in C, sondern unterdrückt die Anzeigedes Operationsergebnisses
Marc Hanheide ↖ ⇐ ▲ ▼ ⇒ ↗ 7
Universität Bielefeld
AngewandteInformatik The Art of programming MATLAB II
Eigenschaften des Speichermanagements:• automatische Allokierung von Speicherbereichen• implizite Expandierung von Arrays• explizites Freigeben von Variablen mittels clear• implizites Typing• Variablen in Funktionen sind standardmäßig lokal→ persistent , global
• Speichern und Laden des Workspaces möglich
Marc Hanheide ↖ ⇐ ▲ ▼ ⇒ ↗ 8
Universität Bielefeld
AngewandteInformatik The Art of programming MATLAB II
Eigenschaften des Speichermanagements:• automatische Allokierung von Speicherbereichen• implizite Expandierung von Arrays• explizites Freigeben von Variablen mittels clear• implizites Typing• Variablen in Funktionen sind standardmäßig lokal→ persistent , global
• Speichern und Laden des Workspaces möglich
Einige wichtige Typen in MATLAB:• Arrays/Matrizen ([...] ): enthalten Variablen gleichen Typs• Sparse-Matrizen ([...] ): analog zur Mathematik, gespeichert werden
nur Elemente, die ungleich Null sind ⇒ speichereffizient• Struct (A.B ): analog zu C/C++• Cellarrays ({...} ): Mengen von Variablen verschiedenen Typs• Anzeigen des Workspaces mittels whos möglich
Marc Hanheide ↖ ⇐ ▲ ▼ ⇒ ↗ 8
Universität Bielefeld
AngewandteInformatik The Art of programming MATLAB III
%%%%%%%%%%% IF %%%%%%%%%%%if (strcmp(A,B));
fprintf(’sind gleich!’);else
fprintf(’sind NICHT gleich!’);end;
%%%%%%%%%%% FOR %%%%%%%%%%%j=1;for i=0:0.05:2*pi;
val(j)=sin(i);j=j+1;
end;
%%%%%%%%%%% WHILE %%%%%%%%%%%while (j>0);
fprintf(’Dies ist j: %3d’,j);j=j-1;
end;
Imperative Kontrollstrukturen
• angelehnt an bekannte imperativeProgrammiersprachen (C/C++ ,Java )
• for -Loop mit Bereichsangabe
• Boole’sche Konditionen ww = 0→falsew 6= 0→true
• Kommentare mit %
Marc Hanheide ↖ ⇐ ▲ ▼ ⇒ ↗ 9
Universität Bielefeld
AngewandteInformatik The Art of programming MATLAB IV
% Funktion mit 2 Eingabe-% und keinem Ausgabeargument
function F1(arg1, arg2);
% Funktion mit 1 Eingabe-% und 1 Ausgabeargument
function res=F2(arg1);res=2*arg1
Funktionsdefintion
• pro Datei (üblicherweise) nur eineFunktion
• Eine Funktion beginnt immer mitdem Schlüsselwort function
Marc Hanheide ↖ ⇐ ▲ ▼ ⇒ ↗ 10
Universität Bielefeld
AngewandteInformatik The Art of programming MATLAB IV
% Funktion mit 2 Eingabe-% und keinem Ausgabeargument
function F1(arg1, arg2);
% Funktion mit 1 Eingabe-% und 1 Ausgabeargument
function res=F2(arg1);res=2*arg1
% Funktion mit 2 Eingabe-% und 2 Ausgabeargumenten% Das 2. Eingabeargument ist opt.
function [res1,res2]=F3(a1, a2);% Hier steht die Doku% der Funktionif (nargin>2);
res1=a2;else
res1=0;res2=a1;
Funktionsdefintion
• pro Datei (üblicherweise) nur eineFunktion
• Eine Funktion beginnt immer mitdem Schlüsselwort function
• Die Anzahl der übergebenen bzw.erwarteten Argumente steht innargin bzw. nargout
• Der erste Kommentarblock einerDatei wird als Dokumentationverwendet (help ... )
Marc Hanheide ↖ ⇐ ▲ ▼ ⇒ ↗ 10
Universität Bielefeld
AngewandteInformatik Effizienz
% Eine (naive) Funktion zum Skalieren% eines Bildesfunction res = scale_naive(img, factor)
w = factor*size(img, 1);h = factor*size(img, 2);for row = 1:w
for col = 1:hr = ceil(row / factor);c = ceil(col / factor);res(row,col) = img(r,c);
endend
• Schleifen sind Gift fürdie Geschwindigkeit vonMATLAB
⇒ Schleifen vermeiden!
Marc Hanheide ↖ ⇐ ▲ ▼ ⇒ ↗ 11
Universität Bielefeld
AngewandteInformatik Effizienz
% Eine (naive) Funktion zum Skalieren% eines Bildesfunction res = scale_naive(img, factor)
w = factor*size(img, 1);h = factor*size(img, 2);for row = 1:w
for col = 1:hr = ceil(row / factor);c = ceil(col / factor);res(row,col) = img(r,c);
endend
% Eine (coole) Funktion zum Skalieren% eines Bildesfunction res = scale_cool(img, factor)
w = size(img, 1);h = size(img, 2);step = 1/double(factor);res = img(round(1:step:w),...
round(1:step:h));
• Schleifen sind Gift fürdie Geschwindigkeit vonMATLAB
⇒ Schleifen vermeiden!
• Schleifen sind sehr oft durchelegante Matrixoperationenzu umgehen
Marc Hanheide ↖ ⇐ ▲ ▼ ⇒ ↗ 11
Universität Bielefeld
AngewandteInformatik Effizienz
% Eine (naive) Funktion zum Skalieren% eines Bildesfunction res = scale_naive(img, factor)
w = factor*size(img, 1);h = factor*size(img, 2);for row = 1:w
for col = 1:hr = ceil(row / factor);c = ceil(col / factor);res(row,col) = img(r,c);
endend
% Eine (coole) Funktion zum Skalieren% eines Bildesfunction res = scale_cool(img, factor)
w = size(img, 1);h = size(img, 2);step = 1/double(factor);res = img(round(1:step:w),...
round(1:step:h));
• Schleifen sind Gift fürdie Geschwindigkeit vonMATLAB
⇒ Schleifen vermeiden!
• Schleifen sind sehr oft durchelegante Matrixoperationenzu umgehen
• Eine sehr mächtige Funktionist find : Ermittelt alleElemente, die bestimmterBedingung genügen
Marc Hanheide ↖ ⇐ ▲ ▼ ⇒ ↗ 11
Universität Bielefeld
AngewandteInformatik Matrix-Operationen
% eine 6x4-NullmatrixA=zeros(6,4);
% eine 4x4-Zufallsmatrix (Werte von 0-1)B=rand(4,4);
% Größe einer Matrix ermitteln[sz_r,sz_c]=size(C);
% (elementweise) Matrix-AdditionR=A(1:4,:)+B;
% mathematische Matrix-MultiplikationR=A*B;
% elementweise Matrix-MultiplikationR=A(1:4,:).*B;
% elementweises PotenzierenR=A.^2;
% elementweises RadizierenR=sqrt(A);
• Die Größe einer Matrix lässtsich mittel size ermitteln.
• Fast alle mathematischenFunktionen sind fürMatrizen definiert undwerden elementweiseangewendet.
Marc Hanheide ↖ ⇐ ▲ ▼ ⇒ ↗ 12
Universität Bielefeld
AngewandteInformatik Matrix-Operationen
% eine 6x4-NullmatrixA=zeros(6,4);
% eine 4x4-Zufallsmatrix (Werte von 0-1)B=rand(4,4);
% Größe einer Matrix ermitteln[sz_r,sz_c]=size(C);
% (elementweise) Matrix-AdditionR=A(1:4,:)+B;
% mathematische Matrix-MultiplikationR=A*B;
% elementweise Matrix-MultiplikationR=A(1:4,:).*B;
% elementweises PotenzierenR=A.^2;
% elementweises RadizierenR=sqrt(A);
% Ein JPG-Bild als 3-dim. Array einlesen:im_rgb=imread(’Aragorn.jpg’);
% 3-dim. RGB-Bild in 2-dim Matrix% (Grauwerte) wandeln und als double casten:
im_grey=double(rgb2gray(im_rgb));
• Die Größe einer Matrix lässtsich mittel size ermitteln.
• Fast alle mathematischenFunktionen sind fürMatrizen definiert undwerden elementweiseangewendet.
• Bilder sind auch Matrizen(bzw. Arrays)
• Bilder kann man sich mitimshow anschauen
Marc Hanheide ↖ ⇐ ▲ ▼ ⇒ ↗ 12
Universität Bielefeld
AngewandteInformatik Der MATLAB-Profiler
• Analyse der Laufzeiten von MATLAB-Funktionen
• Starten des profilings mit profile on
• Stoppen mit profile off
• profile report : HTML-Statusbericht mit Laufzeiten aller aufgerufenenFunktionen
• profile plot : grafische Übersicht der Laufzeiten
• für weitere Funktionen des Profilers siehe help profile
Marc Hanheide ↖ ⇐ ▲ ▼ ⇒ ↗ 13
Universität Bielefeld
AngewandteInformatik OCTAVE
OCTAVE ist eine Implementierung der MATLAB-Programmiersprache unter GPL(für “zu Hause”)
Marc Hanheide ↖ ⇐ ▲ ▼ ⇒ ↗ 14
Universität Bielefeld
AngewandteInformatik OCTAVE
OCTAVE ist eine Implementierung der MATLAB-Programmiersprache unter GPL(für “zu Hause”)
Merkmale von OCTAVE:• etwa 50% der Funktionen von MATLAB fehlen• keine Entwicklungsoberfläche / keine GUI-Entwicklung• Visualisierung durch GNUPLOT und XV (dadurch eingeschränkt)• bei vielen Distributionen mitgeliefert
Marc Hanheide ↖ ⇐ ▲ ▼ ⇒ ↗ 14
Universität Bielefeld
AngewandteInformatik Fazit
Wann will ich MATLAB benutzen?• Visualisierung/Präsentation komplexer Daten• Rapid-Prototyping• Lösung mathematischer Probleme• Bildverarbeitung
Marc Hanheide ↖ ⇐ ▲ ▼ ⇒ ↗ 15
Universität Bielefeld
AngewandteInformatik Fazit
Wann will ich MATLAB benutzen?• Visualisierung/Präsentation komplexer Daten• Rapid-Prototyping• Lösung mathematischer Probleme• Bildverarbeitung
Wann lasse ich es lieber sein?• Ich brauche höchste Geschwindigkeit• Ich bin auf tief verschachtelte Rekursionen angewiesen• Ich mag keine neue Programmiersprache lernen• Das zu lösende Problem lässt sich nicht gut auf MATLAB-Strukturen
abbilden
Marc Hanheide ↖ ⇐ ▲ ▼ ⇒ ↗ 15
Universität Bielefeld
AngewandteInformatik Fazit
Wann will ich MATLAB benutzen?• Visualisierung/Präsentation komplexer Daten• Rapid-Prototyping• Lösung mathematischer Probleme• Bildverarbeitung
Wann lasse ich es lieber sein?• Ich brauche höchste Geschwindigkeit• Ich bin auf tief verschachtelte Rekursionen angewiesen• Ich mag keine neue Programmiersprache lernen• Das zu lösende Problem lässt sich nicht gut auf MATLAB-Strukturen
abbilden
• Ich habe keine Ahnung, was eine Matrix ist!
Marc Hanheide ↖ ⇐ ▲ ▼ ⇒ ↗ 15