3D- Plotting

Dreidimensionale Plots mit einer unabhängigen Variablen

Eine dreidimensionale Funktion mit einer unabhänigen Variablen können Sie sich als Flugbahn eines Teilchens im Raum vorstellen.
(x,y,z) = f(t)
Sie haben zuvor bereits das Plotten von zweidimensionalen Kurven betrachtet;
als erste 3D Anwendung erweitern wir dies auf dreidimensionale Kurven. Ganz analog zum plot Befehl funktioniert der plot3 -Befehl.

Wir betrachten die Kurve für z von 0 bis 10*pi deren Verlauf einer Spirale gleicht.

>> z = [0:pi/50:10*pi];
>> x = sin(z);
>> y = cos(z);
>> plot3(x,y,z,'r')
>> axis square;
>> grid on;

x und y sind dabei Funktionswerte von z. Wie in der vorangegangen Aufgabe gesehen ergibt der Plot
x = r*cos(phi), y = r*sin(phi) einen Kreis für phi = 0 bis 360°. Durch die z Komponente bleibt der Kreis nicht mehr auf einer Ebene, sondern wird in die Höhe gestreckt. Die Funktionen überlagern sich sozusagen im dreidimensionalen Raum. Siehe Abbildung plot3.


Dreidimensionale Plots mit zwei unabhängigen Variablen

Eine Funktion mit zwei unabhängigen Variablen können Sie sich wie eine Gebirgsfläche vorstellen, bei der durch x und y der Ort festgelegt wird und z die Höhe angibt.

Um eine Funktion mit zwei Variablen z = f(x,y) darzustellen, müssen Sie zuerst ein zweidimensionales Feld in der xy-Ebene definieren. Dann lassen Sie die Funktion mit ihren Funktionswerten an den Stellen des Feldes (x und y) bestimmen und zeichnen die so entstehende dreidimensionale Funktion.

Ein zweidimensionales Feld in der xy-Ebene ist in MatLab definiert über zwei Vektoren. In dem einen befinden sich die x-Koordinaten aller Punkte im Feld, im anderen alle y-Koordinaten. Als Beispiel definieren Sie ein Feld, dessen x-Werte von -2 bis 2 und dessen y-Werte zwischen -1 und 2 mit dem Abstand 1 variieren.

>> x=-2:2
>> y=-1:2
x =
-2 -1 0 1 2
y =
-1 0 1 2

Nun können Sie mit dem Befehl meshgrid zwei Matrizen erzeugen, die das Gitter bzw. Feld für die zweidimensionale Funktion definiert:

[X,Y]= meshgrid(x,y) transformiert den Definitionsbereich, der von den Vektoren x und y spezifiziert wird, in die Matrizen X und Y, die benutzt werden können, um Funktionen mit zwei Veränderlichen für dreidimensionale Graphen zu entwickeln. Die Zeilen der Matrix X sind Kopien des Vektors x sowie die Spalten der Matrix Y Kopien des Vektors y. Wenn x nun die Länge N und y die Länge M hat, dann haben die Ausgabematrizen X und Y die Dimension MxN.

In dem Beispiel würde sich ergeben: [X,Y] = meshgrid(x,y)
X =
-2 -1 0 1 2
-2 -1 0 1 2
-2 -1 0 1 2
-2 -1 0 1 2
Y =
-1 -1 -1 -1 -1
0 0 0 0 0
1 1 1 1 1
2 2 2 2 2

 

Einander entsprechende Elemente dieser Matrizen stellen also die Koordinaten unserer Gitterpunkte in der xy-Ebene dar.

Nachdem Sie das Gitter mit x und y definiert haben, können Sie diese in eine Funktion einsetzen. Als Beispiel nehmen Sie die Funktion f(x,y)=y*e^(-(x^2+y^2)). Da Sie die Funktion im Anschluss auch zeichnen lassen, ändern Sie für ein schöneres Bild die Intervallabstände in 0.1:

>> x = -2:0.1:2;
>> y = -1:0.1:2;
>> [X,Y] = meshgrid(x,y);
>> z = Y.*exp(-(X.^2+Y.^2));
>> mesh(x,y,z);


Zur Veranschaulichung wollen wir in einem weiteren Beispiel die Funktion z = x*y als Maschenplot (Drahtgitter) über den 15 Gitterpunkten (-2/-1),(-2/0),…,(2/1) von MatLab zeichnen lassen:>> x = -2:1:2 ;
>> y = -1:1:1 ;
>> [xx, yy] = meshgrid(x,y) ;
>> z = xx.*yy

Der Inhalt dieser Matrix z sind gerade unsere Funktionswerte. Nun soll jeder dieser Funktionswerte über "seinem" Gitterpunkt als Punkt dargestellt werden und in X- und Y-Richtung durch Linien mit seinem Nachbarpunkt verbunden werden. Wir erhalten den Maschenplot oder das Drahtmodell der Funktion mit Hilfe des Befehls mesh:

>> mesh( x, y, z )

Das Ergebnis ist auch in Abbildung mesh zu sehen. 

 

Statt die Punkte mit Linien zu verbinden, ist es auch möglich die Punkte mit kleinen Flächenstücken zu verbinden. So kann man ein Kachelmodell erstellen, indem man mesh() durch surf() (surface) ersetzt.

Flaeche.m
x = -2:0.1:2;
y = -1:0.1:1;
[xx,yy] = meshgrid(x,y) ;
z = xx.*yy ;
surf ( x, y, z );
xlabel('x'); ylabel('y') ; zlabel('z');

Hinweis: Da hier der Aufwand zum Tippen immer größer wird, empfiehlt sich die Speicherung in ein Skript und deren wiederholte Ausführung.

Siehe Abbildung surf

Höhenlinien

Sie können mit dem Befehl contour() einen zweidimensionalen Graphen erzeugen, der Ihre dreidimensionale Funktion z = f(x,y) als Höhenlinien ähnlich einer geographischen Karte darstellt. Die Syntax entspricht der Verwendung von surf und mesh.

Flaeche.m
x = -2:0.1:2;
y = -1:0.1:1;
[xx,yy] = meshgrid(x,y) ;
z = xx.*yy ;
contour ( x, y, z );
xlabel('x'); ylabel('y') ; zlabel('z');
 
Das Ergebnis sollte so aussehen wie in Abbildung contour