33
MATLAB-Seminar Sommer 2011 Prof. Dr. Henrik Schulze Erste Schritte Starten Sie MATLAB und gehen Sie in die MATLAB- Textkonsole. Dort erwartet Sie eine ähnliche Umgebung, wie Sie es von der Unix- Textkonsole her kennen: Es gibt einen Prompt, und Sie können Befehle eingeben. Probieren Sie Folgendes aus: » pwd ans = d:\schulze\matlab und » dir . .. 01.wav audiospektrum.m und » mkdir mein_verzeichnis » cd mein_verzeichnis » dir Sie können direkt in der Kommandozeile rechnen: » 7*8 ans = 56 » sin(pi/4) ans = 0.7071 » sqrt(2)/2 ans = 0.7071 Hierbei steht ans für "Answer". Mit - 1 -

MATLAB-Seminar Sommer 2011 · Plotten Sie zunächst Real- und Imaginärteil: Bei Dämpfung ist das gerade die gedämpfte Schwingung aus der Physik (Pohlsches Drehpendel). Plotten

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: MATLAB-Seminar Sommer 2011 · Plotten Sie zunächst Real- und Imaginärteil: Bei Dämpfung ist das gerade die gedämpfte Schwingung aus der Physik (Pohlsches Drehpendel). Plotten

MATLAB-Seminar Sommer 2011Prof. Dr. Henrik Schulze

Erste SchritteStarten Sie MATLAB und gehen Sie in die MATLAB- Textkonsole. Dort erwartet Sie eine ähnliche Umgebung, wie Sie es von der Unix- Textkonsole her kennen: Es gibt einen Prompt, und Sie können Befehle eingeben. Probieren Sie Folgendes aus:

» pwd

ans =

d:\schulze\matlab

und

» dir...01.wavaudiospektrum.m

und

» mkdir mein_verzeichnis» cd mein_verzeichnis» dir

Sie können direkt in der Kommandozeile rechnen:

» 7*8

ans =

56

» sin(pi/4)

ans =

0.7071

» sqrt(2)/2

ans =

0.7071

Hierbei steht ans für "Answer". Mit

- 1 -

Page 2: MATLAB-Seminar Sommer 2011 · Plotten Sie zunächst Real- und Imaginärteil: Bei Dämpfung ist das gerade die gedämpfte Schwingung aus der Physik (Pohlsches Drehpendel). Plotten

» help sqrt

können Sie sich den Befehl sqrt ansehen. Mit lookfor können Sie gezielt nach einem Stichwort suchen. Mit der Pfeiltaste können Sie bereits eingegebene Befehle zurückholen.

AufgabeSuchen Sie mit den beiden Befehlen ein bisschen herum, was MATLAB so alles für Funktionen hat. Sie werden wahrscheinlich keine kennen, die MATLAB nicht hat...

Wissen Sie zum Beispiel noch, was ein Cosinus Hyperbolicus ist?

MATLAB kann komplexe Zahlen:

» sqrt(-1)

ans =

0 + 1.0000i

Sowohl i als auch j sind als imaginäre Einheit vordefiniert.

» exp(-0.5j*pi)

ans =

0.0000- 1.0000i

Vorsicht: MATLAB ist sehr flexibel.. Alles, was mathematisch einen Sinn ergeben könnte, wird entsprechend interpretiert (auch wenn man es gar nicht so meinte!). Beispiel:

>> log(-1)

ans =

0 + 3.1416i

Alles klar???

Mit clc kann man den Bildschirminhalt löschen.

Mit clear kann man Variablen löschen.

- 2 -

Page 3: MATLAB-Seminar Sommer 2011 · Plotten Sie zunächst Real- und Imaginärteil: Bei Dämpfung ist das gerade die gedämpfte Schwingung aus der Physik (Pohlsches Drehpendel). Plotten

Skalare, Felder und Matrizen Bisher haben wir MATLAB wie einen Kommandozeilen- Taschenrechner benutzt. Wenn man programmieren will, braucht man Variablen und Felder. Man kann mit MATLAB umfangreiche Programme schreiben (dazu später mehr), man kann aber auch einfach in der Kommandozeile arbeiten. MATLAB ist eine "INTERPRETER- Sprache". So etwas kommt Ihnen vielleicht von BASIC her bekannt vor.

Wir probieren es mal aus:

» a=3

a =

3

» b=4

b =

4

» c=a*b

c =

12

Mit dem Semikolon unterdrückt man die Ausgabe:

» a=3;b=4;c=a*b

c =

12

MATLAB steht für MATrix LABoratory, weil alles auf Matrizen basiert. Vektoren (Felder, Arrays) sind Spezialfälle davon. Wir müssen zwischen Zeilen- und Spaltenvektoren unterscheiden. Einen Zeilenvektor kann ich zum Beispiel so erzeugen:

» zeile=[1 2 3]

zeile =

1 2 3

Und eine Spalte so:

» spalte=[4;5;6]

spalte =

- 3 -

Page 4: MATLAB-Seminar Sommer 2011 · Plotten Sie zunächst Real- und Imaginärteil: Bei Dämpfung ist das gerade die gedämpfte Schwingung aus der Physik (Pohlsches Drehpendel). Plotten

4 5 6

Das horizontale Trennzeichen ist das Leerzeichen (ein Komma tut es auch). Das vertikale Trennzeichen ist das Semikolon.

Jetzt können wir Matrizen basteln:

» A=[1 2 3;4 5 6]

A =

1 2 3 4 5 6

» B=[2 4;6 8]

B =

2 4 6 8

Bevor wir mit den Matrizen rechnen, schauen wir uns mal an, was wir alles so für Variablen haben:

» whos Name Size Bytes Class

A 2x3 48 double array B 2x2 32 double array a 1x1 8 double array ans 1x1 16 double array (complex) b 1x1 8 double array c 1x1 8 double array spalte 3x1 24 double array zeile 1x3 24 double array

Grand total is 20 elements using 168 bytes

Im 1. Semester haben Sie gelernt, mit Vektoren und Matrizen zu rechnen. Welche der folgenden Operationen sind wohl zulässig, welche sind unzulässig?

B*A A*B A*spalte A*zeile c*A zeile+spalte zeile*spalte spalte*zeilea*A A+a

Das letzte Beispiel ist interessant: Hier 'denkt' sich MATLAB das Richtige!

