Matlab Einführung Tobias Wunner 16. Oktober 2006 Matlab eine Einführung • Vorteile – Interpreter und interaktive Befehlseingabe • Schnelles Implementieren von wissenschaftlichen Methoden • Gutes Hilfesystem >> lookfor 'sum' TRACE Sum of diagonal elements. CUMSUM Cumulative sum of elements. SUM Sum of elements. ... Matlab eine Einführung • Vorteile – Interpreter und interaktive Befehlseingabe • Schnelles Arbeiten zum Entwickeln von Programmen • Gutes Hilfesystem >> help sum SUM Sum of elements. S = SUM(X) is the sum of the elements of the vector X. If X is a matrix, S is a row vector with the sum over each ... Matlab eine Einführung • Vorteile – Modulorientiert / Offen • Sämtliche Matlabskripte sind einsehbar >> edit sum Matlab eine Einführung • Vorteile – Erweiterbar • C oder FORTRAN Code durch mex Bibliotheken Matlab eine Einführung • Vorteile – Profiler ab Version 7! • Hilft beim Auffinden von Ressourcen-Verbrauchenden Programmteile Matlab eine Einführung • Vorteile – Umfangreiche Softwarepakete vorhanden • z.B.Toolboxes – Image Processing Toolbox – Neural Network Toolbox • www.mathworks.com/matlabcentral – Hier findet ihr alles was ihr nicht findet… :) Matlab eine Einführung • Nachteile – Nicht Objektorientiert (kein JAVA) – Effiziente Programme nur durch Vektorisierung >> x=1:5 X = 1 2 3 4 5 >> y=sqrt(1:5); statt for x=1:5 y = sqrt(x); end „Umdenken“ Matlab eine Einführung • Nachteile – Fast Alles ist erlaubt! • Keine Variablendeklaration nötig • Variablenneubelegungen >> (Typänderung) >> • Funktionen mit gleichen Ein- und Ausgabeparametern x=2 x=‘super‘ function x = myfun(x) ... x = x*2; Matlab eine Einführung • Nachteile – Fast Alles ist erlaubt! • Sogar Build-In Matlab Funktionen können als Variablen genutzt werden => ACHTUNG tötet eingebaute Funktionen!!! >> sum = 1:5; >> sum([0 0 1 1 0]) 3 4 % intuitiv erwartet 1+2+3+4+5=15 >> who % zeigt alle variablen im speicher an ans sum >> tmp = sum % sichern von variable sum >> clear sum % löschen von variablesum >> sum(tmp) % richtig! 15 Matlab eine Einführung • MATLAB starten – UNIX • z.B. Remote via Putty andromeda@ option matlab andromeda@ matlab –nojvm -nodisplay – Windows Matlab eine Einführung • Handwerkzeug zum starten – Arbeitsverzeichnis >> pwd >> ls >> cd projekt1 – Variablen im Speicher >> who – Variablen löschen/speichern >> clear y >> save dateiname >> load dateiname – History Cursor Matlab eine Einführung • Matrizen – Beliebige Matrizen >> [1 3 5 7;2 4 6 8] – Spezielle Matrizen >> eye(3) >> ones(2,4) >> zeros(1,3) – Zufallszahlen >> rand(3) >> rand(100,100) Matlab eine Einführung • Matrizen indizieren – Dimension >> x=rand(3,4) >> size(x,1) >> size(x,2) % M-by-N Matrix % M = Zeilen % N = Spalten – Alle Elemente als Liste >> x(:) – k-tes bis Letztes Element >> y(k:end) Matlab eine Einführung • Matrizen indizieren – Mit Logik >> x=2:7 2 3 4 5 6 7 >> x>4 0 0 0 1 1 1 – Indizes ausgeben >> find(x>3) 5 6 7 Matlab eine Einführung • Vergleichsoperatoren – kleiner/größer <,> – gleich/ungleich ==,~= – größergleich >= • Logische Operatoren – Und & – Oder | – Nicht ~ Matlab eine Einführung • Matrizen sortieren/umformen – sortieren >> x=6:-1:1 6 5 4 3 2 1 >> sort(x) 1 2 3 4 5 6 – umformen >> reshape(x,2,3) 1 3 5 2 4 6 Matlab eine Einführung • Matrix Algebra – Kronecker Produkt >> kron([1 1 1],[1 2 5]) 1 1 1 2 2 2 5 5 5 – Weiter nützliche Matrixoperationen >> help matfun Matlab eine Einführung • Komponentenweise Operationen – Inneres Produkt >> x=[1 -1]‘ >> x‘*x 2 – Äußeres Produkt >> x*x‘ 1 -1 -1 1 (x ist hier Spaltenvektor!) Matlab eine Einführung • Vektormanipulationen – Eintragsweise Operationen >> [1 2 3].*[1 10 100] 1 20 300 >> [10 20 30]./[5 20 60] 2.0000 1.0000 0.5000 >> [2 4 8].^2 4 16 64 Matlab eine Einführung • Programmierung – Schleifen for i=[1 4 2 1] sprinft(´Round%d\n´,i); end while BEDINGUNG ... end Matlab eine Einführung • Programmierung – Abbruch von Schleifen for i=1:10 ... if (error<.1) break; end end % bricht Schleife ab Matlab eine Einführung • Programmierung – Bedingungen if BEDINGUNG ... end if BEDINGUNG ... else ... end Matlab eine Einführung • Datentypen – Arrays matrix = [‘Peter‘,‘Hans‘] PeterHans matrix = [‘Peter‘;‘Hans‘] geht nicht! Lösung – Cells cell = {‘Peter‘,‘Hans‘} m = char(cell) Peter Hans >> m(2,:) Hans >> cell{2} Hans Matlab eine Einführung • Datentypen – Cells -> beliebiege Datentypen cell2 = {12,cell,m} cell2{3} Peter Hans – Ähnliche Idee bei Struct struct1.a = cell2; struct1.b = rand(10,10); struct1.a{2}{3}(2,:) % Zugriff auf Hans Matlab eine Einführung • Ein-/Ausgabe disp(‘Hello World‘); sprinft(‘Zahl=%d\n‘,x); % Einfache Ausgabe % Formatierte Ausgabe x = input(‘Zahl eingeben:‘,x);% Einfache Eingabe S = ‘1 2 3‘; x = sscanf(S,‘%f‘); % Formatierte Eingabe Matlab eine Einführung • Grafische Ausgabe von Daten – neues Ausgabefenster öffnen figure – Daten in einem 2D Bild ausgeben x=rand(10,10); x2=x*x‘; figure, imagesc(x2), colorbar sc = scaled image Skala Kovarianzmatrix Matlab eine Einführung • Grafische Ausgabe von Daten – Funktionen Plotten plot(XVALUES,YVALUES) xval = 0:.1:30 yval = sin(3.*cos(xval)) plot(xval,yval,‘r‘) – Mehrere Funktionen yval2 = sin(xval) plot(xval,yval,xval,yval2) oder plot(xval,yval,‘:b‘) hold on plot(xval,yval2,‘r‘) Matlab eine Einführung • Grafische Ausgabe von Daten – 3D Plot von Oberflächen (surfaces) x = imread(...); surf(x);shading flat; Matlab eine Einführung