25
Einführung in MATLAB Blockkurs DLR: 19.4-22.4.2004 Tag 2, 2.Teil Programmieren mit MATLAB II 20.4.2004 Dr. Gerd Rapin [email protected] Gerd Rapin Einf¨ uhrung in MATLAB – p.1/25

EinführunginMATLAB BlockkursDLR:19.4-22.4num.math.uni-goettingen.de/grapin/teaching/Vorlesung_MATLAB_20_0… · Programmieren-TeilII Gültigkeitsbereich von Vraiablen Schleifen Bedingungen

Embed Size (px)

Citation preview

Page 1: EinführunginMATLAB BlockkursDLR:19.4-22.4num.math.uni-goettingen.de/grapin/teaching/Vorlesung_MATLAB_20_0… · Programmieren-TeilII Gültigkeitsbereich von Vraiablen Schleifen Bedingungen

Einführung in MATLABBlockkurs DLR: 19.4-22.4.2004

Tag 2, 2.TeilProgrammieren mit MATLAB II

20.4.2004Dr. Gerd Rapin

[email protected]

Gerd Rapin Einfuhrung in MATLAB – p.1/25

Page 2: EinführunginMATLAB BlockkursDLR:19.4-22.4num.math.uni-goettingen.de/grapin/teaching/Vorlesung_MATLAB_20_0… · Programmieren-TeilII Gültigkeitsbereich von Vraiablen Schleifen Bedingungen

Programmieren - Teil IIGültigkeitsbereich von Vraiablen

Schleifen

Bedingungen

Aufgaben

Gerd Rapin Einfuhrung in MATLAB – p.2/25

Page 3: EinführunginMATLAB BlockkursDLR:19.4-22.4num.math.uni-goettingen.de/grapin/teaching/Vorlesung_MATLAB_20_0… · Programmieren-TeilII Gültigkeitsbereich von Vraiablen Schleifen Bedingungen

Gültigkeitsbereich vonVariablen

Variablen in Skript-Files benutzen den globalenWorkspace, d.h. bereits vorhandene Variablenkönnen direkt benutzt oder überschriebenwerden. Sie sind gültig bis sie explizit gelöschtwerden.

Variablen in Function-Files sind nur innerhalbder Funktion definiert und werden bei Verlassender Funktion gelöscht. Variablen des globalenWorkspace können nicht benutzt werden.

Gerd Rapin Einfuhrung in MATLAB – p.3/25

Page 4: EinführunginMATLAB BlockkursDLR:19.4-22.4num.math.uni-goettingen.de/grapin/teaching/Vorlesung_MATLAB_20_0… · Programmieren-TeilII Gültigkeitsbereich von Vraiablen Schleifen Bedingungen

WarnungWiederholte Anwendung von Script-Files kann zu

Fehlern führen

Programm% plotte_sin.m

disp([’Plot der Sinus’...

’Funktion auf [0,10]’]);

n = input([’Plot an ’...

’wievielen Punkten?’]);

x = linspace(0,10,n);

for i=1:n

y(i) = sin(x(i));

end;

plot(x,y);

Aufruf>> plotte_sin

Plot der Sinus Funktion auf [0,10]

Plot an wievielen Punkten?20

>> plotte_sin

Plot der Sinus Funktion auf [0,10]

Plot an wievielen Punkten?10

??? Error using ==> plot

Vectors must be the same lengths.

Error in ==> /slides/m-files/

stunde_13/plotte_sin.m

On line 9 ==> plot(x,y);

Gerd Rapin Einfuhrung in MATLAB – p.4/25

Page 5: EinführunginMATLAB BlockkursDLR:19.4-22.4num.math.uni-goettingen.de/grapin/teaching/Vorlesung_MATLAB_20_0… · Programmieren-TeilII Gültigkeitsbereich von Vraiablen Schleifen Bedingungen

globale VariablenMittels des Befehls global können Variablen desglobalen Workspace auch für Funktionenmanipulierbar gemacht werden.

Funktionfunction f=myfun(x)

% myfun.m

% f(x)=xˆalpha sin(1/x)

global alpha

f=x.ˆalpha.*sin(1./x);

Plotten% plot_myfun

global alpha

alpha_w=[0.4 0. 6 1 1.5 2];

for i = 1:length(alpha_w);

alpha = alpha_w(i);

fplot(@myfun,[0.1,1]);

hold on;

end

hold off;

Gerd Rapin Einfuhrung in MATLAB – p.5/25

Page 6: EinführunginMATLAB BlockkursDLR:19.4-22.4num.math.uni-goettingen.de/grapin/teaching/Vorlesung_MATLAB_20_0… · Programmieren-TeilII Gültigkeitsbereich von Vraiablen Schleifen Bedingungen

FixpunktSuche ein ��� �

so dass

��� � �� � ��

