Computerübung I zur Vorlesung MATHEMATISCHE METHODEN DER PHYSIK                                        WiSe 2011/12

Lösungsvorschlag

Prof. Dr. Norbert Dragon, PD Dr. Michael Flohr

[C1]  Interaktive Parametrische Darstellung einer Funktion

In Hausübung [H5] wurde die Bahnkurve eines Lichtstrahls bestimmt, der von einer rotierenden Lichtquelle ausgehend durch eine gradlinig bewegte Lochblende auf einen festen Schirm trifft. Mit den Bezeichnungen aus dieser Aufgabe ergibt sich für die Kurve auf dem Schirm in der yz-Ebene

({{L(t) =({{(({{v t (1 + (1/(1 - (r/a)cos(ω t))))}, {((r sin(ω t))/(1 - (r/a)cos(ω t)))}}))}}) .}})
Hierbei sind v, r, a, ω Parameter. Man sieht der Formel an, dass bei freier Wahl eines Maßstabes eigentlich nur die Größen v' = (v/a) und r' = (r/a)auftreten (man teile beide Komponenten einfach durch a). Insbesondere ist r’ < 1. Man muss nun noch beachten, dass Manipulate leider nur für Variablen anwendbar ist. Wir müssen daher unsere Funktionen so definieren, dass sie von den Parametern als Variablen abhängen.

y[t_,r_,v_,ω_] := v t (1 + 1/(1 - r Cos[ω t]))

z[t_,r_,ω_] := r Sin[ω t]/(1 - r Cos[ω t])

Hierbei haben wir der Einfachheit halber v’ wieder v und r’ wieder r genannt. Um dies zu plotten, schreiben wir dann einfach

Manipulate[ParametricPlot[{y[t,r,v,ω],z[t,r,ω]},{t,0,100},AspectRatio -> 1, AxesLabel -> {y,z}],{r,0.1,0.999},{v,0.1,10},{ω,0.1,10},ControlPlacement -> Left]

Mit AspectRatio -> 1 garantieren wir, dass der Plot genauso hoch wie breit wird. Ansonsten wählt Mathematica die relative Höhe des Plottes proportional zum Verhältnis der Wertebereiche auf den jeweiligen Achsen. Außerdem achten wir darauf, dass der Plot einigermaßen sinnvoll beschriftet ist.
Bemerkung: Man sieht, dass die Variable v überhaupt nicht wichtig ist, sie skaliert lediglich die x-Achse, ändert aber an der Gestalt des Plots gar nichts. Die Kurve hängt in ihrer Form also nur von r/a und ω ab.

[C2]  Überprüfen von Identitäten

Zunächst definieren wir eine Tabelle für das Kronecker-Symbol, wobei wir beachten, dass der Test auf Gleichheit mit == durchgeführt wird.

δ = Table[If[i==j,1,0],{i,3},{j,3}]

MatrixForm[%]

Das ϵ-Symbol kann man auf sehr viele verschiedene Arten definieren. Hier zwei Möglichkeiten:

ϵ = Table[If[i<j<k||j<k<i||k<i<j,1,If[i<k<j||j<i<k||k<j<i,-1,0]],{i,3},{j,3},{k,3}]

ϵ = Table[Signature[{i,j,k}],{i,3},{j,3},{k,3}]

MatrixForm[%]

Bemerkung: Bitte nicht die Definitionen von δ und ϵ schon in MatrixForm durchfürhen, da dies (unnötiger Weise) den Verschachtelungslevel der Listen um eins erhöht.
Eine weitere, elegante, Weise, δ und ϵ zu definieren ist diese: Wir definieren die Standardbasis des 3-dimensionalen reellen Raumes und berechnen daraus δ und ϵ.

(Subscript[e, 1]) = {1,0,0}
(Subscript[e, 2]) = {0,1,0}
(Subscript[e, 3]) = {0,0,1}

δ = Table[(Subscript[e, i]).(Subscript[e, j]),{i,3},{j,3}]
ϵ = Table[(Subscript[e, i]).((Subscript[e, j])\[Cross](Subscript[e, k])),{i,3},{j,3},{k,3}]

Bemerkung: Es ist nicht vorteilhaft, δ und ϵ als Funktionen zu definieren. Das bedeutet nämlich, dass diese Funktionen bei jedem Aufruf unten in den Tabellen neu ausgeführt werden. Hingenen sind die möglichen Werte in den Tabellen oben ein für alle Mal abgespeichert, was die Ausführung wesentlich schneller macht. Die Überprüfung der Gleichungen in Tabellen, wie unten vorgeführt, ist ebenfalls ungleich viel schneller, als das Überprüfen in Rahmen von Do Schleifen.

Um die 729 Gleichungen aus der Aufgabe leicht zu überprüfen, legen wir eine Tabelle an, deren Elemente diese Gleichugen enthalten:

Table[ϵ[[i,j,k]] ϵ[[l,m,n]] == δ[[i,l]] δ[[j,m]] δ[[k,n]] + δ[[j,l]] δ[[k,m]] δ[[i,n]] + δ[[k,l]] δ[[i,m]] δ[[j,n]] - δ[[j,l]] δ[[i,m]] δ[[k,n]] - δ[[k,l]] δ[[j,m]] δ[[i,n]] - δ[[i,l]] δ[[k,m]] δ[[j,n]],
{i,3},{j,3},{k,3},{l,3},{m,3},{n,3}] // MatrixForm

Wir sehen also sofort, dass offenabr alle 729 Gleichungen wahr sind :-)

Jetzt wird die erste Kontraktion durchgeführt, also über ein Indexpaar wird summiert, wobei wir statt  Sum[ϵ[[i,j,k]] ϵ[[l,m,k]],{k,1,3}] eine schönere Schreibwiese mit Hilfe des "Writing Assistant" aus den "Palettes"-Menu gewählt haben:

Table[(∑_(k=1)^3)ϵ[[i,j,k]] ϵ[[l,m,k]] == δ[[i,l]] δ[[j,m]] - δ[[i,m]] δ[[j,l]],{i,3},{j,3},{l,3},{m,3}] // MatrixForm

Zwei Kontraktionen:

Table[(∑_(j=1)^3)(∑_(k=1)^3)ϵ[[i,j,k]] ϵ[[l,j,k]]== 2 δ[[i,l]] ,{i,3},{l,3}] // MatrixForm

Und schließlich die vollständige, dreifache, Kontraktion

(∑_(i=1)^3)(∑_(j=1)^3)(∑_(k=1)^3)ϵ[[i,j,k]] ϵ[[i,j,k]] == 6

Alternativ kann man getrennt eine Tabelle für die linke Seite der zu prüfenden Gleichung anlegen, und eine für die rechte Seite. Dann kann man diese beiden Tabellen miteinander vergleichen, und erhält so einfach die Ausgabe True, wenn beide Tabellen identisch sind. Also zum Beispiel:

Table[ϵ[[i,j,k]] ϵ[[l,m,n]],{i,3},{j,3},{k,3},{l,3},{m,3},{n,3}] == Table[ δ[[i,l]] δ[[j,m]] δ[[k,n]] + δ[[j,l]] δ[[k,m]] δ[[i,n]] + δ[[k,l]] δ[[i,m]] δ[[j,n]] - δ[[j,l]] δ[[i,m]] δ[[k,n]] - δ[[k,l]] δ[[j,m]] δ[[i,n]] - δ[[i,l]] δ[[k,m]] δ[[j,n]],
{i,3},{j,3},{k,3},{l,3},{m,3},{n,3}]