matlab – einführungkamelzer/tib2/glatz_matlab_einfuehrung.pdf · matlab verfügt über eine...

31
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.

Upload: vodan

Post on 06-Feb-2018

223 views

Category:

Documents


1 download

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');

Prof. Dr. Gerhard Glatz MATLAB

30

Prof. Dr. Gerhard Glatz MATLAB

31