0 0.5 1 1.5

0

0.2

0.4

0.6

0.8

1

Gerd Rapin Einfuhrung in MATLAB – p.6/25

Page 7: EinführunginMATLAB BlockkursDLR:19.4-22.4num.math.uni-goettingen.de/grapin/teaching/Vorlesung_MATLAB_20_0… · Programmieren-TeilII Gültigkeitsbereich von Vraiablen Schleifen Bedingungen

Fixpunkt-IterationFixpunkt-Iteration

��� � � �� � ��� bei geeignetem Startwert ��� .

0 0.5 1 1.5

0

0.2

0.4

0.6

0.8

1

Gerd Rapin Einfuhrung in MATLAB – p.7/25

Page 8: EinführunginMATLAB BlockkursDLR:19.4-22.4num.math.uni-goettingen.de/grapin/teaching/Vorlesung_MATLAB_20_0… · Programmieren-TeilII Gültigkeitsbereich von Vraiablen Schleifen Bedingungen

Implementierung% Plot 1

x=linspace(0,1.5,50);

y=cos(x);

plot(x,x,x,y,’LineWidth’,3),

axis([-0.1 1.5 -0.1 1.1]);

hold on;

pause; % stoppt bis eine Taste gedruckt wird

z(1)=0.1; % Anfangswert

it_max=10; % Iterationsschritte

for i=1:it_max

z(i+1)=cos(z(i));

plot([z(i) z(i)], [z(i) z(i+1)],’r--’,’LineWidth’,1);

pause;

plot([z(i) z(i+1)],[z(i+1) z(i+1)],’r--’,’LineWidth’,1);

hold on;

pause; % stoppt bis eine Taste gedruckt wird

end;

Gerd Rapin Einfuhrung in MATLAB – p.8/25

Page 9: EinführunginMATLAB BlockkursDLR:19.4-22.4num.math.uni-goettingen.de/grapin/teaching/Vorlesung_MATLAB_20_0… · Programmieren-TeilII Gültigkeitsbereich von Vraiablen Schleifen Bedingungen

for - Schleifefor variable = Ausdruck

BefehleendBemerkungen:

Der Ausdruck ist normalerweise von der Formi:s:j.

Die Befehle werden eingerückt.

Gerd Rapin Einfuhrung in MATLAB – p.9/25

Page 10: EinführunginMATLAB BlockkursDLR:19.4-22.4num.math.uni-goettingen.de/grapin/teaching/Vorlesung_MATLAB_20_0… · Programmieren-TeilII Gültigkeitsbereich von Vraiablen Schleifen Bedingungen

Beispiele

Berechne

� � ���� �

>> sum=0; for j=1:1000, sum=sum+1/j; end, sum

sum = 7.4855

Berechnen dreier Werte>> for x=[pi/6 pi/4 pi/3], sin(x), end

ans = 0.5000

ans = 0.7071

ans = 0.8660

Matrix als Ausdruck>> for x=eye(3), x’ ,end

ans = 1 0 0

ans = 0 1 0

ans = 0 0 1

Gerd Rapin Einfuhrung in MATLAB – p.10/25

Page 11: EinführunginMATLAB BlockkursDLR:19.4-22.4num.math.uni-goettingen.de/grapin/teaching/Vorlesung_MATLAB_20_0… · Programmieren-TeilII Gültigkeitsbereich von Vraiablen Schleifen Bedingungen

Vandermonde-MatrixBerechne zu einem gegebenen Vektor� � � ��� � � � ���

die Vandermonde-Matrix

� � ���� � � � � � � �� � � � � � �� � � � �� � �

......

......

...� �� � �� � � � �� � � �

Gerd Rapin Einfuhrung in MATLAB – p.11/25

Page 12: EinführunginMATLAB BlockkursDLR:19.4-22.4num.math.uni-goettingen.de/grapin/teaching/Vorlesung_MATLAB_20_0… · Programmieren-TeilII Gültigkeitsbereich von Vraiablen Schleifen Bedingungen

Implementierung IIfunction V=vandermonde2(x)

%----------------------------------------------------

% vandermonde2 berechnet die Vandermonde Matrix zu einem

% Vektor x

% INPUT: x Zeilenvektor

% OUTPUT: V Vandermonde-Matrix

% Gerd Rapin 8.11.2003

%------------------------------------------------------

n=length(x);

V=zeros(n,n);

for i=1:n

for j=1:n

V(i,j)=x(i)ˆ(j-1);

end

end

Bem.: Die vektorielle Variante ist 4-mal so schnell.

Gerd Rapin Einfuhrung in MATLAB – p.12/25

Page 13: EinführunginMATLAB BlockkursDLR:19.4-22.4num.math.uni-goettingen.de/grapin/teaching/Vorlesung_MATLAB_20_0… · Programmieren-TeilII Gültigkeitsbereich von Vraiablen Schleifen Bedingungen