Man kann aus Vektoren und Matrizen neue basteln, indem man sie aneinanderklebt. Hier ist ein Beispiel:

- 4 -

Page 5: MATLAB-Seminar Sommer 2011 · Plotten Sie zunächst Real- und Imaginärteil: Bei Dämpfung ist das gerade die gedämpfte Schwingung aus der Physik (Pohlsches Drehpendel). Plotten

>> x=[1 2 3 4];y=[5 6 7 8];>> z=[x y]

z =

1 2 3 4 5 6 7 8

>> Z=[x;y]

Z =

1 2 3 4 5 6 7 8

Alles klar?

Man kann Vektoren und Matrizen transponieren:

A =

1 2 3 4 5 6

>> B=A'

B =

1 4 2 5 3 6

Man kann Matrizen auch 'flippen':

>> A=[1 2 3;4 5 6]

A =

1 2 3 4 5 6

>> B=fliplr(A)

B =

3 2 1 6 5 4

>> B=flipud(A)

- 5 -

Page 6: MATLAB-Seminar Sommer 2011 · Plotten Sie zunächst Real- und Imaginärteil: Bei Dämpfung ist das gerade die gedämpfte Schwingung aus der Physik (Pohlsches Drehpendel). Plotten

B =

4 5 6 1 2 3

>> B=flipud(fliplr(A))

B =

6 5 4 3 2 1

Lange Felder mit einer bestimmten Ordnung kann man zum Beispiel so erzeugen:

>> x=1:10

x =

1 2 3 4 5 6 7 8 9 10

>> x=0:2:20

x =

0 2 4 6 8 10 12 14 16 18 20

Nützlich ist auch das Kommando linspace. Sehen Sie es sich mal mit help linspace an. Beispiel:

>> linspace(0,1,10)

ans =

Columns 1 through 9

0 0.1111 0.2222 0.3333 0.4444 0.5556 0.6667 0.7778 0.8889

Column 10

1.0000

>> linspace(0,1,11)

ans =

Columns 1 through 9

0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 0.7000 0.8000

- 6 -

Page 7: MATLAB-Seminar Sommer 2011 · Plotten Sie zunächst Real- und Imaginärteil: Bei Dämpfung ist das gerade die gedämpfte Schwingung aus der Physik (Pohlsches Drehpendel). Plotten

Columns 10 through 11

0.9000 1.0000

Oft will man zwei Vektoren elementweise miteinander mulitplizieren (und nicht im Sinne der Matrizenmultiplikation). Dann muss man .* statt * schreiben. Beispiel:

>> x=1:10

x =

1 2 3 4 5 6 7 8 9 10

>> y=-10:-1

y =

-10 -9 -8 -7 -6 -5 -4 -3 -2 -1

>> z=x.*y

z =

-10 -18 -24 -28 -30 -30 -28 -24 -18 -10

Dagegen führt

>> z=x*y??? Error using ==> *Inner matrix dimensions must agree.

>>

zu einer Fehlermeldung. Der Punkt wird sinngemäß auch bei dem Exponentialoperator ^ angewendet:

>> z=x.^2

z =

1 4 9 16 25 36 49 64 81 100

>> z=2.^x

z =

Columns 1 through 8

2 4 8 16 32 64 128 256

- 7 -

Page 8: MATLAB-Seminar Sommer 2011 · Plotten Sie zunächst Real- und Imaginärteil: Bei Dämpfung ist das gerade die gedämpfte Schwingung aus der Physik (Pohlsches Drehpendel). Plotten

Columns 9 through 10

512 1024

Elementweises Dividieren geht auch so:

>> n=1:10

n =

1 2 3 4 5 6 7 8 9 10

>> kehrwerte=1./n

kehrwerte =

1.0000 0.5000 0.3333 0.2500 0.2000 0.1667 0.1429 0.1250 0.1111 0.1000

Der Zugriff auf Feldelemente eines Vektors wird in den folgenden Beispielen erläutert:

>> x=(1:10).^2

x =

1 4 9 16 25 36 49 64 81 100

>> x(4)

ans =

16

>> x([3 7])

ans =

9 49

>> x(3:7)

ans =

9 16 25 36 49

>> x(2:2:10)

ans =

4 16 36 64 100

>> x(10:-1:1)

- 8 -

Page 9: MATLAB-Seminar Sommer 2011 · Plotten Sie zunächst Real- und Imaginärteil: Bei Dämpfung ist das gerade die gedämpfte Schwingung aus der Physik (Pohlsches Drehpendel). Plotten

ans =

100 81 64 49 36 25 16 9 4 1

>> x(:)

ans =

1 4 9 16 25 36 49 64 81 100

>> x(:)'

ans =

1 4 9 16 25 36 49 64 81 100

Ganz schön trickreich... Aber es kommt noch trickreicher, nämlich beim Zugriff auf Matrizen:

>> A=[1 2 3 4;5 6 7 8;9 10 11 12]

A =

1 2 3 4 5 6 7 8 9 10 11 12

>> A(2,3)

ans =

7

>> A(3,2)

ans =

10

>> A(4)

ans =

- 9 -

Page 10: MATLAB-Seminar Sommer 2011 · Plotten Sie zunächst Real- und Imaginärteil: Bei Dämpfung ist das gerade die gedämpfte Schwingung aus der Physik (Pohlsches Drehpendel). Plotten

2

>> A(1:3)

ans =

1 5 9

>> A(3:7)

ans =

9 2 6 10 3>> A(1:2,2:4)

ans =

2 3 4 6 7 8

>> A(:)

ans =

1 5 9 2 6 10 3 7 11 4 8 12

Es lohnt sich, jetzt erstmal eine Weile nachzudenken, bevor man weiter macht.

Noch raffiniertere Sachen kann man mit dem Befehl find manchen. Schauen Sie ihn sich mit

>> help find

an. Wenn Sie alles verstanden haben, sollten Sie die beide folgende Aufgaben lösen können

AufgabeGegeben sei eine Sinusschwingung, die in dem Vektor u steht (u wie Spannung). Dieses Signal soll 'gleichgerichtet' werden: Suchen Sie alles Indizes, wo das Feldelement negativ ist und setzten sie dort den Wert auf Null.

- 10 -

Page 11: MATLAB-Seminar Sommer 2011 · Plotten Sie zunächst Real- und Imaginärteil: Bei Dämpfung ist das gerade die gedämpfte Schwingung aus der Physik (Pohlsches Drehpendel). Plotten

