matlab – einführungkamelzer/tib2/glatz_matlab_einfuehrung.pdf · matlab verfügt über eine...
TRANSCRIPT
Prof. Dr. Gerhard Glatz MATLAB
1
MATLAB – Einführung und Anleitung
1 Grundbegriffe 1.1 MATLAB starten
Nach Doppelklick auf das MATLAB-Icon öffnen sich die drei Fenster: Command Window, Command History und Workspace.
In Command History wird mitprotokolliert, was in das Command Window eingegeben wird. In Workspace werden die bisher verwendeten Variablen samt Typ aufgelistet. Current Directory enthält eine Auflistung der Dateien im momentan verwen- deten Verzeichnis. Im Command Window können hinter dem MATLAB-Systempromt >> Befehle eingegeben werden.
Mit dem Befehl >>quit beendet man eine MATLAB-Sitzung.
1.2 Variable, Zahlen und Arithmetik
Beispiele: (Erste einfache Operationen)
1) >>2+5 ans = 7 >>ans/3 ans = 2.3333
2) >>x=sin(pi/4)
x = 0.7071
3) >>x=sin(pi/4); >>y=x*sqrt(2)
y = 1
● Variable
Beim Gebrauch von Variablen ist nicht wie in einer Programmiersprache eine vorherige Definition des Zahlenformats notwendig; MATLAB unterscheidet zwischen Groß- und Kleinschreibung. Variablennamen bestehen aus einem Buch- staben gefolgt von beliebig vielen alpha-numerischen Zeichen bzw. Unterstrichen. Dabei sind die ersten 31 Zeichen signifikant.
Prof. Dr. Gerhard Glatz MATLAB
2
Das Ergebnis wird automatisch in der Variablen mit dem Namen ans gespeichert und kann damit zurückgeholt werden.
Die Ausgabe kann durch ; unterdrückt werden.
Eigene Variablennamen können mit dem Zuweisungsoperator = vergeben werden.
Reicht für die Eingabe eine Zeile nicht aus, so kann in der folgenden Zeile weiter- geschrieben werden, wenn vor der Return-Taste drei Punkte geschrieben werden.
● Information über Variable
Einen Überblick über alle Variablen einer laufenden Sitzung erzeugt man mit
>>who
bzw.
>>whos (Detailiertere Information über die bereits belegten Variablen)
● Zahlen und Arithmetik
Zulässige Zahlendarstellungen (bei der Eingabe) sind:
3 , -15 , 0.0012 , 5.445672 , 1.2E-12 , 3.990127e8
Kleinste von Null unterscheidbare Zahl ist eps ( ). 16102.2 −⋅≈
Die Variable NaN (not a number) stellt das Symbol ∞ dar und wird z.B. beider Division durch Null erzeugt.
pi erzeugt die Konstante π .
Bei allen Rechenoperationen und eingebauten Funktionen sind komplexe Zahlen erlaubt. Komplexe Zahlen werden wie folgt eingegeben und dargestellt:
>>z=3+4*j; >>w=1.02-2.2*i; >>z1=3+sqrt(-1)*5;
Eine Eingabe im Exponentialformat ist ebenfalls möglich:
>>w1=2*exp(2*i);
Beispiele:
1) >>b=sqrt(2-5.5) b = 0 + 1.8708i
2) >>z=2-j; >>u=exp(z^2) u = -13.1288 + 15.2008i
Prof. Dr. Gerhard Glatz MATLAB
3
● Ausgabeformat
Standardeinstellung des Zahlenformats in MATLAB sind fünf signifikante Ziffern. Die Ausgabe kann durch den Befehl format beeinflusst werden:
format long , format short e , format long e , format rat
Beispiel:
>> format long >> pi
ans =
3.14159265358979
>> format long e >> exp(1)
ans = 2.718281828459046e+000
>> twert=cos(pi/3); >> format short e >> twert
twert = 5.0000e-001
>> format rat >> twert
twert = 1/2
Die Standardeinstellung wird durch >>format wieder hergestellt.
● Kommentare
Kommentare können durch das Vorstellen des % - Zeichens eingefügt werden:
Beispiel:
>> % Volumen eines Kreiszylinders >> d=2.1; % Durchmesser >> h=4.3; % Höhe >> V=(pi*h*d^2)/4
V = 14.8935
Prof. Dr. Gerhard Glatz MATLAB
4
1.3 Elementare Funktionen
MATLAB verfügt über eine große Anzahl von mathematischen Funktionen. Elementare Funktionen sind:
Trigonometrische Funktionen, Hyperbelfunktionen mit Umkehrfunktionnen:
sin(x) cos(x) tan(x)
asin(x) acos(x) atan(x)
sinh(x) cosh(x) tanh(x)
asinh(x) acosh(x) atanh(x)
Exponential- und Logarithmusfunktionen:
exp(x) log(x) log10(x)
Wurzel, Betrag, Signum
sqrt(x) abs(x) sign(x)
● Help-Funktionen
Der Befehl help allein listet alle Themengebiete auf, zu denen Informationen bezogen werden können. Weiter Befehle sind z.B.:
>>help elfun (Informationen über elementare Funktionen)
>>help specfun (Informationen über höhere Funktionen)
>>help elmat (Informationen über Matrizen-Funktionen)
>>help sin (Informationen über die Sinusfunktion)
2 Felder, Vektoren und Matrizen
2.1 Eingabe von Feldern, Vektoren und Matrizen
Felder mit Feldelementen gleicher Schrittweite lassen sich erzeugen, indem das erste Element gefolgt von der Schrittweite und schließlich dem letzten Element eingegeben wird:
>>odd = 1 : 2 : 15 % erzeugt die ungeraden Zahlen von 1 bis 15
Die Schrittweite 1 kann weggelassen werden:
>>feld = 1 : 10 % erzeugt die Zahlen von 1 bis 10
Prof. Dr. Gerhard Glatz MATLAB
5
Negative und gebrochene Schrittweiten sind zugelassen:
>>xi = 2 : -0.5 : -3
Die Doppelpunktnotation xstart : step : xend ist zwar bequem, jedoch wird der Bereich zwischen xstart und xend nicht zwin- gend symmetrisch aufgeteilt. Ist dies erwünscht, so schafft der Befehl
linspace(xstart, xend, nsteps)
Abhilfe.
>>linspace(0,2*pi,12) % erzeugt eine symmetrische Unterteilung des… Intervalls von 0 bis 2*pi mit 12 Werten
Vektoren und Matrizen werden innerhalb von eckigen Klammern eingegeben; dabei werden die Spalten durch Kommata oder Leerzeichen getrennt, die Zeilendurch Strichpunkt oder neue Zeile.
MATLAB unterscheidet nicht zwischen Vektoren und Matrizen. Genau genom- men interpretiert MATLAB jede Variable als Matrix. Aus diesem Grund ist es nicht erforderlich, Matrizen und Vektoren mit besonderen Variablennamen zu kennzeichnen.
Einzelne Matrizenelemente können mit ihren Indizes angesprochen werden.
Matrizen können durch Anfügen von Zeilen- und Spaltenvektoren vergrößert werden.
Beispiele:
>> A=[-1 2 -2 2 0 5 1 2 3]; % (3,3)-Matrix
>> B=[1,-2,0;4,6,-4]; % (2,3)-Matrix
>> vs=[3;1;-5]; % Spaltenvektor
>> vz=[1 -1 2]; % Zeilenvektor
>> A
A = -1 2 -2 2 0 5 1 2 3
>> B
B = 1 -2 0 4 6 -4
Prof. Dr. Gerhard Glatz MATLAB
6
>> vz
vz = 1 -1 2
>> vs
vs = 3 1 -5
>> A(2,3) % Anzeigen des Matrix-Elements in der 2. Zeile und 3. Spalte
ans = 5
>> B(1,3)=12 % Abändern des Elementes in der 1. Zeile und 3. Spalte
B = 1 -2 12 4 6 -4
>> C=[B;vz] % Hinzufügen einer 3. Zeile
C = 1 -2 12 4 6 -4 1 -1 2
>> C1=[A vs] % Hinzufügen einer 4. Spalte
C1 = -1 2 -2 3 2 0 5 1 1 2 3 -5
>> C2=C1(2:3,3:4) % erzeugt eine (2,2)-Matrix bestehend aus den… Elementen von C1 ab der 2. Zeile und der 3. Spalte
C2 = 5 1 3 -5
● Spezielle Matrizen
>>eye(3) % (3,3)-Einheitsmatrix
>>zeros(2,5) % (2,5)-Nullmatrix
>>ones(3,4) % (3,4)-Matrix mit lauter Einsen als Einträgen
Prof. Dr. Gerhard Glatz MATLAB
7
2.2 Matrizenoperationen
Addition BA + A+B Matrizendimensionen müssen übereinstimmen
Subtraktion BA − A-B Matrizendimensionen müssen übereinstimmen
Multiplikation BA⋅ A*B Spaltenzahl von A gleich Zeilenzahl von B
„Division“ 1−⋅ BA A/B Multiplikation von A mit 1−B von rechts ∗)
„Division“ AB ⋅−1 B\A Multiplikation von A mit 1−B von links ∗∗)
Transponieren A’ Vertauschen von Zeilen und Spalten
Potenzen nA A^n nur für quadratische Matrizen
∗) X = A/B ist Lösung von ABX =⋅ , 0)det( ≠B
∗∗) X = B\A ist Lösung von AXB =⋅ , 0)det( ≠B
2.3 Matrizenfunktionen
Determinante )det(A det(A) Determinante von A ; A quadratisch
Inverse 1−A inv(A) liefert für 0)det( ≠A die Inverse von A
Rang rank(A) ergibt der Rang von A
Die Funktion size(A) gibt Zeilen- und Spaltenzahl der Matrix zurück. Beispiel:
>> A=[-2 1 4;1 0 -1;1 2 3]; % (3,3)-Matrix
>> B=[3 -5 1;1 1 1]; % (2,3)-Matrix
>> b=[1;0;-2]; % Spaltenvektor >> >> r=rank(A); >> r
r = 2
>> re=rank([A b]) % Rang der erweiterten Koeffizientenmatrix
re = 3
Prof. Dr. Gerhard Glatz MATLAB
8
>> det(A)
ans = 0
>> x=A\b % Lösung des Gleichungssystems Ax=b (Alternativ: inv(A)*b) Warning: Matrix is singular to working precision. (Type "warning off MATLAB:singularMatrix" to suppress this warning.)
x = Inf Inf Inf
>> A*B
??? Error using ==> * Inner matrix dimensions must agree.
>> B*A
ans = -10 5 20 0 3 6
>> M=[-3 2 0;1 -1 4;2 0 -1]; >> W=inv(M)
W = 0.0667 0.1333 0.5333 0.6000 0.2000 0.8000 0.1333 0.2667 0.0667
>> format rat >> W
W = 1/15 2/15 8/15 3/5 1/5 4/5 2/15 4/15 1/15
>> E=M*M^(-1); % M^(-1) Alternative zu inv(M) >> format >> E
E = 1.0000 0 0 -0.0000 1.0000 -0.0000 0 0 1.0000
Prof. Dr. Gerhard Glatz MATLAB
9
● Weitere Rechenoperationen der Linearen Algebra
>>a=[1 2 3]; >>b=[2 -1 4]; >>c=[7 0 -2];
>>dot(a,b) % Skalarprodukt der beiden Vektoren a und b >>a*b’ % liefert dasselbe
>>cross(a,b) % Vektorprodukt (Kreuzprodukt) der beiden Vektoren a und b
>>dot(a,cross(b,c)) % Spatprodukt der Vektoren a , b und c
>>sqrt(a*a’) % liefert den Betrag des Vektors a
2.4 Punktoperator
Die Operationen A*B , A/B , A\B und A^n werden stets im Sinne der Matrizenrechnung ausgeführt. Soll die entsprechende Rechenoperation element- weise erfolgen, so muss vor der entsprechenden Rechenoperation ein Punkt ge- setzt werden. Bei Addition und Subtraktion ist dieser Fall nicht zu beachten, da diese Operationen immer elementweise erfolgen.
Beispiel:
>> A=[1 2;3 4]; >> B=2*ones(2,2); >> C=A*B; >> C1=A.*B; >> D=A^2; >> D1=A.^2; >> C C = 6 6 14 14 >> C1 C1 = 2 4 6 8 >> D D = 7 10 15 22 >> D1 D1 = 1 4
9 16
Prof. Dr. Gerhard Glatz MATLAB
10
Das Weglassen des Punktoperators, vor allem in Verbindung mit Feldern führt oft zu Fehlermeldungen. Im folgenden Beispiel 1 sollen für x = 0 , 0.1 , 0.2 ,… 0.9 , 1 die Werte von )1()(1 +⋅= xxxf berechnet werden. Im Beispiel 2 soll
für die Funktion 22 1)(
xxxf+
= eine Wertetabelle für x-Werte zwischen x = -1
und x = 1 und der Schrittweite 0.2 angelegt werden:
Beispiel 1:
>> x=0:0.1:1; >> y=x*(x+1)
??? Error using ==> * Inner matrix dimensions must agree.
x wird hierbei als Zeilenvektor aufgefasst; das Produkt zweier Zeilenvektoren ist nicht definiert! Abhilfe schafft die Befehlsfolge mit dem Punktoperator:
>> x=-1:0.1:1; >> y=x.*(x+1)
Beispiel 2:
>> x=linspace(-1,1,11); >> y=x/(1+x^2);
??? Error using ==> ^ Matrix must be square.
Gewünschtes Ergebnis liefert der Befehl mit Punktoperator:
>> x=linspace(-1,1,11); >> y=x./(1+x.^2); >> W=[x;y] % erzeugt Wertetabelle W = Columns 1 through 5
-1.0000 -0.8000 -0.6000 -0.4000 -0.2000 -0.5000 -0.4878 -0.4412 -0.3448 -0.1923
Columns 6 through 10
0 0.2000 0.4000 0.6000 0.8000 0 0.1923 0.3448 0.4412 0.4878 Column 11
1.0000 0.5000
Prof. Dr. Gerhard Glatz MATLAB
11
3 Graphikbefehle 3.1 Zweidimensionale Graphik
Die Funktion plot erzeugt Kurven aus Datenpunkten. Diese sind Werte der Ele- mente eines Feldes. Die Funktion fplot erzeugt Kurven aus Funktionswerten. Diese können Werte von installierten Funktionen (z.B. elementare Funktionen) oder Werte aus einem M-file (siehe 5) sein. fplot hat nicht die Flexibilität von plot. Als Skizzieren des Funktionsverlaufs kann fplot vorteilhaft genutzt werden. Der plot-Befehl kann durch zusätzliche Operationen parametrisiert werden (Punkt- stil, Linienstil, Farbe: siehe ausführliche Beschreibung im Skript MATLAB Tuto- rial). Weitere Formatierungsmöglichkeiten bieten die Befehle:
>>box off % Ausschalten der Umrandungsbox >>box on
>>grid on % Anzeigen der Gitterlinien >>grid off
>>axis off % Abschalten der Achsenbeschriftung >>axis on
● Skalierung der Achsen
Der Befehl axis spezifiziert den sichtbaren x- und y- Achsenausschnitt
>>axis([-10 10 -0.5 2.5]) >>axis equal % gleiche Maßstäbe auf der x- und y- Achse >>axis square % Achsen gleicher Länge
Beispiel 1:
>> fplot('atanh(x)',[-5 5]) >>grid on >>axis([-5 5 -10 10])
Prof. Dr. Gerhard Glatz MATLAB
12
Beispiel 2:
>> x=-2:0.5:2; >> y=1./(1+x.^2); % Punktoperator beachten ! >> plot(x,y,'or') % erzeugt für jedes Wertepaar einen roten Kreis
>> plot(x,y,'m:*') % erzeugt für jedes Wertepaar einen Stern verbunden… durch gepunktete Linien
● Beschriftung der plots
>>title(‘Schaubild’) % fügt dem plot die Überschrift „Schaubild“ hinzu
>>xlabel(`x-Richtung’) % Bezeichnung der x-Achse
>>ylabel(`y-Richtung’) % Bezeichnung der y-Achse
>>text(`Sinus-Kurve’) % setzt Text an einer festgelegten Position ein
>>gtext(`Nullstelle’) % mit der Maus lässt sich Text platzieren
● Anordnung von Schaubildern
Auch mehrere Schaubilder im selben Koordinatensystem sind möglich.
Beispiel 3:
>> fplot('[sin(x),cos(x)]',[-pi pi]) % liefert die Schaubilder von sin und cos… in einem Koordinatensystem
oder
>> [x y]=fplot('[sin(x),cos(x)]',[-pi pi]); >> plot(x,y)
Weitere Möglichkeit mit plot :
>> x=linspace(0,2*pi,200); >> plot(x,sin(x),'r',x,cos(x),'b')
Prof. Dr. Gerhard Glatz MATLAB
13
Eine alternative Möglichkeit bietet der hold – Befehl:
Beispiel 4:
>> x=linspace(0,2*pi,200); >> plot(x,sin(x),'r') >> hold on >> plot(x,2*cos(2.*(x-0.5)),'g') >> grid on >> hold off >> axis([0 2*pi -2 2]) >> xlabel('x') >> ylabel('y') >> title('Sinusfunktion u.mod. Cosinusfunktion') >> gtext('sin(x)') >> gtext('2cos{2(x-0.5)}')
3.2 Dreidimensionale Graphik
● Liniengraphik
Die Prozedur mesh liefert perspektivische Bilder räumlicher Flächen, die durch ),( yxfz = beschrieben werden. Die Fläche wird definiert durch die z-Koordina-
te über einem Gitter in der xy-Ebene.
Prof. Dr. Gerhard Glatz MATLAB
14
Die Erzeugung eines Gitters in der xy-Ebene liefert die Prozedur meshgrid :
>>[x,y]=meshgrid(-5:0.1:5,-2:0.1:6)
oder
>>[x,y]=meshgrid(linspace(-5,5,101),linspace(-2,6,81))
erzeugt ein Gitter für das Rechteck 62;55 ≤≤−≤≤− yx mit Gitterlinienab- stand 0.1 .
● Flächengraphik
Mit >>surf(x,y,z) erzeugt man statt einer Linien- eine Flächengraphik. Durch weitere Befehle lässt sich Farbdarstellung der Graphik, Schattierung und Beleuch- tung verändern,
Beispiel 5: Darstellung der Funktion 22
),( yxexyxfz −−⋅==
>> [x,y]=meshgrid(-2:0.1:2); >> z=x.*exp(-x.^2-y.^2); >> mesh(x,y,z) % erzeugt Liniengraphik
>> surf(x,y,z) % erzeugt Flächengraphik
● Konturlinien
Durch Schneiden der räumlichen Fläche mit Ebenen parallel zu xy-Ebene entstehen Höhenlinien (Konturlinien). Diese lassen sich mit der Prozedur contour darstellen:
>>contour3(x,y,z) % liefert eine Darstellung der Linien auf der Fläche
>>contour (x,y,z) % liefert ein Projektionsbild der Höhenlinien in der… xy-Ebene
>>contour (x,y,z,n) % steuert die Anzahl n der dargestellten Höhenlinien… (Standard : 9)
Prof. Dr. Gerhard Glatz MATLAB
15
Durch die Befehlsfolge
>>C=contour(x,y,z); >>clabel(C)
werden die Höhenlinien mit ihrer Höhenangabe beschriftet.
Eine Kombination aus Liniengraphik und Höhenlinien erzeugt
>>meshc(x,y,z)
Entsprechend erzeugt
>>surfc(x,y,z)
eine Flächengraphik mit Höhenlinien.
Beispiel 5:
>> [x,y]=meshgrid(-2:0.1:2); >> z=x.*exp(-x.^2-y.^2); >>contour(x,y,z,30)
>> meshc(x,y,z)
Prof. Dr. Gerhard Glatz MATLAB
16
3.3 Parametrisierung / Polarkoordinaten / Komplexe Zeigerdarstellung
Kurven in Parameterdarstellung lassen sich mit dem plot - Befehl in der xy- Ebene darstellen; die Darstellung von Raumkurven im 3R geschieht mit dem Befehl plot3 .
Beispiel 6:
>> t=linspace(0,2*pi,200); >> x=2*cos(t)-cos(2*t); >> y=2*sin(t)-sin(2*t); % Darstellung einer Epizykloide >> plot(x,y)
Beispiel 7:
>> t=[0:0.01:6*pi]; >> x=cos(t); >> y=sin(t); >> z=t; % Darstellung einer Schraublinie >> plot3(x,y,z) >> grid on
Polarkoordinatendarstellungen von Kurven )(ϕrr = erfolgt durch den Befehl polar :
Prof. Dr. Gerhard Glatz MATLAB
17
Beispiel 8:
>> phi=[0:0.01:6*pi]; >> polar(phi,2*phi) % Darstellung einer archimedischen Spirale
Komplexe Größen können als Zeiger in der Gauß´schen Zahlenebene durch den Befehl compass dargestellt werden:
Beispiel 9:
>> z1=3*exp(i*pi/4); >> z2=1-sqrt(3)*j; >> compass([z1 z2 z1+z2 z1*z2,])
>>
4 Diary – Eintragung in das Tagebuch Mit Hilfe der diary – Funktion ist es möglich MATLAB-Befehle und Berechnun-gen aufzuzeichnen. Die Befehle und die Berechnungen zwischen den Statements diary und diary off werden in einer Datei mit Namen diary gespeichert und im current directory abgelegt. Den einzelnen Tagebüchern kann man zur Unterschei-dung auch Namen geben:
Prof. Dr. Gerhard Glatz MATLAB
18
>> diary Zylinder >> r=2; % Radius des Zylinders >> h=4; % Höhe des Zylinders >> V=pi*r^2*h >> diary off
5 M-files / Skripte und Funktionen Files, die Codes in der MATLAB – Sprache enthalten, werden M-files genant. M-files werden unter Verwendung eines Text-Editors erstellt:
Mit der Maus: File > New > M-file
Die files müssen im aktuellen Directory mit der Endung .m hinter dem Namen des files abgespeichert werden:
Mit der Maus: File > save as > beisp1.m
M-files werden mit ihrem Namen aufgerufen; M-files können aber auch andere M-files aufrufen. Die in einem M-file benutzten Variablen bleiben nach Abarbei- ten des files im Arbeitsspeicher. Sollen Variablen aus einem M-file in einem zweiten, von diesem aufgerufenen M-file benutzt werden, so ist die entsprechen- de Variable in beiden M-files mit dem Befehl
global 43421
amenVariablenn
vvv ...321
als global zu erklären.
Man unterscheidet zwei Arten von M-files:
1. skripts : Codestücke, die weder input- noch output-Argumente akzeptieren
2. functions : übliche Funktion, die input- und output- Variable besitzt.
5.1 Skripte
Beispiel:
% Skript_file für eine Matrix % Name des files: script1
A=[1 -3 2;4 0 -3;-1 5 1];
b=input('Eingabe eines Spaltenvektors:');
x=A\b
>> script1 % Aufrufen des scripts Eingabe eines Spaltenvektors:[2;-1;3]
Prof. Dr. Gerhard Glatz MATLAB
19
x = 0.7586 0.4828 1.3448
>> edit script1 % Starten des Editors >> c=A*x % Probe
c = 2.0000 -1.0000 3.0000
>> B=A*A
B = -13 7 13 7 -27 5
18 8 -16
5.2 Functions
Aufbau einer function:
function y=fun1(x) Input-Argument
Funktionsname Export-Argument Schlüsselwort
Beispiel 1:
function xe=quagl(); % function ohne Import % Lösung der quadratischen Gleichung x^2+a*x+b=0
global a b % a,b sind globale Variable
xe(1)=-a/2+sqrt(a*a/4-b); xe(2)=-a/2-sqrt(a*a/4-b)
>> global a b >> a=2; >> b=6; >> w=quagl
xe = -1.0000 + 2.2361i -1.0000 - 2.2361i w = -1.0000 + 2.2361i -1.0000 - 2.2361i
Prof. Dr. Gerhard Glatz MATLAB
20
Beispiel 2: function x=quad_gl(a,b); % function mit input % Lösung der Gleichung x^2+a*x+b=0 x(1)=-a/2+sqrt(a*a/4-b); x(2)=-a/2-sqrt(a*a/4-b);
>> a1=1; >> a2=2; >> y=quad_gl(a1,a2)
y = -0.5000 + 1.3229i -0.5000 - 1.3229i
Beispiel 3:
function x=quadsolve(p,q); % Lösung von x^2+p*x+q=0 % verwendet wird function quad_gl
x=quad_gl(p,q);
Beispiel 4:
function w=wurzcompl(z,n); % n-te Wurzel aus komplexer Zahl
k=0:(n-1); r1=abs(z); phi=angle(z); r=r1^(1/n); w=r*exp(j*(phi/n+2*pi/n*k)); compass(w)
>> a1=1; >> a2=2; >> y=quadsolve(a1,a2)
y = -0.5000 + 1.3229i -0.5000 - 1.3229i
>> wu=wurzcompl(y(1),3)
wu = 0.8976 + 0.6740i -1.0325 + 0.4404i 0.1349 - 1.1143i
Prof. Dr. Gerhard Glatz MATLAB
21
6 Polynome
Polynome werden in MATLAB als Vektoren dargestellt, wobei die Komponenten des Vektors die Koeffizienten des Polynoms in fallender Reihenfolge sind. (Ein Polynom vom Grad n entspricht damit einem Vektor der Dimension n+1).
entspricht >>p=[2 5 -1 7] 752)( 233 +−+= xxxxp
Funktionswerte eines Polynoms liefert polyval :
entspricht >>polyval(p,-1) . )1(3 −p
Die Nullstellen eines Polynoms erhält man durch roots(p) .
Umgekehrt lässt sich ein Polynom auch über seine Nullstellen erzeugen:
))()(3)(2)(1()(5 jxjxxxxxq +−−+−= erhält man mit
>>poly([-2 1 3 i –i]);
Beispiel 1 :
>> p=[2 5 -1 7]; >> polyval(p,-1)
Prof. Dr. Gerhard Glatz MATLAB
22
ans = 11
>> x0=roots(p)
x0 = -3.0425 0.2712 + 1.0377i 0.2712 - 1.0377i
Beispiel 2 :
>> x0=[-2 1 3]; >> y0=[0 0 0]; % reelle Nullstellen
>> q=poly([-2 1 3 j -j]);
>> x=[-2.2:0.02:3.2]; >> y=polyval(q,x); >> plot(x0,y0,'oy',x,y) ;
● Polynominterpolation
Um durch n+1 Punkte niyx ii ,...,1,0;)/( = ein Polynom vom Grad n zu legen, verwendet man die Anweisung polyfit .
Aufbau: polyfit( n ) ,,4434421
nkoordinatePunkt
yixi−
Polynomgrad
● Ausgleichspolynome
Will man durch n Messpunkte niyx ii ,...,1;)/( = nach der Methode der kleinsten Fehlerquadrate eine Ausgleichskurve im Sinne eines Polynoms von vorgegebenem Grad m legen, kann man dies wieder mit dem Befehl polyfit erreichen.
Prof. Dr. Gerhard Glatz MATLAB
23
Beispiel :
>> xi=linspace(-4,4,9); >> yi=1./(1+xi.^2); >> p=polyfit(xi,yi,8); % Interpolationspolynom vom Grad 8
>> x=[-4:0.02:4]; >> y0=1./(1+x.^2); >> y1=polyval(p,x); >> q=polyfit(xi,yi,4); % Ausgleichspolynom vom Grad 4 >> y2=polyval(q,x); >> plot(xi,yi,'or',x,y0,':r',x,y1,'b',x,y2,'g');
>> title('Interpolation u. Approximation'); >> gtext('y=1/(1+x^2)') >> gtext('Interpol.Pol.Grad 8') >> gtext('Ausgleichspol. Grad 4')
Prof. Dr. Gerhard Glatz MATLAB
24
7 Programmsteuerungsbefehle 7.1. for-Schleifen >> %for-Schleife >> >> for n=1:5, for m=1:4, A(n,m)=1/(n+m); end; end; >> >> A A = 0.5000 0.3333 0.2500 0.2000 0.3333 0.2500 0.2000 0.1667 0.2500 0.2000 0.1667 0.1429 0.2000 0.1667 0.1429 0.1250 0.1667 0.1429 0.1250 0.1111 7.2. while-Schleifen >> % while-Schleife >> >> e=1;x=1; >> while (e>2*eps), x1=0.5*(x+2/x); e=abs(x1-x); x=x1; end; >> >> x x = 1.4142
Prof. Dr. Gerhard Glatz MATLAB
25
7.3. else/if-Anweisung >> d1=3; >> d2=2; >> >> % else/if-Anweisung >> if d1==d2, s='identisch'; elseif d1-d2>0, s='links'; else s='rechts'; end; >> >> s s = links
Prof. Dr. Gerhard Glatz MATLAB
26
8 Gewöhnliche Differentialgleichungen Die Behandlung von gewöhnlichen Differentialgleichungen wird am Beispiel des mathematischen Pendels beschrieben: Dgl. des mathematischen Pendels (ohne Dämpfung)
0))(sin()( =+ txlgtx&& l … Pendellänge, 2sec
81.9 mg =
8.1 Symbolische Lösung
Betrachtet wird das linearisierte Modell:
, 0)()( 2 =⋅+ txtx ω&&lg
=ω
a. Allgemeine Lösung mit dsolve-Befehl:
>> x=dsolve('D2x+w^2*x=0')
x =
C1*sin(w*t)+C2*cos(w*t)
b. Anfangswertproblem
; 0)()( 2 =⋅+ txtx ω&& 0)0(,)0( == xAx &
>> x=dsolve('D2x+w^2*x=0','x(0)=A','Dx(0)=0')
x =
A*cos(w*t)
Zur graphischen Darstellung der Auslenkung )(tx und der Geschwindigkeit )(tx& in Abhängigkeit von der Zeit verwendet man ezplot. Dazu müssen den Parametern A = 3 und w = 0.7 numerische Werte zugewiesen werden. Das Zeitintervall ]12,0[ π wird als zweites Argument spezifiziert.
>> x=dsolve('D2x+w^2*x=0','x(0)=A','Dx(0)=0');
>> dx=diff(x,'t',1);
>> subplot(2,1,1)
>> ezplot(subs(x,{'A','w'},{3,0.7}),[0 12*pi]);
>> subplot(2,1,2)
>> ezplot(subs(dx,{'A','w'},{3,0.7}),[0 12*pi]);
Prof. Dr. Gerhard Glatz MATLAB
27
8.2 Numerische Lösungsverfahren
Die nichtlinearisierte Schwingungsdifferentialgleichung
0))(sin()( 2 =⋅+ txtx ω&&
lässt sich mit symbolischen Hilfsmitteln in MATLAB nicht lösen!
Eine Differentialgleichung n-ter Ordnung muss auf die „Normalform“ (n Differen- tialgleichungen 1.Ordnung) übergeführt werden. Am Beispiel Pendel:
⎭⎬⎫
⎩⎨⎧
−==
⇔⎭⎬⎫
⎩⎨⎧
==
))(sin()()()(
)()()()(
12
2
21
2
1
tytytyty
txtytxty
ω&
&
&
Anfangswerte entsprechend:
⎭⎬⎫
⎩⎨⎧
==
⇔⎭⎬⎫
⎩⎨⎧
==
0)0()0(
0)0()0(
2
1
yAy
xAx
&
function-file für das System:
function yp=pendel(t,y) w=0.7;
Prof. Dr. Gerhard Glatz MATLAB
28
yp=[y(2);-w^2*sin(y(1))];
MATLAB verwendet als numerisches Lösungsverfahren ein Runge-Kutta-Ver- fahren der Ordnung 4 (5). Aufgerufen wird dieses Verfahren mit dem Befehl ode45.
>>tspan=[0 12*pi]; % Integrationsintervall >>y0=[3;0]; % Anfangswerte >>[t,y]=ode45('pendel',tspan,y0); % Funktionsdatei der Differentialgleichung >>subplot(3,1,1) >>plot(t,y(:,1)) % zeitlicher Verlauf der Lösung y1 >>xlabel('t'); ylabel('y1') >>subplot(3,1,2) >>plot(t,y(:,2)) % Zeitlicher Verlauf der Lösung y2 >>xlabel('t'); ylabel('y2') >>subplot(3,1,3) >>plot(y(:,1),y(:,2)) % Darstellung in der Phasenebene >>xlabel('x'); ylabel('Dx')
Prof. Dr. Gerhard Glatz MATLAB
29
Übung: Van der Pool – Gleichung
Rxxxx ∈=+⋅−⋅+ αα ,0)1( 2 &&&
Mit überführen auf „Normalform“: xxxx &== 21 ,
21 xx =&
12122 )1( xxxx −⋅−⋅= α&
Function-file:
function xdot=vdpool(t,x);
global a;
xdot=[x(2);x(2).*(1-x(1).^2)*a-x(1)];
clear all; close all;
tspan=[0 50]; % Integrationsintervall
x0=[0;0.25]; % Anfangsbedingungen
global a;
a=0.1;
[t,x]=ode45('vdpool',tspan,x0);
subplot(2,1,1);
plot(t,x);
title('Van der Pool-Dgl. für \alpha=0.1');
xlabel('t');ylabel('x1 und x2');
subplot(2,1,2);
plot(x(:,1),x(:,2));
xlabel('x1');ylabel('x2');