Quadratische Gleichung

Suche � � � so dass� � ! � " � #Fallunterscheidung für

$ � � % &' ( ":Fall a):

$ ) #

2 Lösungen: � � ( %� $

Fall b):

$ � #

1 Lösung: � � ( %�

Fall c):

$ * #

keine Lösung

Gerd Rapin Einfuhrung in MATLAB – p.13/25

Page 14: EinführunginMATLAB BlockkursDLR:19.4-22.4num.math.uni-goettingen.de/grapin/teaching/Vorlesung_MATLAB_20_0… · Programmieren-TeilII Gültigkeitsbereich von Vraiablen Schleifen Bedingungen

Implementierungfunction [anz_loesungen, loesungen]=quad_gl(p,q)

%----------------------------------------------------

% quad_gl berechnet die Loesungen der quadratischen

% Gleichung xˆ2 + px + q =0

% INPUT: Skalare p

% q

%

% OUTPUT: anz_loesungen Anzahl der Loesungen

% loesungen Vektor der Loesungen

%

% Gerd Rapin 8.11.2003

%------------------------------------------------------

d=pˆ2/4-q; % Diskriminante

Gerd Rapin Einfuhrung in MATLAB – p.14/25

Page 15: EinführunginMATLAB BlockkursDLR:19.4-22.4num.math.uni-goettingen.de/grapin/teaching/Vorlesung_MATLAB_20_0… · Programmieren-TeilII Gültigkeitsbereich von Vraiablen Schleifen Bedingungen

Implementierung II% 2 Loesungen

if d>0

anz_loesungen=2;

loesungen=[-p/2-sqrt(d) -p/2+sqrt(d)];

end

% 1 Loesung

if d==0

anz_loesungen=1;

loesungen=[-p/2];

end

% 0 Loesungen

if d<0

anz_loesungen=0;

loesungen=[];

end

Gerd Rapin Einfuhrung in MATLAB – p.15/25

Page 16: EinführunginMATLAB BlockkursDLR:19.4-22.4num.math.uni-goettingen.de/grapin/teaching/Vorlesung_MATLAB_20_0… · Programmieren-TeilII Gültigkeitsbereich von Vraiablen Schleifen Bedingungen

Bedingung

Einfache Bedingungif Ausdruck

Befehleend

Bed. mit Alternativeif Ausdruck

Befehleelse

Befehleend

Die Befehle zwischen if und end werden ausge-

führt, wenn alle Elemente von Ausdruck ungleich 0

sind. Andernfalls werden (soweit vorhanden) die Be-

fehle zwischen else und end ausgeführt.

Gerd Rapin Einfuhrung in MATLAB – p.16/25

Page 17: EinführunginMATLAB BlockkursDLR:19.4-22.4num.math.uni-goettingen.de/grapin/teaching/Vorlesung_MATLAB_20_0… · Programmieren-TeilII Gültigkeitsbereich von Vraiablen Schleifen Bedingungen

Vergleichs-Operatoren>> a=[1 1 1], b=[0 1 2]

a == b gleich 0 1 0

a ˜= b ungleich 1 0 1

a < b kleiner 0 0 1

a > b größer 1 0 0

a <= b kleiner oder gleich 0 1 1

a >= b größer oder gleich 1 1 0

Bem: 1 = wahre Aussage, 0 = falsche Aussage

Bem: Komponentenweise Vergleiche sind auch für

Matrizen gleicher Größe möglich!

Gerd Rapin Einfuhrung in MATLAB – p.17/25

Page 18: EinführunginMATLAB BlockkursDLR:19.4-22.4num.math.uni-goettingen.de/grapin/teaching/Vorlesung_MATLAB_20_0… · Programmieren-TeilII Gültigkeitsbereich von Vraiablen Schleifen Bedingungen

Logische Operatoren

& logisches und ˜ logisches nicht| logisches oder xor exklusives oder

Beispiele:>> x=[-1 1 1]; y=[1 2 -3];

>> (x>0) & (y>0)

ans =

0 1 0

>> (x>0) | (y>0)

ans =

1 1 1

>> ˜( (x>0) & (y>0))

ans =

1 0 1

>> xor(x>0,y>0)

ans =

1 0 1

Gerd Rapin Einfuhrung in MATLAB – p.18/25

Page 19: EinführunginMATLAB BlockkursDLR:19.4-22.4num.math.uni-goettingen.de/grapin/teaching/Vorlesung_MATLAB_20_0… · Programmieren-TeilII Gültigkeitsbereich von Vraiablen Schleifen Bedingungen

While-Schleifenwhile Ausdruck

BefehleendDie Befehle werden wiederholt, so lange dieBedingung Ausdruck wahr ist. Ausdruck ist wahr, wennalle Einträge von Ausdruck ungleich