Eine Matrix aus Einsen oder Nullen bekommt man so:

>> ones(3)

ans =

1 1 1 1 1 1 1 1 1

>> ones(3,1)

ans =

1 1 1

>> ones(1,3)

ans =

1 1 1

>> ones(3,5)

ans =

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

>> zeros(3,6)

ans =

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Und die Einheitsmatrix so:

>> eye(3)

ans =

1 0 0 0 1 0 0 0 1

Auf die Länge eines Vektors kann man mit length zugreifen, auf die Dimensionen einer Matrix mit size. Sehen Sie sich dazu die Hilfe an!

- 11 -

Page 12: MATLAB-Seminar Sommer 2011 · Plotten Sie zunächst Real- und Imaginärteil: Bei Dämpfung ist das gerade die gedämpfte Schwingung aus der Physik (Pohlsches Drehpendel). Plotten

Mit

>> reshape(A,K,L)

kann man die Dimension einer Matrix ändern. Das Resultat ist eine [K,L]-Matrix. Natürlich muss die Zahl der Elemente passen!

AufgabeErzeugen Sie eine beliebige Matrix. Duplizieren Sie dann jede zweite Spalte der Matrix.

Folgende Matrizenoperationen sind sehr nützlich:

det rank eig inv

Das lineare Gleichungssysteme

x + y + z = 63x +2y - z = 45x - y -z = 0

löst man so:

>> A=[1 1 1;3 2 -1;5 -1 -1]

A =

1 1 1 3 2 -1 5 -1 -1

>> b=[6 4 0]'

b =

6 4 0

Prüfe erstmal auf Lösbarkeit:

>> rank(A)

ans =

3

>> det(A)

- 12 -

Page 13: MATLAB-Seminar Sommer 2011 · Plotten Sie zunächst Real- und Imaginärteil: Bei Dämpfung ist das gerade die gedämpfte Schwingung aus der Physik (Pohlsches Drehpendel). Plotten

ans =

-18

>> x=A\b

x =

1.0000 2.0000 3.0000

AufgabeLösen Sie das Gleichungssystem

x + y + z = 1x + 2y - z = 05x - y -z = 0

- 13 -

Page 14: MATLAB-Seminar Sommer 2011 · Plotten Sie zunächst Real- und Imaginärteil: Bei Dämpfung ist das gerade die gedämpfte Schwingung aus der Physik (Pohlsches Drehpendel). Plotten

2D-Plots Wir wollen eine Sinuskurve plotten. Das geht recht einfach:

>> t=linspace(0,1,300);>> s=sin(2*pi*t);>> figure>> plot(t,s)

Bemerkenswert: MATLAB hat den Sinus für 300 Werte von t mit einem einzigen Befehl berechnet! Schleifen braucht man für so etwas nicht..

Wir wollen jetzt den Plot noch etwas verschönern:

>> xlabel('Zeit [s]')>> ylabel('Spannung [V]')>> title('Dies ist eine Wechselspannung')

Wir wollen jetzt noch eine Kosinuskurve dazu malen. Damit die erste Kurve nicht gelöscht wird, muss man Folgendes eingeben:

>> hold on

Jetzt plotten wir eine Kosinuskurve in der Farbe rot dazu:

>> s=cos(2*pi*t);>> plot(t,s,'r')

Hier seht 'r' für das Stilmerkmal 'rot'.

Mit axis kann man noch die Achsen manuell einstellen. Schauen Sie sich den Befehl mit der Hilfe an!

Man kann folgendermaßen Text einfügen:

>> text(0.5,0,'Sinus')>> text(0.25,0,'Kosinus')

AufgabeSchauen Sie sich mit help plot an, was es alles für Stilmerkmale gibt! Plotten Sie ein paar mathematische Funktionen ihrer Wahl mit verschiedenen Stilmerkmalen, beschriften Sie die Achsen usw.

AufgabePlotten Sie die Funktion

- 14 -

st =exp −t sin2 t

Page 15: MATLAB-Seminar Sommer 2011 · Plotten Sie zunächst Real- und Imaginärteil: Bei Dämpfung ist das gerade die gedämpfte Schwingung aus der Physik (Pohlsches Drehpendel). Plotten

Probieren wir mal Folgendes aus:

>> t=linspace(0,1,300);>> s=sin(2*pi*t);>> figure>> plot(s) Wenn man das Argument für die Abszisse weglässt, wird dafür defaultmäßig der Feldindex genommen.

In der Nachrichtentechnik hat man es oft mit komplexen Schwingungen zu tun. Wir tun mal Folgendes:

>> t=linspace(0,1,300);>> z=exp(j*2*pi*t);>> figure>> plot(t,z)Warning: Imaginary parts of complex X and/or Y arguments ignored.

MATLAB plottet in diesem Fall nur den Realteil und gibt eine Warnung aus. Wenn ich Real- und Imaginärteil sehen möchte, schreibe ich einfach beide als Zeilen untereinander in eine Matrix:

>> figure>> plot(t,[real(z);imag(z)])

Achtung! Das ist sehr kompakt.. Haben Sie verstanden, was dahinter steckt?

Jetzt kann man dazu sogar eine Legende basteln:

>> legend('Realteil','Imaginaerteil')

Wenn man bei einer komplexen Größe im Plotbefehl das Abszissenargument einfach weglässt,

>> figure>> plot(z)

passiert etwas zunächst Erstaunliches: MATLAB macht das Beste daraus und plottet die komplexe Ortskurve der Funktion z(t), und das ist ein Kreis! Dass der Kreis eher aussieht wie eine Pflaume, liegt an der Achsenskalierung. Mit

>> axis('equal')

wird der Kreis auch rund.

Übrigens: Mit

>> close all

schließt man alles Bilder.

- 15 -

Page 16: MATLAB-Seminar Sommer 2011 · Plotten Sie zunächst Real- und Imaginärteil: Bei Dämpfung ist das gerade die gedämpfte Schwingung aus der Physik (Pohlsches Drehpendel). Plotten

AufgabeBetrachten Sie die logarithmische Spirale

wobei a eine (positive oder - bei Dämpfung - negative) reelle Zahl ist. Plotten Sie zunächst Real- und Imaginärteil: Bei Dämpfung ist das gerade die gedämpfte Schwingung aus der Physik (Pohlsches Drehpendel). Plotten Sie dann die komplexe Ortskurve.

