m kap06 graphik

47
6. Graphik Gewaltige Datenmengen - wiewohl genauestens einen Vorgang beschreibend oder Resultat peinlichst genauer Messungen - sind Ergebnis einer detaillierten Analyse (zumindest hofft man das), haben aber den Nachteil, sehr schnell unübersichtlich zu sein. Die eigentliche (gesuchte) Aussage der Analyse geht sehr schnell verloren - oder man findet sie gar nicht erst 1 . Um Datenmengen verständlich darzustellen, müssen sie in eine Form gebracht werden, mittels derer man vergleichsweise einen Überblick erhält und so relevante von irrelevanten Daten unterscheiden kann. Ein Mittel ist die graphische Darstellung (nicht umsonst heißt es ja auch Datenverarbeitung!). Schon aus der Schule kennt man das leidige Problem, über eine gegebene Funktion eine Aussage treffen zu müssen, um sie zu charakterisieren: Existenz und Angabe von Nullstellen, Extrema, Wendepunkte, Asymptoten, Polstellen, hebbare Lücken, Symmetrie oder auch nur ganz einfach der Verlauf der Kurve in einem bestimmten Intervall. Liegt die Funktion im Falle einer Unabhängigen und einer Abhängigen in gezeichneter Form vor, genügt schon ein einziger Blick auf den Graphen, um signifikante Aussagen machen zu können. Mit MATLAB lassen sich nicht nur komplexe Rechnungen mit Vektoren und Matrizen bewältigen, sondern auch Daten graphisch darstellen. Die wichtigste Anweisung heißt plot(x,y). Sie erzeugt ein Graphikfenster - wie im nachfolgenden Beispiel zu sehen. 1 Berümte Redewendung in wissenschaftlichen Arbeiten: „Unter den mannigfaltigen Datenmengen wurden die folgenden ausgewählt“ bedeutet in Wahrheit: „Der Rest ergab erst recht keinen Sinn.“ 1

Upload: anonymous-q34hvus

Post on 11-Jul-2016

247 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: M Kap06 Graphik

6. Graphik

Gewaltige Datenmengen - wiewohl genauestens einen Vorgang beschreibend oder Resultat

peinlichst genauer Messungen - sind Ergebnis einer detaillierten Analyse (zumindest hofft man

das), haben aber den Nachteil, sehr schnell unübersichtlich zu sein. Die eigentliche (gesuchte)

Aussage der Analyse geht sehr schnell verloren - oder man findet sie gar nicht erst1. Um

Datenmengen verständlich darzustellen, müssen sie in eine Form gebracht werden, mittels derer

man vergleichsweise einen Überblick erhält und so relevante von irrelevanten Daten unterscheiden

kann. Ein Mittel ist die graphische Darstellung (nicht umsonst heißt es ja auch Datenverarbeitung!).

Schon aus der Schule kennt man das leidige Problem, über eine gegebene Funktion eine Aussage

treffen zu müssen, um sie zu charakterisieren: Existenz und Angabe von Nullstellen, Extrema,

Wendepunkte, Asymptoten, Polstellen, hebbare Lücken, Symmetrie oder auch nur ganz einfach der

Verlauf der Kurve in einem bestimmten Intervall. Liegt die Funktion im Falle einer Unabhängigen

und einer Abhängigen in gezeichneter Form vor, genügt schon ein einziger Blick auf den Graphen,

um signifikante Aussagen machen zu können.

Mit MATLAB lassen sich nicht nur komplexe Rechnungen mit Vektoren und Matrizen bewältigen,

sondern auch Daten graphisch darstellen.

Die wichtigste Anweisung heißt

plot(x,y).

Sie erzeugt ein Graphikfenster - wie im nachfolgenden Beispiel zu sehen.

1 Berümte Redewendung in wissenschaftlichen Arbeiten: „Unter den mannigfaltigen Datenmengen wurden die

folgenden ausgewählt“ bedeutet in Wahrheit: „Der Rest ergab erst recht keinen Sinn.“

1

Page 2: M Kap06 Graphik

Man muß allerdings mitunter danach suchen - es ist möglicherweise von anderen Fenstern verdeckt.

Dieses Fenster enthält die Graphen der Funktionen y1(x) = cos(50⋅x) und y2(x) = 12⋅x+1 im

Intervall [-0.01; +0.01] - es diente in einem anderen Zusammenhang für die Ermittlung eines

Startwertes für das Newton-Verfahren der Funktion y(x) = cos(50⋅x) + 12⋅x + 1; der Schnittpunkt er

Graphen von y1 und y2 (bei x = 0.085) wurde dann als solcher gewählt.

Bei der Erstellung eines Graphen greift MATLAB auf eine Wertetabelle zurück, die mühselig von

Hand erstellt ja auch schon in manchen trüben Schultagen Ausgangspunkt für das Zeichnen eines

Graphen war.

Um eine Wertetabelle für eine Funktion der Gleichung y = f(x) zu erstellen, braucht man also eine

Anzahl Argumentwerte für xi und die dazugehöigen errechneten yi = f(xi). Mit anderen Worten: es

muß ein Vektor =(xxr 1, x2, .... xn) mit einer bestimmten Anzahl von n Elementen erstellt werden,

und von jedem Element xi der dazugehöige Funktionswert yi = f(xi) bestimmt werden. Dies ergibt