#sind.

Beispiel: Berechne � � ��� �.

>> n=1000; sum=0; i=1;

>> while (i<=n); sum=sum+(1/i); i=i+1; end, sum

sum = 7.4855

Gerd Rapin Einfuhrung in MATLAB – p.19/25

Page 20: EinführunginMATLAB BlockkursDLR:19.4-22.4num.math.uni-goettingen.de/grapin/teaching/Vorlesung_MATLAB_20_0… · Programmieren-TeilII Gültigkeitsbereich von Vraiablen Schleifen Bedingungen

Größter gemeins. Teiler (ggT)Berechnung des ggT von natürlichen Zahlen + und

,

mit Hilfe des euklidischen Algorithmus

Idee: Es gilt - - +� , � - - +� , ( + für + * ,

.

Algorithmus:Wiederhole, bis + � ,

Ist + ) ,

, so + � + ( ,

.

Ist + * ,, so

, � , ( +

Gerd Rapin Einfuhrung in MATLAB – p.20/25

Page 21: EinführunginMATLAB BlockkursDLR:19.4-22.4num.math.uni-goettingen.de/grapin/teaching/Vorlesung_MATLAB_20_0… · Programmieren-TeilII Gültigkeitsbereich von Vraiablen Schleifen Bedingungen

Implementierungfunction a=ggt(a,b)

%----------------------------------------------------

% ggt berechnet den grten gemeinsamen Teiler (ggT)

% zweier natrlichen Zahlen a und b

% INPUT: naturliche Zahlen a

% b

%

% OUTPUT: ggT

%

% Gerd Rapin 8.11.2003

%------------------------------------------------------

while (a˜=b)

if (a>b)

a=a-b;

else

b=b-a;

end

end

Gerd Rapin Einfuhrung in MATLAB – p.21/25

Page 22: EinführunginMATLAB BlockkursDLR:19.4-22.4num.math.uni-goettingen.de/grapin/teaching/Vorlesung_MATLAB_20_0… · Programmieren-TeilII Gültigkeitsbereich von Vraiablen Schleifen Bedingungen

break and continueDer Befehl break verläßt die while oderfor-Schleife.x=1; while 1, xmin=x; x=x/2;

if x==0, break, end,

end, xmin

xmin = 4.9407e-324

Durch continue springt man sofort in dienächste Iteration der Schleife, ohne dierestlichen Befehle zu durchlaufen.for i=1:10,

if i<5, continue, end,

x(i)=i; end, x

x = 0 0 0 0 5 6 7 8 9 10

Gerd Rapin Einfuhrung in MATLAB – p.22/25

Page 23: EinführunginMATLAB BlockkursDLR:19.4-22.4num.math.uni-goettingen.de/grapin/teaching/Vorlesung_MATLAB_20_0… · Programmieren-TeilII Gültigkeitsbereich von Vraiablen Schleifen Bedingungen

Aufgaben1. Lösen Sie die Fixpunktgleichung

��� � . � ! ( �� �2. Berechnen Sie eine Nullstelle von

� � �� � � � ( ��

Gerd Rapin Einfuhrung in MATLAB – p.23/25

Page 24: EinführunginMATLAB BlockkursDLR:19.4-22.4num.math.uni-goettingen.de/grapin/teaching/Vorlesung_MATLAB_20_0… · Programmieren-TeilII Gültigkeitsbereich von Vraiablen Schleifen Bedingungen

Aufgaben3. Schreiben Sie eine Funktion, die für / �

dieHilbert-Matrix � 0 �1 � �32 1 � mit

0 �1 � �� 1 �

berechnet. Berechnen Sie � für / � 4

.

4. Schreiben Sie eine Funktion, die für einenatürliche Zahl / die Fakultät berechnet.

5. Berechnen Sie die Nullstellen von

� � ( 5� � � ( 5 � �� � � ( 4 � � #�

Gerd Rapin Einfuhrung in MATLAB – p.24/25

Page 25: EinführunginMATLAB BlockkursDLR:19.4-22.4num.math.uni-goettingen.de/grapin/teaching/Vorlesung_MATLAB_20_0… · Programmieren-TeilII Gültigkeitsbereich von Vraiablen Schleifen Bedingungen

Aufgaben6. Die Fibonacci-Folge ist definiert durch

� � �� � � � �� � � � � � � � � � 6 � �

Schreiben Sie ein Programm, das

78 9: ;8< =;8 > ?@ A

berechnet. Stoppen Sie, falls B 7 8 C 78< = BD E FG .Geben Sie für

H � � # � I

und

H � � # � '

das entsprechende

6und das entsprechende -�

an.Hinweis: Benutzen Sie eine while-Schleife.

Gerd Rapin Einfuhrung in MATLAB – p.25/25