In der digitalen Signalverarbeitung hat man es oft mit Abtastwerten eines Signales zu tun. Hier ist folgende Darstellung als Stemplot üblich:

>> N=16;n=0:N-1;s=sin(2*pi*n/N);>> stem(n,s)>> axis([0 16 -1 1]);grid on

SubplotsGelegentlich möchte man mehrere Diagramme in einem Plot darstellen. Dazu kann man mit subplot einen Plot in mehrere Fenster unterteilen, die Fenster einzeln ansteuern und dort dann die bekannten Plotbefehle verwenden.

Beispiel:

>> x=linspace(0,1,300);>> subplot(3,2,1)>> plot(x,sin(2*pi*x))>> xlabel('x-Achse');ylabel('y-Achse');grid on>> subplot(3,2,2)>> plot(x,cos(2*pi*x))>> xlabel('x-Achse');ylabel('y-Achse');grid on>> subplot(3,2,3)>> plot(x,1./x)Warning: Divide by zero.>> xlabel('x-Achse');ylabel('y-Achse');grid on>> subplot(3,2,4)>> plot(x,log(x))Warning: Log of zero.>> xlabel('x-Achse');ylabel('y-Achse');grid on>> subplot(3,2,5)>> plot(x,cosh(x))>> xlabel('x-Achse');ylabel('y-Achse');grid on>> subplot(3,2,6)>> plot(x,sinh(x))>> xlabel('x-Achse');ylabel('y-Achse');grid on

Man kann auch logarithmisch plotten. Beispiel:

- 16 -

z t =exp a j2t

Page 17: MATLAB-Seminar Sommer 2011 · Plotten Sie zunächst Real- und Imaginärteil: Bei Dämpfung ist das gerade die gedämpfte Schwingung aus der Physik (Pohlsches Drehpendel). Plotten

>> x=linspace(0,10,300);>> y=1./(1+x.^2);>> subplot(2,2,1);plot(x,y);xlabel('x');ylabel('y');grid on>> subplot(2,2,2);semilogy(x,y);xlabel('x');ylabel('y');grid on>> subplot(2,2,3);semilogx(x,y);xlabel('x');ylabel('y');grid on>> subplot(2,2,4);loglog(x,y);xlabel('x');ylabel('y');grid on Sie könnten Ihr Bild gerne ausdrucken. Das geht entweder über das Menü oder mit dem Befehl

>> print

Was geht schneller? Mit

>> print -depsc meinbild

drucken Sie Ihr Bild in die Datei meinbild.eps.

- 17 -

Page 18: MATLAB-Seminar Sommer 2011 · Plotten Sie zunächst Real- und Imaginärteil: Bei Dämpfung ist das gerade die gedämpfte Schwingung aus der Physik (Pohlsches Drehpendel). Plotten

Erzeugung von (Pseudo-) ZufallszahlenMit einem Computer kann man keine wirklich zufälligen Zahlen erzeugen. Zufallszahlen werden schließlich berechnet. Man kann nur eine Folge von Zahlen erzeugen, die eine scheinbar zufälliges Verhalten zeigt. Diese Folge kann wegen der Zahldarstellung nur eine endliche Länge haben. Wenn eine positive ganze Zahl z.B. mit 4 Bytes dargestellt wird, kann gibt es verschiedene positive ganzzahlige Zufallszahlen erzeugen (die Null kommt nicht vor!). Wenn man durch die größte darstellbare Zahl teilt, erhält man Zufallszahlen zwischen Null und Eins, die (hoffentlich) statistisch gleichverteilt sind. Intern erzeugt der Rechner die Zufallszahlen durch ein rückgekoppeltes Schieberegister. Bei gegebenen Anfangszustand werden immer die selben Zahlen erzeugt!

Bei MATLAB heißt der Zufallszahlengenerator für die Gleichverteilung zwischen Null und Eins rand.

Geben Sie mal ein:

>> rand

ans =

0.9501

>> rand

ans =

0.2311

>> rand

ans =

0.6068

Jeder von uns hat jetzt 'zufällig' die selben 'Zufallszahlen' erzeugt. Jetzt setzen wir das Schieberegister wieder auf seinen Anfangszustand und erhalten die selbe zufällige Zahlenfolge:

>> rand('state',0)>> rand

ans =

0.9501

>> rand

ans =

0.2311

- 18 -

232−1

Page 19: MATLAB-Seminar Sommer 2011 · Plotten Sie zunächst Real- und Imaginärteil: Bei Dämpfung ist das gerade die gedämpfte Schwingung aus der Physik (Pohlsches Drehpendel). Plotten

>> rand

ans =

0.6068

Mit einer anderen Initialisierung bekommt man eine andere Folge:

>> rand('state',13)>> rand

ans =

0.8214

>> rand

ans =

0.6159

>> rand

ans =

0.2119

Wie man Matrizen oder Vektoren mit Zufallszahlen zwischen Null und Eins bekommt, zeigen die folgenden Beispiele:

>> rand(3)

ans =

0.8740 0.4153 0.5814 0.0395 0.4270 0.6976 0.8187 0.8111 0.8849

>> rand(3,2)

ans =

0.2276 0.9151 0.5609 0.4093 0.1197 0.6737

>> rand(5,1)

ans =

0.2412 0.6890

- 19 -

Page 20: MATLAB-Seminar Sommer 2011 · Plotten Sie zunächst Real- und Imaginärteil: Bei Dämpfung ist das gerade die gedämpfte Schwingung aus der Physik (Pohlsches Drehpendel). Plotten

0.8220 0.0454 0.7878

>> rand(1,10)

ans =

0.8273 0.8288 0.9569 0.2456 0.9192 0.4327 0.8936 0.2609 0.7621 0.5370

Jetzt wollen wir mal sehen, wie 'zufällig' die Zufallszahlen sind:

>> x=rand(1000000,1);>> mean(x)

ans =

0.4999

>> hist(x,50)

>> sum(x)

ans =

4.9993e+05

Alles klar?

Jetzt sollen die Zufallszahlen in einem anderen Wertebereich liegen:

AufgabeErzeugen Sie eine Million Zufallszahlen, die gleichmäßig verteilt sind zwischen 1. Den Werten 0 und 100.2. Den Werten -1 und +1.3. Den Werten 50 und 60.Überprüfen Sie anhand eines Histogrammes!

