Grafiken

Einfache Grafiken

Wie du im Praktikum wohl selbst bereits gemerkt hast, wirst du in der Physik oft Grafiken erstellen müssen. Dafür stehen dir verschiedene Funktionen zur Verfügung. Das Grundprinzip ist bei allen gleich. Alle Grafiken bestehen aus Punkten, deren Koordinaten in Vektoren gespeichert sind. Pro Koordinate (x,y,...) übergibst du einen Vektor. Der i-te Punkt wird dann durch die i-ten Einträge der Vektoren gegeben. Ein Beispiel: Folgender Code zeichnet die vier Punkte (0,0), (0,1), (1,0), (1,1)

x = [ 0 0 1 1 ] y = [ 0 1 0 1 ] plot(x, y, '+') axis([-0.2 1.2 -0.2 1.2]) % Achsen anpassen

Das dritte Argument von Plot '+' legt fest, dass die Punkte mit einem + markiert werden sollen. Die letzte Zeile ändert die Achsen, so dass sie jeweils vom -0.2 bis 1.2 gehen. Das erste Zahlen-Paar definiert die X-, das zweite die Y-Achse.

Aufgabe 1

Wenn du im obigen Plot-Befehl das letzte Argument entfernst, werden die Punkte der Reihe nach verbunden. Welchen Buchstaben gibt das? Sortiere die Punkte um, so dass sie ein Z ergeben.

Lösung Anzeigen

% Das Beispiel schreibt ein N x = [ 0 1 0 1 ] Y = [ 1 1 0 0 ]

Funktionen darstellen

Oft wirst du eine bestimmte Funktion darstellen wollen. Auch hier gilt natürlich das gleiche Grundprinzip. Du musst deine Funktion also durch einzelne Punkte darstellen.

x = -2:0.01:2; y = exp(x); plot(x,y)

Du siehst, damit haben wir ex dargestellt. In der ersten Zeile definieren wir die x-Werte (Stützstellen), an denen wir unsere Funktion auswerten wollen. In der zweiten Zeile berechnen wir die dazugehörigen y-Werte und schliesslich stellen wir diese dar.

Aufgabe 2

Mit der Funktion polar(phi, r) kannst du in Polarkoordinaten zeichnen. Der Winkel phi wird dabei in Bogenmass angegeben. Verwende polar um die Funktion
f(t) = t \sin(t), t = {0,..., 12\pi}
in Polarkoordinaten darzustellen. Variiere dabei den Abstand der Stützstellen.

Lösung Anzeigen

t=0:pi/4:12*pi; polar(t,t.*sin(t)) t=0:pi/8:12*pi; polar(t,t.*sin(t)) t=0:pi/16:12*pi; polar(t,t.*sin(t)) t=0:pi/32:12*pi; polar(t,t.*sin(t))

Mehrere Plots

Manchmal wirst du mehrere Plots gemeinsam darstellen wollen. Dafür hast du drei Möglichkeiten. Du kannst das Grafik-Fenster unterteilen, du kannst mehrere Grafiken ins gleiche Fenster zeichnen oder du kannst mehrere Grafik-Fenster öffnen. Unterteilen kannst du mit dem Befehl subplot(rows, columns, index). Der Befehl teilt dein Grafik-Fenster in rows Zeilen und columns Spalten. Deine nächster Plot wird in Untergrafik index gezeichnet.

Um einen zweiten Plot in die gleiche Grafik zu zeichnen brauchst du den Befehl hold. Nachdem du deinen ersten Plot gezeichnet hast, führst du hold on aus. Nun werden alle weiteren Zeichen-Befehle in der gleichen Grafik ausgeführt. Mit hold off deaktivierst du das wieder.

Hinweis: Es lohnt sich am Ende eines Skripts immer hold off zu setzen. Sonst kann es sein, dass beim nächsten Start hold noch immer an ist und du weiter in dein altes Fenster zeichnest. Diesen dummen Fehler zu finden kann ziemlich viel Zeit und Nerven kosten.

Schliesslich kannst du mit figure ein weiteres Grafikfenster öffnen. Alle weiteren Zeichnungsbefehle werden nun in diesem Fenster ausgeführt. Das alte Fenster bleibt dabei unverändert.

Aufgabe 3

Zeichne die Funktionen

