MATLAB - page.mi.fu-berlin.depage.mi.fu-berlin.de/landgraf/SommerUni/doc/MatLab_1.pdf ·...
-
Upload
truongmien -
Category
Documents
-
view
221 -
download
0
Transcript of MATLAB - page.mi.fu-berlin.depage.mi.fu-berlin.de/landgraf/SommerUni/doc/MatLab_1.pdf ·...
Sommeruniversität 2005 Dr. Margarita Esponda 1
MATLABMathematik mit Rechnerunterstützung
Dr. Margarita Esponda-Argüero
Fachbereich Mathematik und Informatik
Freie Universität Berlin
Sommeruniversität 2005
Inhalt
Einfache Befehle und Ausdrücke
Arbeiten mit Feldern und Matrizen
Steueranweisungen
2-D und 3-D-Grafik
MATLAB - Programme und Funktionen
Sommeruniversität 2005 Dr. Margarita Esponda 2
MATLAB
MATLAB ist ein Softwarepaket besonderes gut für:
numerische Berechnungen
Visualisierung von Daten
Simulation dynamische Systeme
in den 70er Jahren an der University of New Mexico und
der Stanford University entwickelt
für umfangreiche Probleme kann MATLAB als
Programmiersprache eingesetzt werden.
MATLAB
MATLAB kann auf zwei Arten verwendet werden
– Interaktiv mit direkte Eingabe von Anweisungen und
sofortige Ausführung durch den Interpreter
– als Programmiersprache oder indirekte Eingabe. Die
Anweisungen werden zuerst in einer Datei (M-File)
gespeichert und können dann ausgeführt werden.
Sommeruniversität 2005 Dr. Margarita Esponda 3
BefehlsfensterBei der interaktiven Verwendung werden Befehle direkt in ein MATLAB-Befehlsfenster eingegeben und sofort ausgeführt.
>> 48/3
ans =16
>> ans*ans
ans =256
>> ans^2
ans =65536
>> a = 10
a =10
>> b = 20
b =20
>> a/b
ans =0.5000
>> c = 7;
>>
Das Semikolon
verhindert,
dass der Wert
von c wieder
ausgegeben
wird.
MATLABDer Grundbaustein ist der Datentyp Matrix
Matrix Laboratory
Variablen in Programmiersprachen sind Stellen im Speicher, in denen Werte abgelegt werden können.
Die einzelne Elemente der Matrix können
einfache Zahlen oder komplexe Elemente sein.
Vektoren Variablen sind Matrizen mit nur
einer Zeile (1xn-Matrizen).
Einfache Variablen sind 1x1-Matrizen.
In MATLAB werden alle Variablen als MxN-Matrizen gespeichert.
Wo M die Anzahl der Zeile und N die Anzahl der Spalten ist.
4x5
1x5
1x1
Sommeruniversität 2005 Dr. Margarita Esponda 4
Arbeitsumgebung
Befehlseingabe
Befehlsgeschichte
Arbeitsspeicher
Eingabe von Daten
>> a = 2
a =
2
>> x = [1; 2; 3]
x =
1
2
3
>> A = [1,2,3;4,5,6;7,8,9]
A =
1 2 3
4 5 6
7 8 9
Variablen
Vektoren
Matrizen
Sommeruniversität 2005 Dr. Margarita Esponda 5
Arithmetische Operationen
= Zuweisung
+ Addition
- Subtraktion
* Multiplikation (Matrizen)
/ Division (Matrizen)
^ Potenzierung (Matrizen)
Arithmetische Operationen
.* Multiplikation (elementweise)
./ Division (elementweise)
\ dividiert Matrizen nach links
.\ dividiert nach links (elementweise)
.^ Potenzierung (elementweise)
' adjungiert Matrix
.' transponiert Matrix
Sommeruniversität 2005 Dr. Margarita Esponda 6
Vektor- und Matrizen-Operationen
>> v = [1 2 3 4 5]
v =1 2 3 4 5
>> 2 * v
ans =2 4 6 8 10
>> v .* v
ans =1 4 9 16 25
>> A = [1 2; 3 4]
A =1 2 3 4
>> A + A
ans =2 4 6 8
>> 3 + A
ans =4 5 6 7
>> v * v.'ans =
55
Vektor- und Matrizen-Operationen
>> A = [1,2; 3,4]
A =1 2 3 4
>> A + A
ans =2 4 6 8
>> 2 * A
ans =2 4 6 8
>> B = [2,2; 3,3]
B =2 2 3 3
>> A * B
ans =8 8 18 18
>> A .* B
ans =2 4 9 12
Sommeruniversität 2005 Dr. Margarita Esponda 7
Eingabe von Matrizen und Vektoren
>> A = [1 2; 3 4]
A =1 2 3 4
>> v = [1:7]
v =1 2 3 4 5 6 7
Die einfachste Methode Matrizen oder Vektoren zu erzeugen ist, die direkte Eingabe innerhalb eckiger Klammern in dem Eingabefenster. Elemente werden durch Komma oder Leerzeichen getrennt, Spalten durch Semikolon oder durch Zeilenumbruch.
Ein einzelnes Element einer Matrix wird dann mit Zeile und Spaltennummer gekennzeichnet.
>> x = A (2, 2)
x =4
Der " : "-Operator kann als "von ...bis" übersetzt werden. Damit können Sie Vektoren oder Matrizen erzeugen:
>> m = [1:7;8:14]
v =1 2 3 4 5 6 78 9 10 11 12 13 14
Allgemeine Funktionen
whos listet alle Variablen, die im Speicher sind
clear löscht alle Variablen und Funktionen aus dem Speicher
cd wechselt die aktuelle Arbeitverzeichnis
dir listet alle Dateien des aktuellen Arbeitsverzeichnisses
help listet alle Hilfethemen
help Thema liefert Hilfe zu bestimmtem Thema
lookfor Wort sucht in der Dokumentation alle Stellen, in denen
Wort vorkommt
doc Thema liefert Hilfe zu bestimmtem Thema (neues Fenster)
clock gibt aktuelles Datum und Zeit in einem Vektor
zurück
Sommeruniversität 2005 Dr. Margarita Esponda 8
Elementare mathematische Funktionen
Trigonometrische Funktionen
sin(x) Sinus
cos(x) Kosinus
tan(x) Tangens
asin(x) Arcus-Sinus
acos(x) Arcus-Kosinus
atan(x) Arcus-Tangens
sqrt(x) Quadrat Wurzel von x
abs(x) Absoluter Wert von x
log(x) Natürlicher Logarithmus
log10(x) Logarithmus mit Basis 10
exp(x) Exponentialfunktion
Einfache Funktionen
mod(x,y) x Modulo y
rem(x,y) Rest der Division x/y
round(x) rundet
flour(x) rundet ab
ceil(x) rundet auf
fix(x) ganzzahliger Anteil
Funktionen
>> help roundROUND Round towards nearest integer.
ROUND(X) rounds the elements of X to the nearest integers.
See also FLOOR, CEIL, FIX.
>> round( 5.7)ans =
6
>> x = fix( 5.7)x =
5
Sommeruniversität 2005 Dr. Margarita Esponda 9
MATLAB-DataienM-Files
M-Files sind Dateien mit dem Suffix .mIn M-Files können Befehlssequenzen gespeichert und später ausgeführt werden.
File → New → M-File
a = 1;
b = 3;
c = 2;
x1 = (-b + sqrt( b^2 - 4*a*c ))/(2*a)
x2 = (-b - sqrt( b^2 - 4*a*c ))/(2*a)
Debug → Run
>> x1 =
-1
x2 =
-2
>>
File → Save As ... → q_gleichung.m
Eingabe und Ausgabe Funktionen
clc löscht das MATLAB-Kommando-Fenster
disp Ausgabe auf dem Bildschirm
sprintf wandelt Zahlen unter einer Formatangabe
in einen String um
input Eingabe von Zahlen mittels Tastatur
clc;
x = 5;
disp('hello');
disp(x);
y = input( 'y = ' );
a = sprintf('x=%i y=%i', x, y);
disp( a );
>> hello
5
y = 13
x = 5 y = 13
Sommeruniversität 2005 Dr. Margarita Esponda 10
MATLAB-DataienM-Files
File → New → M-File
a = input('a = ');
b = input('b = ');
c = input('c = ');
x1 = (-b + sqrt(b^2-4*a*c))/(2*a)
x2 = (-b - sqrt(b^2-4*a*c))/(2*a)
Debug → Run
x1 =-1.0000 + 1.0000i
x2 =-1.0000 - 1.0000i
>>
a = 122
b =c =
Programmieren in MATLAB
M-Dateien
Skripte
Funktionen
Der Gültigkeitsraum der im Skript
definierten Variablen ist die globale
Arbeitsumgebung oder (Basis-
Workspace)
M-Funktionen definieren eine
eigene Arbeitsumgebung und
besitzen keinen direkten Zugriff
auf den Basis-Workspace
Sommeruniversität 2005 Dr. Margarita Esponda 11
Kommentare
Kommentare in MATLAB beginnen mit % und gehen bis
zum Ende der Zeile .
Kommentare werden in der Hilfsfunktionen verwendet.
Bei help <Verzeichnis> wird die erste Kommentarzeile
angezeigt.
Bei help <Funktion> wird der erste Kommentarblock
angezeigt.
M-Files
x1 =-1.0000 + 1.0000i
a = 122
b =c =
Alle Variablen der Arbeitsumgebung werden gelöscht
Das Eingabefenster wird gelöscht
% Quadratische Gleichung
clear
clc
a = input('a = ');
b = input('b = ');
c = input('c = ');
d = sqrt(b^2-4*a*c);
x1 = ( -b + d )/(2*a)
x2 = (-b – d )/(2*a)
Kommentare in MATLAB fangen mit dem % - Zeichen an
x2 =-1.0000 - 1.0000i
>>
Sommeruniversität 2005 Dr. Margarita Esponda 12
if-else-Anweisung
if Bedingung
Anweisungen
else
Anweisungen
end
Vereinfachte Form
if Bedingung
Anweisungen
end
Beispiel a = input('a = ')
if mod(a,2)==0
disp('gerade Zahl')
else
disp('ungerade Zahl')
end
Vergleichsoperationen
< kleiner als
> größer als
<= kleiner oder gleich
>= größer oder gleich
== gleich
~= ungleich
Normalerweise ist das
Ergebnis eine
Vergleichsoperation
eines Wahrheitswertes.
In MATLAB ist der Wert
eines Vergleichs
entweder 0 (Falsch)
oder 1 (Wahr).
Sommeruniversität 2005 Dr. Margarita Esponda 13
Logische Operationen
~ Negation
& und
| oder
xor exklusiv oder
0 bedeutet falsch
alles andere bedeutet wahr
true = 1
false = 0
>> 2|5
ans = 1
>> -7&5
ans = 1
>> 0&5
ans = 0
>> 2<7 & 7<2
ans = 0
>> ~~7
ans = 1
>> mod(8,3)==1
ans = 0
>> -1|-6
ans = 1
>> true
ans = 1
>> false
ans = 0
>>
Logische Operationen mit Matrizen
Matrixelemente werden paarweise mit Null verglichen
& ergibt 1, wenn beide Elemente ≠0, sonst 0
| ergibt 0, wenn beide Elemente =0, sonst 1
~ 1, wenn das Element gleich 0, sonst 0
Funktionen all und any
all(x) ergibt 1, wenn alle Elemente von x ≠0, sonst 0
any(x) ergibt 0, wenn alle Elemente =0, sonst 1
Sommeruniversität 2005 Dr. Margarita Esponda 14
if-else-Anweisung% Quadratische Gleichung
disp( 'Programm zur Lösung einer quadratischen' )disp( 'Gleichung mit Koefizienten a, b, c ' )a = input( 'a = ' );
if ( a ~= 0 )b = input('b = ');c = input('c = ');d = sqrt( b^2 -4*a*c )x1 = (-b + d )/(2*a)x2 = (-b – d )/(2*a)
elsedisp( 'Wenn a==0, haben wir keine quadratische Gleichung!' )
end;
switch-case-Anweisung
switch Ausdruck
case Konstante_1
Anweisungen
case Konstante_2
Anweisungen
case Konstante_2
Anweisungen
otherwise
Anweisungen
end
Sommeruniversität 2005 Dr. Margarita Esponda 15
switch-Anweisung
zahl = input('bitte eine Zahl eingeben: ');
switch sign(zahl)
case -1
disp('Die Zahl ist negativ')
case 0
disp('Die Zahl ist gleich Null')
otherwise
disp('Die Zahl ist positiv')
end
switch-case-Anweisung
a = round(rand(1,1)*9);
switch a
case 0, b = 'null'
case 1, b = 'eins'
case 2, b = 'zwei'
case 3, b = 'drei'
case 4, b = 'vier'
case 5, b = 'fünf'
case 6, b = 'sechs'
case 7, b = 'sieben'
case 8, b = 'acht'
case 9, b = 'neun'
otherwise, b = 'viele'
end
Sommeruniversität 2005 Dr. Margarita Esponda 16
while-Anweisung
while Ausdruck
Anweisungen
end
Syntax
Beispiele
a = 0
while a<100
disp( a*a )
a = a + 1;
end
clc
a = 0
x = []
while a<100
a = a + 1;
x = [x a*a]
end
disp(x)
while-Anweisung
Beispiel% Glücksspieler
bargeld = input('Bargeld = ');
while bargeld>0
z = round( rand(1)*100000 );
if mod(z,2)==0
bargeld = bargeld + 1;
else
bargeld = bargeld - 1;
end
disp( bargeld )
end
disp('du bist pleite!')
Sommeruniversität 2005 Dr. Margarita Esponda 17
for-Anweisung
for Laufvariable = Bereichsangabe
Anweisungsblock
end
Syntax
for Laufvariable = Begin : Schritt : Ende
Anweisungsblock
end
for-AnweisungBeispiele
for i = 1:2:20disp(i)
end
>> 1 3 5 7 9 11 13 15 17 19
% Eingabe
n = input( 'n = ' );
fak = 1;
% Berechnung
for i = 1:n
fak = fak*i;
end
% Ausgabe
disp(sprintf('fakultaet(%i)=%i',n,fak))
n = 3fakultaet(3)= 6
Sommeruniversität 2005 Dr. Margarita Esponda 18
for-Anweisung
Beispiele
n = input( 'n = ' );
for i = 1:n
disp(i*i)
end
n = 5
1
4
9
16
25
n = input( 'n = ' );
x = [1:n].*[1:n];
disp( x )
n =
x =1 4 9 16 25
5
for-Anweisung
n = input('n = ')
zahlen = round( rand(1,n)*100 )
for i = 1:n-1
for j = 1:n-i
if zahlen(j)>zahlen(j+1)
temp = zahlen(j);
zahlen(j) = zahlen(j+1);
zahlen(j+1) = temp;
end
end
end
disp('zahlen =')
disp(zahlen)
Hier werden n
Zufallszahlen
generiert und in
die Variable
zahlen
gespeichert.
Sommeruniversität 2005 Dr. Margarita Esponda 19
Funktionen
Funktionen sind das wichtigste Konzept in der Welt der höheren Programmiersprache.
FunktionEingabe Ausgabe
Funktionen sind ein sehr wichtiges Hilfsmittel, um Probleme in kleinere Teilaufgaben zerlegen zu können.
Sie ermöglichen damit eine bessere Strukturierung eines Programms sowie die Wiederverwertbarkeit vom Programmcode.
MATLAB-Funktionen
function Rückgabevariable = Funktionsname ( Parameterliste )
% Programmbeschreibung für Online-Hilfe
Anweisungen
Rückgabevariable = berechneter_Wert
return
etwas genauer:
Die return Anweisung befindet sich an beliebiger Stelle und
beliebig oft in dem Funktionsrumpf; sie beendet die Ausführung der
Funktion mit der Rückgabe der Rückgabevariable.
Funktionsname.m
Sommeruniversität 2005 Dr. Margarita Esponda 20
FunktionenBeispiel
function sum = summe(n)
% summe(n) Berechnet die Summe aller Zahlen % von 1 bis n, wo n eine natürliche % Zahl sein muss.% summe(n) = 1+2+...+(n-1)+n
if n>=0sum = n*(n+1)/2
elsesum = 'Fehler! weil n negativ ist'
endreturn
Visualisierung von zweidimensionalen Daten und Funktionen
Visualisierung von Daten - Histogramme
- Boxplots
- Kreidiagramme
Beispiel
y = [2 3 5 7 11 13 17];
bar(y)
1 2 3 4 5 6 7
Sommeruniversität 2005 Dr. Margarita Esponda 21
Visualisierung von Daten
Beispiel
clear
n = input('n = ');
y = rand(1,n)*1000;
plot(y,'b*');
y = rand(1,n)*1000;
hold on
plot(y,'r*');
y = rand(1,n)*1000;
plot(y,'g*');
hold off
plot ( X-Daten, Y-Daten, Formatangabe )
Formatierungen für plot
b blau . Punkt - durchgezogen
g grün o Kreis : punktiert
r rot x Kreuz -. Strich-Punkte
c zyan + Plus -- Striche
m magenta * Sterne
y gelb s Quadrat
k schwarz d Diamant
w weiß v Dreieck (unten)
^ Dreieck (up)
< Dreieck (left)
> Dreieck (right)
p Pentagramm
h Hexagramm
Farbe Marker Linienart
Sommeruniversität 2005 Dr. Margarita Esponda 22
Visualisierung von FunktionenBeispiel
% Sinus-Funktion
x = -3*pi:0.01:3*pi;
y = sin(x);
hold on
for i = 1:50
y = y*i/(i+1);
plot(x,y,'k');
end
hold off
Visualisierung von Funktionen
% Exponential-Funktion
clf
x = -3:0.2:3;
subplot(2,1,1);
bar(x,exp(-x.^2));
subplot(2,1,2);
plot(x,exp(-x.^2),'r');
subplot(m,n,p)
Unterteilung des Ausgabefensters
Das aktuelle Ausgabefenster wird in eine mxn-Matrix von Fenstern unterteilt, das p-teTeilfenster wird als aktueller Ausgabebereich festgelegt.
Sommeruniversität 2005 Dr. Margarita Esponda 23
Visualisierung von 3D-FunktionenBeispiel
% Glockenfunktion
clf
x = -2.5:0.1:2.5;
y = x;
[X,Y] = meshgrid(x,y);
surf(x,y,exp(-(X.^2 + Y.^2)));