Für die folgenden Aufgaben muss man runden. Bei MATLAB gibt es dazu die Kommandos

round fix ceil floor

AufgabeErzeugen sie einen Zufallsbitgenerator. Damit ist ein Zufallsgenerator gemeint, der mit gleicher Wahrscheinlichkeit die Zahlen 0 und 1 erzeugt. Überprüfen Sie die Statistik

- 20 -

Page 21: MATLAB-Seminar Sommer 2011 · Plotten Sie zunächst Real- und Imaginärteil: Bei Dämpfung ist das gerade die gedämpfte Schwingung aus der Physik (Pohlsches Drehpendel). Plotten

AufgabeErzeugen sie einen 'Würfel'. Damit ist ein Zufallsgenerator gemeint, der mit gleicher Wahrscheinlichkeit die Zahlen 1,2,3,4,5,6 erzeugt. Überprüfen Sie die Statistik anhand eines Histogrammes.

Anmerkung: Nicht wenige Kursteilnehmer erzeugen beim ersten Versuch einen 'Hexenwürfel', bei dem auch die 7 vorkommt. Das ist auch ganz nett, aber nicht erwünscht.

Aufgabe• Erzeugen Sie N Zufallszahlenpaare, deren zugehörige Punkte in der Ebene gleichmäßig über ein

Quadrat der Kantenlänge Zwei verteilt sind. Stellen Sie diese in geeigneter Weise graphisch dar.• Finden Sie die Punkte, die innerhalb des Einheitskreises liegen und markieren Sie diese in einer

anderen Farbe.• Bestimmen Sie die Kreiszahl π.

Gaußsche ZufallszahlenSehr wichtig nicht nur in vielen Bereichen der Statistik, besonders aber auch in der Nachrichtentechnik ist die Gaußsche Normalverteilung. Ihre Wahrscheinlichkeitsdichte findet man auf dem 10DM-Schein:

µ ist der Mittelwert und σ die Standardabweichung. Die Wahrscheinlichkeitsdichte kann man sich vorstellen als ein (geignet normiertes) Histogramm im Grenzfall unendlich häufigen 'Würfelns'.

Der Gaußsche Zufallsgenerator bei MATLAB heißt

>> randn

und wird initialisiert z.B. mit

>> randn('state',0)

AufgabeErzeugen Sie eine Million gaußsche Zufallszahlen und erstellen Sie ein Histogramm dazu. Berechnen Sie für diese Zahlen den Mittelwert und die Standardabweichung. Erzeugen Sie gaußsches Rauschen der Leistung 2 und plotten sie dieses. Addieren Sie zu den Rauschen eine Gleichspannung und „messen“ Sie Mittelwert und Standardabweichung.

AufgabeErzeugen Sie N Zufallszahlenpaare, deren zugehörige Punkte in der Ebene in x und y-Richtung Gauß-verteilt sind. Stellen Sie diese in geeigneter Weise graphisch dar.

- 21 -

p x = 122

e− 1

22 x−2

Page 22: MATLAB-Seminar Sommer 2011 · Plotten Sie zunächst Real- und Imaginärteil: Bei Dämpfung ist das gerade die gedämpfte Schwingung aus der Physik (Pohlsches Drehpendel). Plotten

3D-Plots

Wir betrachten eine Funktion von zwei Variablen und möchten diese dreidimensional darstellen. Das Prinzip geht so:

• Die x-Werte stehen in horizontaler Richtung in einer Matrix X aus lauter identischen Zeilen. • Die y-Werte stehen in vertikaler Richtung in einer Matrix Y aus lauter identischen Spalten.• Die z-Werte stehen in einer Matrix Z. • Alle drei Matrizen haben die selbe Dimension.

Beispiel: Wir betrachten die Funktion . Um die Matrizen ansehen zu können, nehmen wir nur wenige Werte.

>> x=-5:5;y=-3:3;>> [X,Y]=meshgrid(x,y)

X =

-5 -4 -3 -2 -1 0 1 2 3 4 5 -5 -4 -3 -2 -1 0 1 2 3 4 5 -5 -4 -3 -2 -1 0 1 2 3 4 5 -5 -4 -3 -2 -1 0 1 2 3 4 5 -5 -4 -3 -2 -1 0 1 2 3 4 5 -5 -4 -3 -2 -1 0 1 2 3 4 5 -5 -4 -3 -2 -1 0 1 2 3 4 5

Y =

-3 -3 -3 -3 -3 -3 -3 -3 -3 -3 -3 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3

>> Z=X.^2-Y.^4

Z =

-56 -65 -72 -77 -80 -81 -80 -77 -72 -65 -56 9 0 -7 -12 -15 -16 -15 -12 -7 0 9 24 15 8 3 0 -1 0 3 8 15 24 25 16 9 4 1 0 1 4 9 16 25 24 15 8 3 0 -1 0 3 8 15 24 9 0 -7 -12 -15 -16 -15 -12 -7 0 9 -56 -65 -72 -77 -80 -81 -80 -77 -72 -65 -56

>> figure>> surf(X,Y,Z)

- 22 -

z= f x , y

z= f x , y

Page 23: MATLAB-Seminar Sommer 2011 · Plotten Sie zunächst Real- und Imaginärteil: Bei Dämpfung ist das gerade die gedämpfte Schwingung aus der Physik (Pohlsches Drehpendel). Plotten

>> pcolor(X,Y,Z);>> xlabel('x');ylabel('y');zlabel('z')

Der Befehl

>> [X,Y]=meshgrid(x,y)

hat es in sich! Sehen Sie ihn sich noch mal mit der Hilfe an!

AufgabePlotten Sie den Affensattel. Das ist die Funktion

.

An dem Plot vom Affensattel wollen wir verschiedene Dinge ausprobieren:

Sehen Sie sich mal die Hilfe an zu dem Befehl

>> shading

und probieren sie ihn aus!

Sehen Sie sich mal die Hilfe an zu dem Befehl

>> colormap

und probieren sie ihn aus! Welche Farbskala ist am schönsten?

Es gibt noch andere Möglichkeiten, Funktionen von zwei Variablen darzustellen. Probieren Sie Folgendes aus:

>> mesh(X,Y,Z)>> meshc(X,Y,Z)>> meshz(X,Y,Z)>> surf(X,Y,Z)>> contour(X,Y,Z)