dann den Ergebnisvektor )(xfy rr= .

2

Page 3: M Kap06 Graphik

Daher noch eine kurze Wiederholung über die Erstellung eines Vektors:

explizite Vorbesetzung

die Elemente werden in eckigen Klammern notiert und zeilenweise geschrieben; die Elemente

sind dabei durch Leerzeichen voneinander zu trennen

Beispiel x = [-0.1 –0.05 0 0.05 0.1]

Vorbesetzung mit Schleife variable = Anfangswert : Schrittweite : Endewert

Mit dem Anfangswert beginnend wird auf diesen die Schrittweite hochgezählt, so lange die

Summe kleiner oder gleich dem Endewert ist. Dies setzt natürlich voraus, daß der Anfangswert

kleiner als der Endewert ist.

Beispiel: x = -0.1 : 0.05 : 0.1

(die Leerzeichen vor und hinter dem Doppelpunkt sind nicht notwendig, aber können die

Lesbarkeit erhöhen).

Einfache Beispiele mit Befehl plot

Wir wollen nun einmal die Sinus-Funktion in eben diesem Intervall zeichnen.

Die Funktion sin operiert elementweise auf einem Vektor; daher sind hier die Anweisungen recht

einfach: x = -0.1 : 0.05 : 0.1; y = sin(x); plot(x, y)

3

Page 4: M Kap06 Graphik

plot(x, y) verbindet benachbarte Punkte durch eine Gerade. Dies sind

xi yi

-0.10 -0.0998

-0.05 -0.0500

0.00 0.0000

0.05 0.0500

0.10 0.0998

4

Page 5: M Kap06 Graphik

Sehr beeindruckend (überzeugend?) sieht das Resultat nun wirklich nicht aus. Dies liegt allerdings

nicht an MATLAB, sondern an den etwas unglücklich gewählten Parametern: insgesamt lagen nur

fünf Stützwerte vor (siehe obige Tabelle), die mittels Geraden verbunden wurden; das Intervall, in

dem gezeichnet wurde, umfaßt auch nur den kleinen Ausschnitt um den Koordinatenursprung, wo

der Sinus in der Tat annähernd die Steigung 1 hat. Daher ist eine Modifikation der Parameter sicher

sinnvoll.

Erweitern wir daher das Intervall auf [-2π, 2π] und verfeinern die Schrittweite auf 0.01.

x = -2*pi : 0.01 : 2*pi; y = sin(x); plot(x, y)

5

Page 6: M Kap06 Graphik

Das Ergebnis sieht in der Tat überzeugender aus.

Deutlich ist jetzt die bekannte Sinuskurve zu erkennen.

Bevor wir Verfeinerungen und weitere Funktionalitäten betrachten, zunächst Warnung vor einer

Falle.

6

Page 7: M Kap06 Graphik

Wir wollen den Graphen einer Parabel ausgeben: y = ½⋅x².

Wir geben ein: x = -4 : 0.1 : 4 y = x*2;

und an dieser Stelle erscheint eine Fehlermeldung über nicht zusammenpassende Matrizen!

Dasselbe Resultat hätten wir erhalten bei y = x^2;

Der Grund ist einfach:

das Argument x ist ein Vektor, also keine einfache Variable! Die Operation „^“ bzw. „*“ wird als

Verknüpfung auf Vektoren interpretiert - in diesem Fall als Matrizenmultiplikation.

Stattdessen soll aber die Verknüpfung wie bei der Sinus-Funktion komponentenweise erfolgen.

Bereits im Kapitel über Vektoren lernten wir kennen, daß dies mit einem vorangestellten Punkt

erreicht wird.

Also x = -4 : 0.1 : 4 y = x.^2; (oder y = x.*x;) plot(x, y)

7

Page 8: M Kap06 Graphik

MATLAB beschwert sich nicht und bringt folgende formschöne Graphik auf den Bildschirm:

Also:

bei Verknüpfungen der Grundrechenarten *, /, ^ immer darauf achten, daß diese komponentenweise

ausgeführt werden!2

2Die Rechenarten + und - sind komponentenweise definiert; ebenso ist die skalare Multiplikation (also z.B. 2*x)

komponentenweise definiert. Hingegen * und / nicht!

8

Page 9: M Kap06 Graphik

Der allgemeine plot-Befehl ist sehr vielseitig. help plot

bringt folgende Erklärungen auf den Bildschirm:

PLOT Linear plot. PLOT(X,Y) plots vector Y versus vector X. If X or Y is a matrix, then the vector is plotted versus the rows or columns of the matrix, whichever line up. If X is a scalar and Y is a vector, length(Y) disconnected points are plotted. PLOT(Y) plots the columns of Y versus their index. If Y is complex, PLOT(Y) is equivalent to PLOT(real(Y),imag(Y)). In all other uses of PLOT, the imaginary part is ignored. Various line types, plot symbols and colors may be obtained with PLOT(X,Y,S) where S is a character string made from one element from any or all the following 3 columns: b blue . point - solid g green o circle : dotted r red x x-mark -. dashdot c cyan + plus -- dashed m magenta * star y yellow s square k black d diamond v triangle (down) ^ triangle (up) < triangle (left) > triangle (right) p pentagram h hexagram For example, PLOT(X,Y,'c+:') plots a cyan dotted line with a plus at each data point; PLOT(X,Y,'bd') plots blue diamond at each data point but does not draw any line. PLOT(X1,Y1,S1,X2,Y2,S2,X3,Y3,S3,...) combines the plots defined by the (X,Y,S) triples, where the X's and Y's are vectors or matrices and the S's are strings. For example, PLOT(X,Y,'y-',X,Y,'go') plots the data twice, with a solid yellow line interpolating green circles at the data points. The PLOT command, if no color is specified, makes automatic use of the colors specified by the axes ColorOrder property. The default ColorOrder is listed in the table above for color systems where the default is blue for one line, and for multiple lines, to cycle through the first six colors in the table. For monochrome systems, PLOT cycles over the axes LineStyleOrder property. PLOT returns a column vector of handles to LINE objects, one handle per line. The X,Y pairs, or X,Y,S triples, can be followed by parameter/value pairs to specify additional properties of the lines.

So kann also die Form der Linienführung und deren Farbe geändert werden!

9

Page 10: M Kap06 Graphik

plot(x, y, '*r')

zeichnet also die Kurve statt mit Linienzug und Standardfarbe blau mit dem Sternchen in rot!

ACHTUNG!

Es darf nur das einfache Hochkomma ' zum Einschließen der Zeichenkette verwendet werden!

Benutzt man " oder ` oder ´, so erhält man eine Fehlermeldung.

Nachfolgend die Darstellung einer Funktion in Parameterdarstellung also in der Form

x = x(t)

y = y(t)

Als Beispiel dient eine sogenannte Lissajous-Figur3:

x = sin (2t)

y = cos (t) für 0 ≤ t ≤ 2π.

Es werden nur x und y graphisch dargestellt; t als Parameter hat (mitunter) eine geometrische

3 die allgemeine Form der nach J.A. Lissajous benannten Figuren lautet x(t) = A1⋅sin(ω1⋅t), y(t) = A2⋅cos(ω2⋅t+ϕ), t≥0.

Die Gestalt der Bahnkurven hängt vom Verhältnis ω1:ω2 der Kreisfrequenzen sowie von der Phasendifferenz α ab. Ist ω1:ω2 rational, so ist die Bahnkurve eine sogenannte algebraische Kurve und geschlossen; die Schwingung ist periodisch. Ist ω1:ω2 irrational, so ist die Bahnkurve nicht geschlossen und kommt jedem Punkt des Rechtecks |x|≤ A1, |y|≤A2 beliebig nahe; die Schwingung ist nicht periodisch.

10

Page 11: M Kap06 Graphik

Bedeutung wie Winkel zwischen x-Achse und Verbindungsgeraden zwischen Ursprung und

Bahnpunkt; also werden zwar drei Vektoren berechnet, aber nur zwei zum Zeichnen benötigt.

Nachfolgend die Befehlsfolge in MATLAB

Die ausgegebene Bahnkurve hat das Aussehen:

Einfügen eines Rastergitters in die Graphik

Zur genaueren Bestimmung von Bahnpunkten kann ein Rastergitter in die Graphik eingefügt

11

Page 12: M Kap06 Graphik

werden. Der dazugehörige Befehl lautet ganz einfach:

grid;

Beispiel für eine weitere Lissajous-Figur:

x(t) = 4⋅cos (3⋅t)

⎟⎠⎞

⎜⎝⎛ +⋅⋅=

82cos5)( πtty

Kommandofolge: t = 0 : 0.1 : 2*pi; x = 4 * cos(3*t); y = 5 cos( 2*t + pi/8); plot(x, y); grid; bzw. im Kommandofenster:

dazu wird dann im Graphikfenster folgende Lissajous-Figur ausgegeben (wie zu ersehen, war die

Schrittweite 0.1 bei Zeichnungen der Kurve in den Ecken des Rechtecks offensichtlich noch zu

grob - man erkennt deutlich die Verbindung mittels einer Linie von einem berechneten

Kurvenpunkt zum nächsten):

12

Page 13: M Kap06 Graphik

Beschriftung einer Graphik

Die Koordinatenachsen werden mit xlabel und ylabel beschriftet. Der Text der Beschriftung

folgt in Klammern und einfache Hochkomma eingeschlossen.

Also xlabel('Text1') ylabel('Text2')

Die Überschrift im Graphikfenster wird mit titel gesetzt. Der Text der Überschrift folgt wie bei

xlabel und ylabel in Klammern und einfaches Hochkommata eingeschlossen.

Also title('Überschrift')

Text innerhalb der Graphik wird mit text eingegeben: text(Position x, Position y, 'Text')

Die ersten beiden Parameter sind Positionen bzgl. der x- bzw. y-Achse, geben also an, wo innerhalb

der Graphik (durch das Koordinatensystem bestimmt) der Text beginnt. Der eigentliche Text ist in

einfaches Hochkommata eingeschlossen als dritter Parameter anzugeben.

Als Beispiel lassen wir die Funktion y(t) = t⋅sin²(t) ausgeben.

13

Page 14: M Kap06 Graphik

Kommandofolge: x = -2*pi : 0.1 : 2*pi; y = x.*sin(x).^2; plot(x, y, 'r'); grid; xlabel('Zeit'); ylabel('Spannung'); title('Abbildung 1'); text(-3, 1.5, 'y = t*sin(t)^2');

im Kommandofenster:

Man achte bitte insbesondere auf die Punkte vor dem Multiplikationszeichen * bei der Berechnung

des Vektors(!) y, die anzeigen, daß keine Matrizenmultiplikation durchgeführt werden soll (was

ohnehin nicht möglich ist), sondern eine komponentenweise Multiplikation auf dem Vektor y.

Die Positionierung des Textes kann ein Gefummel darstellen, da er möglicherweise mit der Kurve -

oder in diesem Fall mit dem Rastergitter - kollidiert. Daher ist durchaus überlegenswert, entweder

auf das Rastergitter zuverzichten oder eben auf Text innerhalb der Graphik.

ACHTUNG!

Es ist wichtig, zuerst die Anweisung plot zu geben und anschließend die Kommandos zur

Beschriftung der Graphik! Die Beschriftung wird nämlich immer in die bereits bestehende Graphik

eingefügt. Ein plot-Kommando hingegen leert zuerst das Graphikfenster (mithin auch die eventuell

bereits vorgenommene Beschriftung) und zeichnet die Kurve.

Die aktuelle MATLAB-Version 6.1 stellt übrigens Nachbearbeitungs-Tools für die Graphik zur

Verfügung. Diese sind als Menüleiste oberhalb des Graphikfensters eingeblendet. Mittels des nach

14

Page 15: M Kap06 Graphik

rechts weisenden Pfeils können Pfeile eingefügt werden, mittels der Linie durchgezogene Linien

(für die x-Achse durchaus sinnvoll anstelle des Rastergitters).

Dies ist erst einmal die Standardausgabe:

Komplexere Bearbeitungen sind über Menüauswahl „Edit“ möglich.

Beispielsweise erlaubt Edit -> Axes Properties

Änderungen an den Achsen.

Es öffnet sich ein Fenster „Edit properties for axes“

Der Reiter „Style“ erlaubt beispielsweise die Änderung der Größe und des Schrifttyps der

Achsenbeschriftung. Standard ist der Typ „Helvetica“ - es kann aber eine - wie in der Auswahlliste

zu ersehen - andere aus einer gewaltigen Anzahl von Schrifttypen ausgewählt werden. Ist das

Kästchen „Immediate apply“ gesetzt (ganz unten im Fenster - ist eigentlich standardmäßig

gesetzt), werden die gemachten Änderungen sofort im Gaphikfenster umgesetzt.

Der Reiter „Scale“ erlaubt unter anderem das Ein- bzw. Ausblenden des Rastergitters

15

Page 16: M Kap06 Graphik

(Kontrollkästchen „Grid Show“ ist gesetzt bzw. nicht gesetzt).

Klickt man einen eingegebenen Text im Graphikfenster an und geht dann

„Edit“ -> „Current Object Properties“ (oder direkt rechte Maustaste in die

Auswahlzeile „Properties“), kann auch dieser Text nachträglich bearbeitet werden:

es öffnet sich das Fenster „Edit properties for text“.

der Reiter „Text“ läßt Änderungen am Texttyp zu. Standard ist (immer noch „Helvetica“) - hier

wurde aus Jux und Dollerei (damit man mal ein paar Änderungen sieht) „Bookman Old Style“

gewählt.

Diese Änderung wird auch sofort in der aktuellen Graphik am ausgewählten Text umgesetzt, wenn

das Kontrollkästchen „Immediate apply“ gesetzt ist - die anderen Texte bleiben von dieser

Änderung unberührt.

16

Page 17: M Kap06 Graphik

Unter dem Reiter „Alignment“ kann die Positionierung des Textes modifiziert werden:

17

Page 18: M Kap06 Graphik

In diesem Beispiel wurde sie - damit man etwas sieht - weit nach links gerückt.

Nach den Änderungen sieht dann der Inhalt des Graphikfensters so aus:

Man probiere die unterschiedlichen Möglichkeiten am besten selbst aus.

der Befehl linspace - Vorgabe der Anzahl der Datenpunkte

Bei Besetzen des Komponenten des Argumentvektors mit einer Schleifenanweisung der Form x = Anfangswert : Schrittweite : Endewert

ist der mittlere Parameter die Angabe der Schrittweite. Mittels

eDatenpunktderAnzahlteSchrittwei

tAnfangswerEndewert=

läßt sich ausrechnen, wieviele Komponenten der Vektor enthält bzw. mittels Linie graphisch

verbunden werden.

Es gibt ein Kommando zum Besetzen eines Vektors, das Anfangs- und Endewert entgegennimmt

und zusätzlich anstatt der Schrittweite die Anzahl der Bahnpunkte. Dies ist das Kommando

18

Page 19: M Kap06 Graphik

linspace.

Syntax: x = linspace(Anfangswert, Endewert, Anzahl der Bahnpunkte)

Der dritte Parameter kann weggelassen werden. MATLAB setzt dann automatisch Anzahl=100.

Nachfolgend ein Beispiel - wieder einmal eine Lissajous-Figur: t = linspace(0, 2*pi, 250); x = 4*cos(3*t); y = 5*cos(2*t); plot(x, y, 'r'); grid; xlabel('x(t)'); ylabel('y(t)'); title('Lissajous-Figur'); text(-1.5,-2.5, 'x(t)=4*cos(3t)'); text(-1.5,-3.5, 'y(t)=5*cos(2t);

19

Page 20: M Kap06 Graphik

Ausgabe:

Mehrere Funktionen gleichzeitig zeichnen

Dies ist sogar recht einfach durch Erweiterung des plot-Kommandos:

plot(x, y, x, z) zeichnet die Funktion y(x) und z(x) in das gleiche Koordinantensystem.

Beispiel:

Sinus- und Cosinusfunktion in einem gemeinsamen Graphikfenster.

Befehlsfolge: x = linspace(-pi, pi, 50); y = sin(x); z = cos(x); plot(x, y, 'r', x, z, 'b'); title('Sinus- und Cosinus-Funktion'); xlabel('x'); ylable('y');

Im Kommandofenster hat dies dann das Aussehen:

20

Page 21: M Kap06 Graphik

Und die Ausgabe im Graphikfenster:

Bei der Ausgabe in das Graphikfenster wurde noch nachträglich das Achsenkreuz und die

Beschriftung innerhalb des Fensters hinzugefügt.

Der Befehl hold

Es gibt noch eine zweite Möglichkeit, mehrere Funktionen in ein und dasselbe Graphikfenster

zeichnen zu lassen - den Befehl hold.

Er bewirkt, daß die aktuelle Graphik im Fenster festgehalten wird, so daß bei allen nachfolgenden

21

Page 22: M Kap06 Graphik

plot-Kommandos jeweils eine die neue Graphik zur alten in dasselbe Achsenkreuz hinzugefügt

wird. Der Befehl hold off beendet diese Funktion.

Sinnvoll wird diese Funktion bei stückweisem Zeichnen einer Funktion.

Betrachten wir das Beispiel y = tan(x).

Bekanntlich hat der Tangens bei ½⋅π + k⋅π Polstellen (k∈⎫). Lassen wir MATLAB ohne

Berücksichtung dieses Sachverhalts die Kurve des Tangens zeichnen, kommt ein etwas

merkwürdiges Resultat bei heraus:

Das Graphikfenster sieht dann so aus:

22

Page 23: M Kap06 Graphik

Dies ist nicht allzu verwunderlich, da bei bei einem Argumentwert um die jeweilige Polstelle herum

einmal der Funktionswert sehr groß und dann sehr klein ist - und diese beiden werden mit einer

Linie verbunden. Dies führt zu obiger Darstellung.

Wir lassen die Funktion daher stückweise zeichnen, nämlich in den Intervallen

[-π, -½⋅π[,

]- ½⋅π, ½⋅π[ und

] ½⋅π, π].

Die Befehlsfolge sieht so aus: >> %Ausgabe Tangens - in drei Plotaufrufen >> %erster Abschnitt [-pi, -pi/2] >> x = -pi : 0.1 : -pi/2-1e-01; >> y = tan(x); >> plot(x,y); >> hold; Current plot held >> %zweiter Abschnitt [-pi/2, pi/2] >> x = -pi/2+1e-01 : 0.1 : pi/2 - 1e-01; >> y = tan(x); >> plot(x, y);

23

Page 24: M Kap06 Graphik

>> %dritter Abschnitt [pi/2, pi] >> x = pi/2 + 1e-01 : 0.1 : pi; >> y = tan(x); >> plot(x, y); >> title('Graph des Tangens mit Berücksichtigung der Polstellen'); >> xlabel('x'); >> ylabel('y');

bzw. im Kommandofenster:

Nachträglich wurden noch die Koordinatenachsen und Polstellen hinzugefügt und die Skalierung

der Achsen manuell gesetzt („Edit“ -> „Axes Properties“):

(später werden wir noch die Kommandos für das Kommandofenster kennenlernen, mit deren Hilfe

eine Skalierung der Achsen möglich ist).

24

Page 25: M Kap06 Graphik

Und dann ist das stolze Resultat der Mühen ein fast formschöner Tangens:

25

Page 26: M Kap06 Graphik

Darstellung in zwei unterschiedlichen Graphikfenstern

Es ist also möglich, zwei und mehr Kurven in ein und demselben Fenster graphisch darzustellen.

Ebenso ist es möglich, das Fenster in zwei (und mehr) zu unterteilen und in jedes Unterfenster eine

(oder mehrere) Graphen zu zeichnen.

Der Befehl zur Unterteilung lautet subplot(m, n, aktuelles Unterfenster)

Die Parameter sind natürliche Zahlen, wobei festgelegt ist

m: Anzahl Unterfenster in vertikaler Richtung

n: Anzahl Unterfenster in horizontaler Richtung

aktuelles Unterfenster: in welches der m⋅n Unterfenster gezeichnet werden soll. Gezählt wird

zeilenweise von links oben bis rechts unten (analog der Numerierung der Indizes einer Matrix).

Als harmloses Beispiel für zwei übereinander befindliche Unterfenster:

Der Sinus wird im oberen, der Cosinus im unteren Fenster gezeichnet.

Also ist m = 2, n = 1.

Die Befehlsfolge lautet: >> %Ausgabe zweier Graphen in zwei getrennte Unterfenster >> x = linspace(-pi, pi, 50); >> y = sin(x); z = cos(x); >> %erstes Unterfenster >> subplot(2, 1, 1); plot(x, y); >> xlabel('x'); ylabel('y'); title('Sinus-Funktion'); >> %zweites Unterfenster >> subplot(2, 1, 2); plot(x, z); >> xlabel('x'); ylabel('y'); title('Cosinus-Funktion');

bzw. im Kommandofenster:

Alle auf subplot(2,1,2) nachfolgenden Befehle bis ausschließlich subplot(2,1,2) sind dem

26

Page 27: M Kap06 Graphik

ersten Unterfenster zugeordnet. Entsprechend werden alle auf subplot(2,1,2) nachfolgenden

Befehle dem zweiten Unterfenster zugeordnet. Auf diese Weise „weiß“ das Programm, welche

Fenster es womit beschriften soll.

Wie zu ersehen, kommen sich Beschriftung des ersten mit dem zweiten Teilfenster ins Gehege. Ein

mitunter ärgerlicher Nebeneffekt.

Ein völlig neues Graphikfenster zusätzlich zu einem bereits bestehenden öffnet man mit dem Befehl

figure.

Darstellung in Polarkoordinaten

Ganz beliebt sind Funktionen, deren Gleichung nicht wie bisher in den bekannten kartesischen,

sondern in Polarkoordinaten gegeben sind, d.h. Funktionen mit der Gleichung

r(ϕ) = f(ϕ)

z.B.

r(ϕ) = sin(ϕ)⋅cos(ϕ)

Glücklicherweise zeigt sich MATLAB davon vergleichsweise wenig beeindruckt und zeichnet auch

die Graphen solcher Funktionen (und Kurven). Der Befehl dazu lautet:

polar(phi, r),

27

Page 28: M Kap06 Graphik

wobei phi das Argument - also i.a. der Winkel im Bogenmaß - ist und r der dazugehöige Radius.

Ansonsten ändert sich nicht viel.

phi = 0 : 0.1 : 2*pi; r = sin(phi) .* cos(phi); polar(phi, r); title('Darstellung in Polarkoordinaten');

Im Kommandofenster:

Und dann die Ausgabe:

Skalierung der Achsen

Nicht immer ist die automatische Wahl der Größenodnung, die MATLAB zur Dastellung einer

28

Page 29: M Kap06 Graphik

Kurve trifft, die Beste. Wir hatten ein solches Problem schon einmal bei Darstellung der Tangens-

Funktion erlebt und uns mit nachträglicher Bearbeitung der Achsengößen über „Edit“ -> „Axes

Properties“ beholfen. Es gibt jedoch Befehle, die die Skalierung der Achsen direkt aus dem

Kommanofenster heraus vornehmen.

Ein solcher Befehl lautet:

axis([xmin, xmax, ymin, ymax]).

Die Funktion wird dann im Bereich xmin ≤ x ≤ xmax und ymin ≤ y ≤ ymax dargestellt.

Greifen wir wieder auf das Beispiel des Tangens zurück.

Die Befehlsfolge x = 0 : 0.01 : pi/2; y = tan(x); plot(x, y);

hat wegen der Polstelle bei ½π sehr große Werte und daher einen großen Bereich für die

Bemaßung der y-Achse gewählt.

Eine andere Bemaßung ist daher sinnvoll: x = 0 : 0.01 : pi/2; y = tan(x); plot(x, y);

29

Page 30: M Kap06 Graphik

axis([0, pi/2, 0, 15]);

Und das ergibt dann

Gleiche Skalierung erreicht man mit axis equal

Die ursprüngliche Skalierung wird mit axis normal

wiederhergestellt.

Logarithmische Skalierung der Achse

30

Page 31: M Kap06 Graphik

Bei gewissen Funktionen ist es von Vorteil, im kartesischen Koordinantensystem statt der

äquidistanten Unterteilung eine logarithmische Skalierung zu verwenden. Bekanntlich ist die

Darstellung der Funktion y(x) = ea·x+b bei logarithmisch unterteilter y-Achse eine Gerade;

umgekehrt kann man bei einer Geraden als Graphen bei logarithmisch unterteilter y-Achse darauf

schließen, daß die dazugehörige Funktion eine Exponentialfunktion sein muß.

Das Kommando für Darstellung der Funktion bei logarithmisch skalierter y-Achse ist

semilogy.

Es wird wie plot verwendet.

Betrachten wir das Beispiel y(x) = 3·e-0.5·x.

Einmal stellen wir die Funktion in normalen, das zweite Mal in logarithmisch skalierter y-Achse

dar.

Befehlsfolge: >> %Verwendung logarithmischer Skalierung >> x = linspace(0, 10, 50); >> y = 3*exp(-0.5*x); >> %Darstellung in normalen kartesichen Koordinaten >> subplot(2, 1, 1); plot(x, y); >> grid; >> title('normale kartesische Koordinaten'); >> %Darstellung mit logarithmisch skalierter y-Achse >> subplot(2, 1, 2); semilogy(x, y); >> grid; >> title('logarithmisch unterteilte y-Achse');

im Kommandofenster

(das Zeichnen des Rastergitters für die erste Darstellung fehlt hier - es wurde im Unterfenster

nachträglich hinzugefügt).

Als Ausgabe erhält man:

31

Page 32: M Kap06 Graphik

Der Vollständigkeit wegen sei noch erwähnt, daß der Befehl semilogx

analog zu einer logarithmisch unterteilten x-Achse führt.

Und daß loglog

eine logarithmische Skalierung beider Achsen zur Folge hat.

Darstellung komplexer Bahnkurven

Auch wenn sie sich nicht großer Beliebtheit erfreuen, sei auch ihnen noch eine kurze

Randbemerkung gewidmet: den komplexen Zahlen C.

Wir erwähnten zwar die Grundrechenarten und auch einige höhere Rechenarten wie die Bildung

des Logarithmus, nicht jedoch den Funktionenbegriff einer komplexen Funktion

f: C → C, z = a + b⋅i → f(z) = u + i⋅v

Da sowohl Argument- als auch Funktionswert über Real- und Imaginärteil verfügen, ist eine

graphische Darstellung nur im vierdimensionalen Achsenkreuz möglich, also schlechthin

unmöglich.

Man hat sich daher auf folgende Darstellungsform geeinigt:

Man stellt im gleichen ebenen Achsensystem, das die Gaußsche Zahlenebene repräsentiert

32

Page 33: M Kap06 Graphik

(immerhin wissen wir ja mittlerweile, daß C ≅ R² ist) ausgewählte Punkte (a, b) des Argumentwerts

z = a + b⋅i dar und im gleichen System die Punkte (u, v) der dazugehörigen Funktionswerte

f(a + b⋅i) = u + i⋅v.

Und studiert dann dabei die Veränderungen, die die Bahnkurven der Argumentwerte unter der

Funktion f durchlaufen (im Falle einer linearen Funktion f(z) = c⋅z + d, c, d ∈ R spricht man auch

von linearer Transformation).

Beispiel: Das Joukovoski-Profil

Beispielsweise beschreibt die Funktion f(t) = r⋅eit + xM + yM⋅i für t ∈ ⎭, konstante r, xM, yM ∈ R

einen Kreis mit Radius r und Mittelpunkt (xM, yM). Man betrachtet also für ein vorgegebenes r ∈ R

und einen vorgegebenen Punkt (xM, yM) die Menge von komplexen Zahlen

X = {a + b⋅i ∈ C | ∃t∈⎭: a + b⋅i = r ⋅eit } und wählt als komplexe Funktion aus:

zzf 1)( = oder

zzzf 1)( += . Geometrisch lassen sich die Bildpunkte f(z) für z∈C konstuieren -

diese Konstruktion nennt sich Inversion am Einheitskreis (es spielt dabei der Kathetensatz von

Euklid eine Rolle). Transformiert man die obige Menge X mit der zuletzt genannten Funktion,

entsteht eine Figur, die an den Querschnitt einer Tragfläche eines Flugzeugs erinnert, das sog.

„Joukovski-Profil“. Man kann in der Tat die Strömungsverhältnisse an einem solchen Profil

studieren mit Hilfe verhältnismäßig einfacher mathematischer Werkzeuge wie der Inversion eines

Kreises am Einheitskreis.

Wir werden diesen Prozeß mit MATLAB graphisch darstellen.

Dazu läßt sich der bereits bekannte Befehl plot verwenden. Er kann auch komplexe Werte

entgegennehmen. Besteht die Argumentliste lediglich aus einer (komplexen) Variable z (einzelner

Wert oder Vektor), wird diese aufgespalten in Real- und Imaginärteil und analog gezeichnet wie

plot(real(z), imag(z)).

So zeichnet beispielsweise die Befehlsfolge t = 0 : pi/50 : 2*pi; plot(exp(i*t)); den Einheitskreis.

Für die Inversion am Einheitskreis werden wir drei Bahnkurven zeichnen lassen:

1. den Einheitskreis

33

Page 34: M Kap06 Graphik

2. den zu invertierenden Kreis mit Radius 1.2 und Mittelpunkt (0.2; 0.2)

3. der invertierte Kreis (das Joukovski-Profil).

Nachfolgend die Befehlsfolge:

bzw. einmal mitprotokolliert: >> %Darstellung komplexe Bahnkurven >> %hier Inversion am Einheitskreis >> %Argumentwerte >> t = 0 : pi/100 : 2*pi; >> %Erstellen Einheitskreis >> einheit = exp(i*t); >> plot(einheit, 'r'); >> axis equal; >> hold; Current plot held >> %Erstellen Kreis mit Mittelpunkt (0.2; 0.2) und Radius 1.2 >> u = 1.2*exp(i*t)+0.2+0.2*i; >> plot(u, 'b'); >> %Erstellen der Inversionskurve >> v = u + 1./u; >> plot(v, 'g');

34

Page 35: M Kap06 Graphik

>> %x-Achse ziehen >> xachse = [-2.8 2.6]; >> yachse = [0 0]; >> plot(xachse, yachse, 'k'); >> %y-Achse ziehen >> xachse = [0 0]; >> yachse = [-2 2]; >> plot(xachse, yachse, 'k'); >> %Beschriftung >> text(-2.35, 1.1, 'rot: Einheitskreis'); >> text(-2.35, 1.3, 'blau: zu invertierender Kreis'); >> text(-2.35, 1.5, 'grün: Joukovski-Profil'); >> title('Inversion am Einheitskreis'); >> xlabel('Realteil'); >> ylabel('Imaginärteil');

Das Ergebnis ist dann folgendes Graphikfenster:

die Textverteilung innerhalb entspricht nicht der Befehlfolge (und die Farbgebung schon gar nicht);

sie wurde manuell nachbearbeitet.

Dreidimensionale Darstellungen

Visualisierung räumlicher Zusammenhänge ist mit MATLAB möglich. Es enthebt einem der

mühseligen Arbeit, sich selbst durch den Dschungel von Überschneidungen und Verdeckungen

eines räumlichen Objekts schlagen zu müssen, das nur als Datensalat vorgegeben ist. Es hilft dem

Prozeß des „Begreifens“ (im wörtlichen Sinne) ungemein.

Wir zeichnen

35

Page 36: M Kap06 Graphik

Kurven im Raum (Befehl plot3)

Flächen im Raum (Befehl meshgrid, surf)

Der Befehl plot3

plot3 nimmt drei Argumente entgegen (und möglicherweise ein viertes für den Stil und Farbe), die

diedrei Koordinaten eines Punktes im Raum repräsentieren:

Sind x, y, z reelle Vektoren, so zeichnet also plot3(x, y, z)

die räumliche Verbindungslinie vom Punkt (x(i-1), y(i-1), z(i-1)) zum Punkt (x(i), y(i), z(i).

Oder, wie es die Hilfe-Funktion help plot3 ausgibt: PLOT3 Plot lines and points in 3-D space. PLOT3() is a three-dimensional analogue of PLOT(). PLOT3(x,y,z), where x, y and z are three vectors of the same length, plots a line in 3-space through the points whose coordinates are the elements of x, y and z. PLOT3(X,Y,Z), where X, Y and Z are three matrices of the same size, plots several lines obtained from the columns of X, Y and Z. Various line types, plot symbols and colors may be obtained with PLOT3(X,Y,Z,s) where s is a 1, 2 or 3 character string made from the characters listed under the PLOT command. PLOT3(x1,y1,z1,s1,x2,y2,z2,s2,x3,y3,z3,s3,...) combines the plots defined by the (x,y,z,s) fourtuples, where the x's, y's and z's are vectors or matrices and the s's are strings. Example: A helix: t = 0:pi/50:10*pi; plot3(sin(t),cos(t),t); PLOT3 returns a column vector of handles to LINE objects, one handle per line. The X,Y,Z triples, or X,Y,Z,S quads, can be followed by parameter/value pairs to specify additional properties of the lines.

Das vorgeschlagene Beispiel wollen wir realisieren:

es handelt sich dabei um eine Parameterfunktion mit drei Argumenten, eine sogenannte

Raumkurve:

f:R → R³, t → (sin(t), cos(t), t)

oder kurz f(t) = (sin(t), cos(t), t)

und ergibt eine Spirale oder Helix.

Die Befehlsfolge:

36

Page 37: M Kap06 Graphik

und das stolze Resultat:

Pro Durchlauf einer Periode 2π steigt sie um die Höhe 2π.

Der Befehl meshgrid

37

Page 38: M Kap06 Graphik

Für Darstellung von Flächen im Raum, deren Gleichung vorgegeben ist - also für die graphische

Darstellung von Funktionen der Art

f: ² → , (x, y) → z = f(x, y)

muß eine Wertetabelle erstellt werden, auf die die Zeichenfunktion von MATLAB zurückgreift.

Bestünde die Aufgabe darin, selber zeichnerisch tätig zu werden, muß man also Paare (xi, yi)

zusammenstellen und damit jeweils den Funktionswert zi = f(xi, yi) berechnen. Hat man also a

Werte xi vorgegeben und b Werte yi, gibt es also a⋅b Paare (xi, yi), von denen der Funktionswert zu

ermitteln ist.

Man erzeugt ein sogenanntes Gitter (xi, yi) von Argumentwerten.

Glücklicherweise ist dieser Prozeß in MATLAB etwas automatisiert. Auf dem Weg dahin hilft der

dazugehörige Befehle meshgrid.

[Matrix A, Matrix B] = meshgrid(Vektor x, Vektor y)

Dieser Befehl transformiert den Vektor x in eine Matrix A, deren Zeilen Kopien von x sind, und

transformiert den Vektor y in eine Matrix B, deren Spalten Kopien von y sind. Die Anzahl der

Zeilen von A ist dabei gleich der Anzahl der Elemente von y; die Anzahl der Spalten von B ist

gleich der Anzahl von Zeilen von x.

MESHGRID X and Y arrays for 3-D plots. [X,Y] = MESHGRID(x,y) transforms the domain specified by vectors x and y into arrays X and Y that can be used for the evaluation of functions of two variables and 3-D surface plots. The rows of the output array X are copies of the vector x and the columns of the output array Y are copies of the vector y. [X,Y] = MESHGRID(x) is an abbreviation for [X,Y] = MESHGRID(x,x). [X,Y,Z] = MESHGRID(x,y,z) produces 3-D arrays that can be used to evaluate functions of three variables and 3-D volumetric plots. For example, to evaluate the function x*exp(-x^2-y^2) over the range -2 < x < 2, -2 < y < 2, [X,Y] = meshgrid(-2:.2:2, -2:.2:2); Z = X .* exp(-X.^2 - Y.^2); mesh(Z) MESHGRID is like NDGRID except that the order of the first two input and output arguments are switched (i.e., [X,Y,Z] = MESHGRID(x,y,z) produces the same result as [Y,X,Z] = NDGRID(y,x,z)). Because of this, MESHGRID is better suited to problems in cartesian space, while NDGRID is better suited to N-D problems that aren't spatially based. MESHGRID is also limited to 2-D or 3-D.

Ist also x = (x(1), x(2), x(3)) = (0; 1; 2) und

38

Page 39: M Kap06 Graphik

y = (y(1), y(2)) = (-1; 0),

so wird die Matrix A das Aussehen haben:

A: x(1) x(2) x(3) 0 1 2

x(1) x(2) x(3) 0 1 2

(also zwei Zeilen (= Anzahl der Elemente von y), die jeweils Kopien von x sind)

und

B: y(1) y(1) y(1) -1 -1 -1

y(2) y(2) y(2) 0 0 0

(also drei Spalten (= Anzahl der Elemente von x), die jeweils Kopien von y sind)

Wie zu ersehen, haben beide Matrizen gleiche Dimensionen. Damit können beide elementweise

verknüpft werden. Die Ergebnismatrix C = A°B enthält dann die Verknüpfung aller Punktepaare

(also z(i, k) = c(i,k ) = a(i, k)°b(i, k) = x(k)°y(i), die dann die eigentlichen Daten für die

Zeichenfunktionen bilden. Sie bilden ein sogenanntes Datengitter („mesh“ = Masche, „grid“ =

Gitter).

C: z(1, 1) z(1, 2) z(1,3) x(1)°y(1) x(2)°y(1) x(3)°y(1)

z(2, 1) z(2, 2) z(2, 3) x(1)°y(2) x(2)°y(2) x(3)°y(2)

Aus der Wertetabelle

39

Page 40: M Kap06 Graphik

x: x(1) x(2) x(3) x(1) x(2) .....

y: y(1) y(1) y(1) y(2) y(2) .....

z: z(1, 1) z(1,2) z(1,3) z(2,3) z(2,2) .....

erfolgt dann die graphische Darstellung.

Es ist also z(i, k) = f(x(i), y(k)).

Man kann unter vier Darstellungsmöglichkeiten wählen:

mesh Netz

meshc Netz und Höhenlinien

surf Fläche

surfc Fläche und Höhenliniene

3D-Graphik-Kommandos

• Der Befehl mesh

erstellt eine 3D-Wiedergabe einer Funktion der Gleichung z = f(x, y) durch sogenannten

Maschenplot oder Drahtmodell - benachbarte Punkte sind durch eine Linie miteinander

verbunden. Ausgewählte Verbindungslinien werden ausgegeben, um den Verlauf der Fläche

zu kennzeichnen.

• Der Befehl meshc

erstellt eine 3D-Wiedergabe einer Funktion der Gleichung z = f(x, y) analog zum Befehl

mesh. Zusätzlich werden auf Höhe der x, y-Ebene die Höhenlinien ausgegeben.

• Der Befehl surf

erstellt eine 3D-Wiedergabe einer Funktion der Gleichung z = f(x, y) durch sogenanntes

Kachelmodell - statt benachbarte Punkte zu verbinden, wurden zwischen diese kleine

Flächenstücke gesetzt. Die graphische Wiedergabe erhält damit den Eindruck einer soliden

Fläche im Raum (surf von „surface“ - Oberfläche) .

• Der Befehl surfc

erstellt eine 3D-Wiedergabe einer Funktion der Gleichung z = f(x, y) analog zum Befehl

surf. Zusätzlich werden auf Höhe der x, y-Ebene die Höhenlinien ausgegeben.

Entsprechend die Erklärungen aus der MATLAB-Dokumentation: MESH 3-D mesh surface.

40

Page 41: M Kap06 Graphik

MESH(X,Y,Z,C) plots the colored parametric mesh defined by four matrix arguments. The view point is specified by VIEW. The axis labels are determined by the range of X, Y and Z, or by the current setting of AXIS. The color scaling is determined by the range of C, or by the current setting of CAXIS. The scaled color values are used as indices into the current COLORMAP. MESH(X,Y,Z) uses C = Z, so color is proportional to mesh height. MESH(x,y,Z) and MESH(x,y,Z,C), with two vector arguments replacing the first two matrix arguments, must have length(x) = n and length(y) = m where [m,n] = size(Z). In this case, the vertices of the mesh lines are the triples (x(j), y(i), Z(i,j)). Note that x corresponds to the columns of Z and y corresponds to the rows. MESH(Z) and MESH(Z,C) use x = 1:n and y = 1:m. In this case, the height, Z, is a single-valued function, defined over a geometrically rectangular grid. MESH(...,'PropertyName',PropertyValue,...) sets the value of the specified surface property. Multiple property values can be set with a single statement. MESH returns a handle to a SURFACE object. MESHC Combination mesh/contour plot. MESHC(...) is the same as MESH(...) except that a contour plot is drawn beneath the mesh. Because CONTOUR does not handle irregularly spaced data, this routine only works for surfaces defined on a rectangular grid. The matrices or vectors X and Y define the axis limits only. SURF 3-D colored surface. SURF(X,Y,Z,C) plots the colored parametric surface defined by four matrix arguments. The view point is specified by VIEW. The axis labels are determined by the range of X, Y and Z, or by the current setting of AXIS. The color scaling is determined by the range of C, or by the current setting of CAXIS. The scaled color values are used as indices into the current COLORMAP. The shading model is set by SHADING. SURF(X,Y,Z) uses C = Z, so color is proportional to surface height. SURF(x,y,Z) and SURF(x,y,Z,C), with two vector arguments replacing the first two matrix arguments, must have length(x) = n and length(y) = m where [m,n] = size(Z). In this case, the vertices of the surface patches are the triples (x(j), y(i), Z(i,j)). Note that x corresponds to the columns of Z and y corresponds to the rows. SURF(Z) and SURF(Z,C) use x = 1:n and y = 1:m. In this case, the height, Z, is a single-valued function, defined over a geometrically rectangular grid. SURF(...,'PropertyName',PropertyValue,...) sets the value of the specified surface property. Multiple property values can be set with a single statement. SURF returns a handle to a SURFACE object. SURFC Combination surf/contour plot. SURFC(...) is the same as SURF(...) except that a contour plot is drawn beneath the surface. Das nachfolgende Beispiel verwendet die vier Graphikbefehle in je einem Unterfenster zur

41

Page 42: M Kap06 Graphik

Darstellung der (äußerst dekorativen) Funktion

( )

100011000

1sin),(

22

22

++

++==

yx

yxyxfz

(der Summand 1000

1 im Nenner soll verhindern, daß durch Null dividiert wird. Dann muß aber für

gleiche Abmessungen auch der Zähler entsprechend angepaßt werden).

Die Befehlsfolge: %Darstellung einer Funktion z=f(x,y) als Fläche im Raum %Erstellung der Datengitter x = -10 : 0.5 : 10; y = x; [xi, yi] = meshgrid(x, y); zi = sin(sqrt(xi.^2+yi.^2) + 0.001)./(sqrt(xi.^2+yi.^2)+0.001); %Darstellung mit Netz subplot(2, 2, 1); mesh(xi, yi, zi); title('Fall 1: Netz (mesh)'); %Darstellung mit Netz und Höhenlinien subplot(2,2,2); meshc(xi, yi, zi); title('Fall 2: Netz und Höhenlinien (meshc)'); %Darstellung der Oberfläche subplot(2, 2, 3); surf(xi, yi, zi); title('Fall 3: Fläche (surf)'); %Darstellung mit Fläche und Höhenlinien subplot(2, 2, 4); surfc(xi, yi, zi); title('Fall 4: Fläche mit Höhenlinien');

Dann ergibt sich folgendes Bild:

42

Page 43: M Kap06 Graphik

Wahl der Blickrichtung auf den Graphen mit view

Mit view(az, el) kann die Blickrichtung auf die 3D-Zeichnung geändert werden.

az gibt den sogenannten Azimutwinkel an,d.h. der Winkel in der x,y-Ebene zur x-Achse, und

el gibt den Höhenwinkel an, d.h. den Winkel über der x,y-Ebene.

Standardwert (wenn also nichts gesetzt): az = -37.5° und el = 30°.

view(3) setzt alles wieder auf den Standard zurück.

Dokumentation aus MATLAB: VIEW 3-D graph viewpoint specification. VIEW(AZ,EL) and VIEW([AZ,EL]) set the angle of the view from which an observer sees the current 3-D plot. AZ is the azimuth or horizontal rotation and EL is the vertical elevation (both in degrees). Azimuth revolves about the z-axis, with positive values indicating counter- clockwise rotation of the viewpoint. Positive values of elevation correspond to moving above the object; negative values move below. VIEW([X Y Z]) sets the view angle in Cartesian coordinates. The magnitude of vector X,Y,Z is ignored. Here are some examples: AZ = -37.5, EL = 30 is the default 3-D view. AZ = 0, EL = 90 is directly overhead and the default 2-D view. AZ = EL = 0 looks directly up the first column of the matrix. AZ = 180 is behind the matrix. VIEW(2) sets the default 2-D view, AZ = 0, EL = 90. VIEW(3) sets the default 3-D view, AZ = -37.5, EL = 30.

43

Page 44: M Kap06 Graphik

[AZ,EL] = VIEW returns the current azimuth and elevation. VIEW(T) accepts a 4-by-4 transformation matrix, such as the perspective transformations generated by VIEWMTX. T = VIEW returns the current general 4-by-4 transformation matrix. VIEW(AX,...) uses axes AX instead of the current axes.

Betrachten wir ein Beispiel:

Der Graph von f(x, y) = x² - y² beschreibt eine Sattelfläche.

Wir lassen sie einmal mit Standard ausgegen, danach mit az = 90° und el = 0° und zu guter Letzt

mit az = 0° und el = 90°.

Befehlsfolge: %Drehung einer Fläche im Raum - der Befehl view %Beispiel Funktion z=x²-y² %Bereitstellung der Daten x = -5:0.1:5; y = x; [xi, yi] = meshgrid(x, y); zi = xi.^2 - yi.^2; %Standardwiedergabe (az = -37.5°, el= 30°) mesh(xi, yi, zi); xlabel('x'); ylabel('y'); zlabel('z'); title('Standardwiedergabe (az = -37.5° el = 30°'); %Blick direkt auf x-Achse figure; mesh(xi, yi, zi); view(90, 0); ylabel('y'); zlabel('z'); title('Blick direkt auf x-Achse (az = 90°, el = 0°)'); %Blick von oben (az = 0°, el = 90°) figure; mesh(xi, yi, zi); view(0, 90); xlabel('x'); ylabel('y'); title('Blick von oben (az = 90°, el = 0°)'); bzw. direkt im Kommandofenster:

44

Page 45: M Kap06 Graphik

Die Standardausgabe (az = -37.5°, el = 30°) hat dann folgendes Aussehen:

die x,y-Ebene erscheint für den Betrachter hochgekippt zu sein, so daß er auf diese sieht (das sind

45

Page 46: M Kap06 Graphik

die 30° = el); sowohl x- als auch y-Achse laufen nicht parallel zur Bildkante, sondern schräg dazu

(da machen sich die az = -37.5° bemerkbar).

Es erscheint eine wunderschöne Sattelfläche, die zu y,z-Ebene hin offen ist.

Ändert man dagegeben Azimut- und Höhenwinkel, so erhält man für az = 90° und el = 0° folgendes

Bild:

Der Blick fällt direkt auf die y,z-Ebene; die x-Achse ist nur noch als Nullpunkt wahrzunehmen, die

x,y-Ebene nur noch in der y-Achse. Der Betrachter sieht also frontal in die Sattelfläche (längs der

x-Achse) hinein.

Und ändert man erneut az = 0° und el = 90°, so betrachtet man die Welt von oben.

46

Page 47: M Kap06 Graphik

Der Betrachter steht jetzt senkrecht über der x,y-Ebene; die z-Achse ist nur noch als Nullpunkt des

Koordinantenschnittpunktes der x- und y-Achse zu sehen. Damit fällt die Blickrichtung direkt von

oben auf dden Sattel. Zur erahnen sind die Höhenlinien x²-y²=const, die Hyperbeln bilden.

Am besten, man probiert die verschiedenen Blickwinkel selber aus.

Zurücksetzen aller Figuren in einem Graphikfenster mit clf reset

Wenn eine graphische Darstellung bereits in einem Fenster gezeichnet worden ist und dieses

Fenster für eine völlig neue Figur benutzt werden soll, setzt clear all

zwar die Inhalte der verwendeten Variablen zurück; neue Zeichenbefehle setzen die Beschriftung

der Überschrift und der Achsen zurück. Jedoch sind nicht automatisch alle Eigenschaften wie

Hintergrundfarbe oder Schriftgröße wieder auf Standard zurückgesetzt worden.

Abhilfe schafft folgendes Kommando:

Das Kommando clf mit der reset Option in der Form clf reset

setzt alle Eigenschaften wieder auf den Standard zurück.

Es gibt noch sehr viele weitere Befehle in Verbind mit einer geeigneten 3D-Darstellung; doch ist man dann gut beraten, die Dokumentation oder andere Kundige zu konsultieren....

47