Überzeugen Sie sich davon, dass der sog. Euler-Algorithmus für das Federpendel das richtige Ergebnis liefert. Ersetzen Sie dazu die paint-Routine aus Ihrem Programm aus dem letzten Abschnitt durch folgende Routine:
public void paint(Graphics g) { final double D = 1.0; // Federkonstante final double m = 1.0; // Masse final double tmax = 10.0, dt = 0.01; // Zeitinterval double q = 1.0, p = 0.0; // Anfangsbedingungen double kraft; setRange(0.0, tmax, -1.5, 1.5); g.drawLine(sx(0.0), sy(0.0), sx(tmax), sy(0.0)); g.setColor(Color.blue); // Schleife ueber die Zeit for(double t = 0.0; t < tmax; t += dt) { // Momentaufnahme der Kraft kraft = -D * q; // Euler Integration q += p * dt / m; p += kraft * dt; // Punkt im q(t) Diagramm wird gezeichnet g.fillOval(sx(t) - 2, sy(q) -2, 4, 4); } }
In den ersten beiden blauen Zeilen werden die beiden Konstanten, die unser System beschreiben, deklariert und initialisiert. Masse und Federkonstante sollen sich während des ganzen Programmlaufes nicht mehr verändern; Wir teilen dies JAVA mit, indem wir das Schlüsselwort final vor die Deklaration setzen. Dadurch wird der Compiler jeden (evtl. irrtümlichen) Versuch, diese Konstanten zu verändern, unterbinden. In der dritten Zeile werden die maximale Simulationszeit sowie das Zeitintervall unseres Integrators als Konstanten vereinbart.
In der darauffolgenden Zeile steht die Deklaration der dynamischen Variablen unseres Systems, also derjenigen Variablen, die sich verändern können (und sollen). In dem wir auch ihnen schon bei der Deklaration einen Wert zuweisen, setzen wir die Anfangsbedingungen für unser System fest. Im Beispiel bedeutet
double q = 1.0, p = 0.0;,dass sich unser Federpendel zu Anfang am Ort "q = 1.0" befindet und einen Anfangsimpuls von Null hat, also ruht. Die Kraft auf unser Federpendel wird nur deklariert und nicht initialisiert.
In der in Rot dargestellten Zeile berechnen wir die Kraft auf unser Federpendel. Im Fachjargon nennt man diese Art von Kraft übrigens auch lineare rücktreibende Kraft. Was ist hier linear, was rücktreibend?
Die in grün dargestellten Zeilen sind der sog. Integrator. Wir berechnen die Änderung in der Ortskoordinate q als Produkt von Geschwindigkeit (p/m) und einem kleinen Zeitinterval dt. Dementsprechend berechnen wir die Änderung des Impulses als Produkt von Kraft und Zeitintervall. Vergegenwärtigen Sie sich, dass der Impuls hier das Produkt von Masse und Geschwindigkeit ist und dass die hier angegebene Rechenvorschrift somit gerade dem zweiten Newtonschen Axiom entspricht!
Was passiert, wenn man den Zeitschritt dt ändert?
Wenn Sie möchten, ändern sie die Federkonstante und die Masse. Wie ändert sich dabei die Frequenz der Schwingung?
Tragen Sie den Ort gegen den Impuls statt gegen die Zeit auf. Welche Figur erhalten Sie? Können Sie das erklären?
Verändern sie das Kraftgesetz! Das oben angegebene lineare Kraftgesetz beschreibt Federn bei kleiner Auslenkung ziemlich gut (Hookesches Gesetz). Will man aber z.B. ein schwingendes Pendel im Schwerefeld der Erde beschreiben, so hat man das folgende Kraftgesetz zu programmieren:
drehmoment = -g * m * l * sin(theta);,Beginnen Sie damit, in ihrem Programm die Zeile mit der Kraftberechnung einfach durch folgende Zeile zu ersetzen:
kraft = -D * sin(q);,Finden Sie geeignete Anfangsbedingungen für diese Simulation und vergleichen Sie sie mit dem linearen Kraftgesetz! Können Sie die beiden Systeme Feder und Pendel in einem Applett simulieren und so direkt vergleichen?