AufgabePlotten Sie eine Halbkugel. Das ist die Funktion

und Null überall sonst..

- 23 -

z= f x , y=x3−3xy2

z= f x , y=1− x2− y2 , x2 y21

Page 24: MATLAB-Seminar Sommer 2011 · Plotten Sie zunächst Real- und Imaginärteil: Bei Dämpfung ist das gerade die gedämpfte Schwingung aus der Physik (Pohlsches Drehpendel). Plotten

M-Files

Bisher haben wir MATLAB-Befehle einzeln in der Kommandozeile eingegeben. Man kann mit MATLAB aber auch richtige Programme schreiben. Man unterscheidet zwischen MATLAB-Skripten und MATLAB-Funktionen. Man nennt in beiden Fällen die zugehören Dateien M-Files, weil sie normalerweise mit *.m enden. Den MATLAB-Editor können Sie über das Menü aufrufen.

MATLAB-SkripteIm Prinzip ist hier alles so, als würde man in der Kommandozeile die Befehle eingeben, nur dass sie eben aus praktischen Gründen in einer Datei stehen. Die Variablen sind alle global und bleiben nach Ausführen des Skripts im Arbeitsspeicher erhalten. Das Skript wird ausgeführt, wenn man seinen Namen in der Kommandozeile eingibt. Man kann sich auch 'durchklicken'.

AufgabeErstellen Sie ein MATLAB-Skript zum Plot des Affensattels. Erstellen sie mehrere verschiedene Plots mit den unterschiedlichen Darstellungen.

FunktionenBei Funktionen bleiben die Variablen lokal. Es gibt Eingabe- und Ausgabeparameter. Es ist alles ganz ähnlich, wie sie es von der Programmiersprache C kennen. Sehen Sie sich dazu mit

>> help function

die Hilfe an. Beachten Sie: Funktionen sollten eine Hilfe enthalten und sollten gut kommentiert werden!

Empfehlung: Dateiname und Funktionsname sollten identisch sein.

AufgabeSchreiben Sie eine Funktion namens gausskurve, die die Gaußsche Glockenkurve

berechnet. Input: Der Vektor oder die Matrix mit den x-Werten, die Varianz und der Mittelwert. Output: Der Vektor oder die Matrix mit den y-Werten.

Die folgende Funktion wird in der Nachrichtentechnik viel gebraucht. Programmiertechnisch ist das nochmal eine schöne Wiederholung des Befehles find.

- 24 -

y= 122

e− 1

22 x−2

Page 25: MATLAB-Seminar Sommer 2011 · Plotten Sie zunächst Real- und Imaginärteil: Bei Dämpfung ist das gerade die gedämpfte Schwingung aus der Physik (Pohlsches Drehpendel). Plotten

AufgabeSchreiben Sie eine Funktion namens si, die die Funktion

berechnet. Bei x=0 hat die Funktion eine hebbare Singularität. Man definiert si(0)=1.

AufgabeDie Taylor-Reihe für die Sinusfunktion lautet

sin x=x− 13 !

x315!

x5−1

7 !x7±...

Schreiben sie eine Funktion, die die Summanden dieser Reihe als Zeilen einer Matrix ausgibt. Mit cumsum erhält man daraus später leicht die Reihe. Schreiben Sie ein Skript, mit dem sie die Tayloreihe bis (z.B.) zur 7. Ordnung darstellen können. Plotten sie zum Vergleich auch die Sinusfunktion. Hinweis: Mit cumprod kann man die Folge der Fakultäten ausrechnen. Ebenfalls nützlich für diese Aufgabe sind die Funktionen Mit meshgrid und repmat.

AufgabeDie Fourier-Reihe für eine Rechteckfunktion lautet

st =sin2 t /T 13

sin2 3t/T 15

sin25t /T 17

sin 27 t /T ....

Schreiben sie eine Funktion, die die Summanden dieser Fourierreihe als Zeilen einer Matrix ausgibt. Mit cumsum erhält man daraus die Reihe.

AufgabeSchreiben Sie eine Funktion mit dem Aufruf [a,b]=regress_gerade(x,y), welche für die beiden Vektoren x,y von „Messwerten“ (deren Elemente jeweils als x-y-Paare zu verstehen sind) die Parameter a ,b der Regressionsgerade y=axb berechnet. Die Theorie dazu finden Sie auf einem separaten Blatt.

- 25 -

y= sinx x

Page 26: MATLAB-Seminar Sommer 2011 · Plotten Sie zunächst Real- und Imaginärteil: Bei Dämpfung ist das gerade die gedämpfte Schwingung aus der Physik (Pohlsches Drehpendel). Plotten

Schleifen und IF-Bedingungen

Schleifen benötigt man bei MATLAB nur sehr selten, weil man auf die Elemente von Vektoren und Matrizen viel eleganter über Indexfelder zugreifen kann (siehe obige Beispiele). Man sollte sie möglichst vermeiden, weil die Programme dadurch langsam werden (in den neueren MATLAB-Versionen ist das allerdings nicht mehr so drastisch wie in älteren). Manchmal kann man sie aber nicht vermeiden. Sehen Sie sich mit >> help for

und >> help while

die Syntax an. Es ist alles ganz ähnlich wie in der Programmiersprache C.

AufgabeWie Sie sicher wissen, divergiert die harmonische Reihe

,

allerdings divergiert sie sehr langsam. Schreiben Sie ein Programm, das die Partialsummen berechnet und einen Moment anzeigt (benutzen Sie den Befehl pause). Benutzen Sie eine der beiden Arten von Schleifen.

IF-Bedingungen werden etwas häufiger benötigt. Sehen Sie sich die Hilfe an:

>> help if>> help else>> help elseif

Oft muss man Bedingungen an die Input-Parameter abfragen. Auch Fehler-Abbrüche des Progammes sollte man einbauen können:

>> help error

AufgabeProgrammieren Sie einen Einmaleins-Trainer. Mit input wird der Kandidat gefragt, wieviel Aufgaben er rechnen will. Mit tic und toc kann man die Zeit stoppen. Bei einem Fehler soll mit error und dem Hinweis auf das richtige Ergebnis abgebrochen werden. Zum Schluss soll die benötigte Zeit pro Aufgabe ausgegeben werden (help disp und help num2str). Die Aufgaben werden durch einen Zufallsgenerator erzeugt.

