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.
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.
% Das Beispiel schreibt ein N x = [ 0 1 0 1 ] Y = [ 1 1 0 0 ]
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.
Mit der Funktion polar(phi, r)
kannst du in Polarkoordinaten zeichnen.
Der Winkel phi wird dabei in Bogenmass
angegeben.
Verwende polar um die Funktion
in Polarkoordinaten darzustellen.
Variiere dabei den Abstand der Stützstellen.
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))
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.
Zeichne die Funktionen
mit folgenden Versionen:
log10(exp(x/1000))
.Für Plots mit logarithmischen Achsen brauchst du die Befehle loglog
, semilogy
, semilogx
.
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))
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.
% 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))
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.
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?
Stelle die Funktion
f(x) = x3 + 3x2 - 13x - 15
wie folgt dar:
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