mit folgenden Versionen:

  1. Zeichne in einen ersten Subplot die Funktion. Verwende lineare Achsen.
  2. Zeichne in den selben Subplot zusätzlich log10(exp(x/1000)).
  3. Zeichne in einen weiteren Sublot rechts die Funktion. Verwende dieses Mal aber eine logarithmische y-Achse.

Für Plots mit logarithmischen Achsen brauchst du die Befehle loglog, semilogy, semilogx.

Lösung Anzeigen

x=0:4000; subplot(1,2,1) plot(x,exp(x/1000)) hold on plot(x,log10(exp(x/1000))) hold off subplot(1,2,2) semilogy(x,exp(x/1000))

Aufgabe 4

Ergänze nun die Grafik aus Aufgabe 3 mit einem zweiten Set von Subplots unterhalb der bisherigen. Zeichne darin die gleiche Funktion einfach mit negativem Exponenten.

Hinweis: Auch dies wird oft vorkommen. Plötzlich brauchst du doch noch einen Subplot mehr. Für solche Fälle kannst du dir viel Arbeit sparen, wenn du in deinem Skript möglichst überall mit Symbolen statt Zahlenwerten arbeitest. In unserem Fall solltest du deshalb Zeilen- und Spaltenanzahl in einer Variablen speichern.

Lösung Anzeigen

% gesamte Lösung, inklusive 3 rows = 2; cols = 2; x=0:4000; subplot(rows,cols,1) plot(x,exp(x/1000)) hold on plot(x,log10(exp(x/1000))) hold off subplot(rows,cols,2) semilogy(x,exp(x/1000)) subplot(rows,cols,3) plot(x,exp(-x/1000)) hold on plot(x,log10(exp(-x/1000))) hold off subplot(rows,cols,4) semilogy(x,exp(-x/1000))

Polynome

Mit dem Befehl polyval(C,x) kannst du ein Polynom mit den Koeffizienten C für alle Punkte im Vektor x berechnen lassen. Das ist deutlich einfacher, als das Polynom von Hand aufzuschreiben. Das folgenden Beispiel zeigt dies.

x = -10:0.5:10; y1 = 2*x.^2+3*x+5; plot(x,y1) figure C = [2 3 5]; y2 = polyval(C,x); plot(x,y2,'r')

Was macht 'r' in der letzten Zeile?

Ein weitere nützlicher Befehl bei Polynomen ist roots(C). roots gibt einen Vektor mit den x-Positionen der Nullstellen zurück.

Weitere Darstellungsoptionen

In den bisherigen Abschnitten hast du bereits die Befehle loglog, semilogy, semilogx, subplot und hold kennen gelernt. Daneben sind auch noch grid, title, xlabel, ylabel und legend nützlich. Die Namen sind ziemlich selbsterklärend. Schaue dir vor der nächsten Aufgabe aber die dazugehörige Dokumentation an. Ausserdem solltest du dir in der Hilfe zu plot die Details zu den weiteren Argumenten durchlesen. Was macht zum Beispiel 'go'? Und wie veränderst du die Grösse deiner Marker?

Aufgabe 5

Stelle die Funktion
f(x) = x3 + 3x2 - 13x - 15
wie folgt dar:

  • Plotte die Funktion auf der x-Achse zwischen -5.5 und 3.5 und auf der y-Achse zwischen -30 und 30
  • Zeichne ein Gitter.
  • Versehe die Graphik mit dem Titel "Polynom 3. Ordnung" , der x-Achsenbeschriftung "Abszisse" und der y-Achsenbeschriftung "Ordinate".
  • Plotte in dieselbe Graphik die Nullstellen des Polynoms. Markiere diese mit roten Kreislein.
  • Füge dem Plot eine Legende für das Polynom und die Nullstellen hinzu.

Lösung Anzeigen

C=[1 3 -13 -15]; x=-10:0.1:10; fx=polyval(C,x); plot(x,fx) axis([-5.5 3.5 -30 30]) grid on title('Polynom 3. Ordnung') xlabel('Abszisse') ylabel('Ordinate') hold on nullstellen=roots(C); plot(nullstellen,zeros(length(nullstellen)),'ro') legend('f(x)=x^3+3x^2-13x-15','Nullstellen') hold off