- 26 -

∑k =1

∞ 1k

Page 27: MATLAB-Seminar Sommer 2011 · Plotten Sie zunächst Real- und Imaginärteil: Bei Dämpfung ist das gerade die gedämpfte Schwingung aus der Physik (Pohlsches Drehpendel). Plotten

Audio-AnwendungenMan kann Signale, die man mit MATLAB erzeugt hat, sehr leicht hörbar machen.

>> sound(s,f_A)

spielt das Signal ab, das in dem Vektor s steht. Die Abtastfrequenz ist f_A. Wenn s eine Matrix mit zwei Spalten ist, hört man Stereo.

Die Werte des Signal müssen zwischen -1 und +1 liegen, sonst wird ,geclippt'.

Man muss sich ein bisschen über die Zeitachse und die Frequenzen Gedanken machen, damit das Gewünschte herauskommt. Hierzu dienst die folgende

AufgabeErzeugen sie ein Feld s, in dem die Abtastwerte einer Sinusschwingung der Frequenz 1000 Hz stehen. Die Abtastfrequenz sei 44100 Hz. Spielen Sie dieses Signal ab.

Warnhinweis: Setzen Sie die Kopfhörer erst auf, wenn sie sicher sind, dass die Lautstärke richtig geregelt ist.

Wir können jetzt einen Hörtest programmieren:

AufgabeProgrammieren Sie einen Hörtest. Beginnend z.B. bei 440 Hz soll mit einem bestimmten Tonintervall der hörbare Bereich durchlaufen werden. Als Intervall eignet sich z.B. die kleine Terz, die dem Frequenzverhältnis sqrt(sqrt(2))=1.1892.... entspricht. (Frage an den Musiker: Warum ist das so?). Sie können aber auch ein anderes Frequenzverhältnis wählen. Mit einer Schleife gehen Sie die Frequenzen durch, zeigen die jeweilige Frequenz an und erzeugen einen Ton von ca. einer Sekunde. Der Befehl pause ist hier hilfreich.

Anmerkung: Wenn Ihre Töne (versehentlich) die halbe Abtastfrequenz (d.h. 22050 Hz) überschreiten, bekommen Sie es mit Aliasing zu tun. Haben Sie schon mal etwas davon gehört?

Man kann mit MATLAB auch Musikstücke verändern oder "verschlimmbessern". Mit

>> [s,f_A,nbits]=wavread('toms_diner.wav',round(10.3*44100));

lesen Sie aus der Datei toms_diner.wav ein (ca. 10.3*44100 Samples, also ca. 10.3 Sekunden Musik). Die Samples stehen dann in der Matrix s. Mit f_A wird die Abtastfrequenz ausgegeben, mit nbits die Quantisierung.

Verständnisfrage: Wenn man eine WAV-Datei vollständig in eine Matrix mit zwei Spalten ausliest, wie viel mehr Speicher wird dann benötigt?

Jetzt wird ein Musikstück manipuliert:

- 27 -

Page 28: MATLAB-Seminar Sommer 2011 · Plotten Sie zunächst Real- und Imaginärteil: Bei Dämpfung ist das gerade die gedämpfte Schwingung aus der Physik (Pohlsches Drehpendel). Plotten

AufgabeLesen Sie ein paar Sekunden aus einem Musikstück ein und hören Sie es sich an. Folgende Manipulationen wollen wir hörbar machen:

• Vertauschen Sie linken und rechten Stereokanal.• Spielen Sie das Stück rückwärts ab.• Drehen Sie nach 5 Sekunden im linken Kanal die Phase um 180°. Der Raumklang wird

diffus. Sie kennen diesen Effekt von falsch gepolten Lautsprecherboxen. • Verzögern Sie den linken Kanal gegenüber dem rechten.• Bauen Sie ein Echo ein.• Bestimmen Sie die mittlere Leistung des Signals. Fügen Sie mit randn weißes Rauschen

hinzu. Probieren Sie dabei verschiedene Rauschabstände aus, z.B. SNR = 10 dB,..., 40 dB.• Bauen Sie eine nichtlineare Verzerrung ein.

- 28 -

Page 29: MATLAB-Seminar Sommer 2011 · Plotten Sie zunächst Real- und Imaginärteil: Bei Dämpfung ist das gerade die gedämpfte Schwingung aus der Physik (Pohlsches Drehpendel). Plotten

Ein- und AusgabeDie einfachste Methode, eine Matrix (oder auch mehrere) in eine Datei zu schreiben, funktioniert mit dem Befehl save. Das folgende Beispiel zeigt, wie das geht:

A=[1 2 3;4 5 6]

A =

1 2 3 4 5 6

>> save datei.txt A -ascii

Mit dem Editor können Sie die Datei ansehen. Deshalb habe ich hier die Option -ascii gewählt, die eine Textdatei erzeugt.

Folgendermaßen kann man sie wieder laden:

>> B=load('datei.txt')

B =

1 2 3 4 5 6

Etwas aufwändiger, aber viel flexibler ist die formatierte Ein- und Ausgabe. Zunächst muss man dabei eine Datei öffnen bzw. erzeugen. Das geht z.B. so:

>> fid=fopen('meinedatei.txt','wt')

fid =

3

Die Datei meinedatei.txt wurde mit Schreibzugriffsrechten ('w') als Textdatei ('t') erzeugt (weitere Optionen finden Sie in der Hilfe). Jede geöffnete Datei bekommt eine File-ID zugewiesen. Diese wurde in die Variable fid geschrieben. Man braucht sie, um auf die Datei zuzugreifen.

Mit

>> fclose(fid)

wird die Datei wieder geschlossen. Der Befehl

>> fclose('all')

schließt alle offenen Dateien.

- 29 -

Page 30: MATLAB-Seminar Sommer 2011 · Plotten Sie zunächst Real- und Imaginärteil: Bei Dämpfung ist das gerade die gedämpfte Schwingung aus der Physik (Pohlsches Drehpendel). Plotten

Der Befehl fprintf ermöglicht das formatierte Schreiben in eine Datei. Dem C-Programmierer kommt das sehr bekannt vor (allerdings arbeitet MATLAB mit Matrizen!), ansonsten ist er etwas gewöhnungsbedürftig. Sehen Sie sich den Befehl mit der Hilfe genau an. Dort finden Sie das folgende Beispiel, das Sie verstehen und nachvollziehen sollten:

>> x = 0:.1:1; y = [x; exp(x)];>> fid = fopen('exp.txt','w');>> fprintf(fid,'%6.2f %12.8f\n',y);>> fclose(fid);

Wenn Sie das verstanden haben, lösen Sie bitte folgende

Aufgabe

Erzeugen Sie mit dem Befehl fprintf eine Datei, in der folgende Tabelle steht:

Decibel Table---------------------------------Power ratio = 1 ==> 0.00 decibelsPower ratio = 2 ==> 3.01 decibelsPower ratio = 3 ==> 4.77 decibelsPower ratio = 4 ==> 6.02 decibelsPower ratio = 5 ==> 6.99 decibels....

Diese Tabelle werden Sie später noch oft gut gebrauchen können. Am besten, Sie drucken sie aus und bewahren sie gut auf.

Zu dem Formatierungsstring finden Sie eine ausführliche Aufstellung in der MATLAB HTML-Hilfe.

Formatiertes Einlesen geht mit dem Befehl fscanf. Die Syntax ist praktisch die selbe. Schauen Sie sich die Hilfe an.

Low-Level Lese- und Schreibbefehle sind fread und fwrite. Sie sind sehr mächtig, erfordern aber auch etwas Vorstellungsvermögen "auf der Bitebene".

Hier habe ich mal etwas herumgespielt. Varieren Sie die Beispiele!

>> nummern=(80:100)';>> A=[num2str(nummern) char(32*ones(size(nummern)))... char(nummern)... char(10*ones(size(nummern)))]>> fid=fopen('texttest.txt','w')>> fwrite(fid,A')>> fprintf(fid,'--------------')>> fprintf(fid,'============== \n')>> fprintf(fid,'Ende der Tabelle \n')>> A=[num2str(nummern) char(32*ones(size(nummern)))... char(nummern) char(10*ones(size(nummern)))]>> fprintf(fid,'%s\n',A')

- 30 -

Page 31: MATLAB-Seminar Sommer 2011 · Plotten Sie zunächst Real- und Imaginärteil: Bei Dämpfung ist das gerade die gedämpfte Schwingung aus der Physik (Pohlsches Drehpendel). Plotten

>> x=rand(5,1)>> fwrite(fid,x,'double')>> fprintf(fid,'---------------- \n')>> fprintf(fid,'%g\n',x)>> fprintf(fid,'---------------- \n')>> fclose(fid)

Mit

>> frewind(fid)

gehen Sie auf die Anfangsposition der Datei zurück ("Zurückspulen des Bandes")

- 31 -

Page 32: MATLAB-Seminar Sommer 2011 · Plotten Sie zunächst Real- und Imaginärteil: Bei Dämpfung ist das gerade die gedämpfte Schwingung aus der Physik (Pohlsches Drehpendel). Plotten

Beispiele aus der SignalverarbeitungMATLAB ist das Standardwerkzeug in der Kommunikationstechnik und Signalverarbeitung. Es gibt zusätzliche Programmpakete für diese Bereiche: Die Signal Processing Toolbox und die Communications Toolbox. Letztere habe ich (fast) nie gebraucht, erstere enhält ein paar Befehle, die ich regelmäßig benutze. Viele nützliche Routinen sind aber schon im MATLAB-Grundpaket enthalten.

Digitale Filter: Das Kommando

>> r=filter(b,a,s)

führt eine digitale Filterung des Signalvektors s durch. Das gefilterte Signal steht in dem Vektor r. In den Vektoren b und a stehen die sogenannten Filterkoeffizienten. Hierzu lernen Sie später an anderer Stelle mehr. Hier nur so viel: Mit

>> a=1>> b=0.1*ones(1,10)

bekommt man ein gleitendes Mittel über 10 aufeinanderfolgende Werte. Schnelle Schwingungen werden damit geglättet. Das Filter hat also ein Tiefpasscharakteristik. Das kann man schön an folgendem Beispiel sehen:

>> t=linspace(0,1);>> s=sin(2*pi*t)+sin(2*pi*20*t);>> plot(t,s); hold on>> r=filter(b,a,s);>> plot(t,r,'r');

- 32 -

Page 33: MATLAB-Seminar Sommer 2011 · Plotten Sie zunächst Real- und Imaginärteil: Bei Dämpfung ist das gerade die gedämpfte Schwingung aus der Physik (Pohlsches Drehpendel). Plotten

Das Ziegenproblem

In der Wochenzeitung DIE ZEIT fand ich in den Weihnachtstagen Folgendes:

Deutschland ist eine gespaltene Nation, und das seit gut einem Dutzend Jahren. Das heißt, gespalten ist jener Teil der Nation, der das »Ziegenproblem« kennt. Das Problem besitzt zwei Lösungen, und diese teilen das Publikum in zwei Lager. Zur Rekapitulation: Die Sache trägt sich in einer Spielshow zu. Der Kandidat tritt vor drei verschlossene Türen. Hinter einer wartet sein Gewinn, ein Auto. Die Nieten sind, nun ja, die beiden Ziegen hinter den anderen zwei Türen. Der Kandidat entscheidet sich für eine der Türen – sie wird aber noch nicht geöffnet. Stattdessen öffnet der Conférencier eine andere Tür, hinter der eine Ziege meckert, und nun fragt er: »Bleiben Sie bei ihrer Wahl, oder wollen Sie wechseln?«http://www.zeit.de/2004/51/N-Ziegenproblem_neu

Man sollte es nicht glauben, aber daran erhitzen sich die Gemüter derart, dass es sogar ein Diskussionsforum zu dem Thema gibt:

http://apollo.zeit.de/kommentare/index.php?km_id=127

Natürlich gibt es nur eine richtige Lösung, aber ich musste doch eine Weile überlegen, bis mir diese auch intuitiv richtig klar war.

Manche Leute brauchen aber eine Computersimulation, bis sie überzeugt sind. Schreiben Sie für diese ein MATLAB-Programm, das dieses Szenario häufig (sagen wir: Eine Million mal) durchspielt und zählen Sie, wie oft der „Wechsler“ und wie oft der „Nicht-Wechsler“ Erfolg hat.

Hinweis: Haben Sie diesmal keine Hemmungen, Schleifen oder IF-Anweisungen zu verwenden.

- 33 -