RegistrierenRegistrieren   LoginLogin   FAQFAQ    SuchenSuchen   
Will Doppelpendel simulieren! Was stimmt nicht? Video incl.
 
Neue Frage »
Antworten »
    Foren-Übersicht -> Mechanik
Autor Nachricht
Green Mamba



Anmeldungsdatum: 27.09.2004
Beiträge: 12

Beitrag Green Mamba Verfasst am: 27. Sep 2004 21:57    Titel: Will Doppelpendel simulieren! Was stimmt nicht? Video incl. Antworten mit Zitat

Hallo,

ich möchte ein Doppelpendel simulieren, also ein Programm schreiben welches dann als Bildschirmschoner ein Doppelpendel darstellt.
Ich habe mich schlau gemacht, und festgestellt dass man das ganze nur annähernd beschreiben kann, da das Problem an sich wohl nicht berechenbar ist.
Eine Annäherung soll mir allerdings reichen. Augenzwinkern

Ich habe jetzt hier ein paar Infos dazu gefunden, blicke da aber beim besten Willen nicht durch.
Mir kommt es prinzipiell auf die letzten beiden Formeln an, also (35) und (36), denn diese beschreiben die Pendel-Winkel in Abhängigkeit von der Zeit.
Allerdings kapier ich nicht was das für Variablen sind. Vielleicht kann mir ja jemand dabei helfen?

Viele Grüße


Zuletzt bearbeitet von Green Mamba am 07. Okt 2004 17:20, insgesamt einmal bearbeitet
Nikolas
Ehrenmitglied


Anmeldungsdatum: 14.03.2004
Beiträge: 1873
Wohnort: Freiburg im Brsg.

Beitrag Nikolas Verfasst am: 27. Sep 2004 22:10    Titel: Antworten mit Zitat

Würde es dir etwas ausmachen, besagte Formeln auch zu zeigen? grübelnd
Wahrsager hab ich hier noch nicht getroffen Big Laugh

_________________
Nikolas, the mod formerly known as Toxman.
Erwarte das Beste und sei auf das Schlimmste vorbereitet.
Green Mamba



Anmeldungsdatum: 27.09.2004
Beiträge: 12

Beitrag Green Mamba Verfasst am: 27. Sep 2004 22:23    Titel: Antworten mit Zitat

Oh wei, habsch doch glatt den Link vergessen. grübelnd
Hier diese Seite meinte ich:
http://theory.gsi.de/~vanhees/faq/lagrange/node20.html
Hilfe

Unten die letzten 4 Formeln brauch ich nur, wenn ich das richtig verstanden hab. Könnte sowas ja mit Heun oder Runge-Kutta realisieren denke ich.
Bruce



Anmeldungsdatum: 20.07.2004
Beiträge: 537

Beitrag Bruce Verfasst am: 27. Sep 2004 22:37    Titel: Antworten mit Zitat

O.K. Green Mamba,

wie versprochen ein paar Erklärungen zur Rechnung.

Die beiden Winkel in der Skizze sind selbsterklärend. Daraus berechnen
sich die kartesischen Koordinaten der beiden schwingenden Massen
gemäß


und


Um Differentialgleichungen für die Winkel phi_1 und phi_2 zu finden,
bedient man sich hier des Lagrange Formalismus der analytischen Mechanik.

Dazu berechnet man die Lagrangefunktion

die hier die Differenz aus der kinetischen Energie T der beiden Massen und
ihrer potentiellen Energie V im Schwerefeld der Erde ist.
Zunächst werden T und V aus den kartesischen Koordinaten und deren
Zeitableitungen berechnet und dann wird die oben angegebene
Koordinatentransformation durchgeführt.

Aus der Lagrangefunktion erhält man über die Lagrangegleichnungen


und


die gesuchten Differentialgleichungen für die Winkel phi_1 und phi_2.

Der Lagrange Formalismus ist ein abstraktes Verfahren, das es erlaubt, ohne besonderes
physikalisches Verständnis Bewegungsgleichungen in geschickt gewählten Koordinaten
(hier phi_1 und phi_2) zu bestimmen. Die angegebenen Lagrange Gleichungen können
allgemein aus einem Variationsprinzip hergeleitet werden.

Entscheidend für eine Vereinfachung der Differentialgleichungen für phi_1 und
phi_2 sind die Näherungen

sowie die Vernachlässigung von Termen der Form

Mit diesen Näherungen können die Differentialgleichungen für kleine Auslenkungen aus
der Ruhelage gelöst werden.

Für den Fall l1=l2=l und m1=m2=m ergibt sich mit diesen Näherungen die Matrix-DGL


mit



Die Frequenzen om1 und om2 sind die Eigenwerte der Matrix A und die
errechnen sich aus den Quadratwurzeln der Eigenwerte von A^2.



Wenn e1 und e2 die zu (om1)^2 und (om2)^2 gehörigen Eigenvektoren von A^2 sind,
dann kann die allgemeine Lösung der obigen Matrix-DGL in der Form



geschrieben werden. Die Konstanten a,b,c und d ergeben sich aus den Anfangsbedingungen



Gruß von Bruce


Zuletzt bearbeitet von Bruce am 28. Sep 2004 17:11, insgesamt einmal bearbeitet
Green Mamba



Anmeldungsdatum: 27.09.2004
Beiträge: 12

Beitrag Green Mamba Verfasst am: 28. Sep 2004 13:04    Titel: Antworten mit Zitat

Bruce hat Folgendes geschrieben:
O.K. Green Mamba,

wie versprochen ein paar Erklärungen zur Rechnung.

Die beiden Winkel in der Skizze sind selbsterklärend. Daraus berechnen
sich die kartesischen Koordinaten der beiden schwingenden Massen
gemäß


und


Um Differentialgleichungen für die Winkel phi_1 und phi_2 zu finden,
bedient man sich hier des Lagrange Formalismus der analytischen Mechanik.

Dazu berechnet man die Lagrangefunktion

die hier die Differenz aus der kinetischen Energie T der beiden Massen und
ihrer potentiellen Energie V im Schwerefeld der Erde ist.
Zunächst werden T und V aus den kartesischen Koordinaten und deren
Zeitableitungen berechnet und dann wird die oben angegebene
Koordinatentransformation durchgeführt.

Aus der Lagrangefunktion erhält man über die Lagrangegleichnungen


und


die gesuchten Differentialgleichungen für die Winkel phi_1 und phi_2.

Der Lagrange Formalismus ist ein abstraktes Verfahren, das es erlaubt, ohne besonderes
physikalisches Verständnis Bewegungsgleichungen in geschickt gewählten Koordinaten
(hier phi_1 und phi_2) zu bestimmen. Die angegebenen Lagrange Gleichungen können
allgemein aus einem Variationsprinzip hergeleitet werden.


Bis hierhin hab ich leider nicht alles verstanden. Die Umrechnung von polar- in kartesische Koordinaten ist mir klar, aber bezüglich der Lagrange-Funktion und -Gleichung brauche ich eine genauere Erläuterung. Kann es sein dass man das einfach als gegeben hinnehmen kann, und dieses zur Anwendung nicht unbedingt verstanden sein muss?

Bruce hat Folgendes geschrieben:
Entscheidend für eine Vereinfachung der Differentialgleichungen für phi_1 und
phi_2 sind die Näherungen

sowie die Vernachlässigung von Termen der Form

Mit diesen Näherungen können die Differentialgleichungen für kleine Auslenkungen aus
der Ruhelage gelöst werden.

Sehe ich das richtig, dass hier nur Annahmen und Bedingungen aufgestellt werden, damit das ganze überhaupt lösbar wird?

Bruce hat Folgendes geschrieben:
Für den Fall l1=l2=l und m1=m2=m ergibt sich mit diesen Näherungen die Matrix-DGL


mit


Jetzt ist mir nicht klar, woher die Variablen g und l kommen. Ist es so, dass l immernoch die Pendellänge ist, aber was ist dann g? Für die untere Gleichung muss ich ja omega 1 und 2 errechnen, dafür ist A² nötig, richtig? Ich denke hier wird es interessant für die praktische Berechnung?

Bruce hat Folgendes geschrieben:
Die Frequenzen om1 und om2 sind die Eigenwerte der Matrix A und die
errechnen sich aus den Quadratwurzeln der Eigenwerte von A^2.



Also, wenn ich jetzt g und l hätte, hätte ich auch omega 1 und 2, oder?

Bruce hat Folgendes geschrieben:
Wenn e1 und e2 die zu (om1)^2 und (om2)^2 gehörigen Eigenvektoren von A^2 sind,
dann kann die allgemeine Lösung der obigen Matrix-DGL in der Form



geschrieben werden.

Jetzt gleich das nächste Problem, woher bekomme ich und ? Diese sind bislang ja noch gar nicht aufgetaucht, oder?
Wenn ich das jetzt wenigstens annähernd verstanden habe, dann brauche ich nur diese Gleichung mittels eines Integrationsverfahrens zu berechnen. Aber irgendwie müsste ja eigentlich der letzte Zustand, also Phi 1, Phi 2, sowie die Winkelgeschwindigkeiten von Phi 1 und 2 als Grundlage für die nächste Position des Pendels dienen, oder? Diese Größen tauchen aber nicht auf der rechten Seite der Gleichung auf!?
Oder stecken diese in und drin?
Bruce hat Folgendes geschrieben:
Die Konstanten a,b,c und d ergeben sich aus den Anfangsbedingungen



Gruß von Bruce

Die Variablen a-d habe ich kapiert. Tanzen
Vielen Dank schonmal für deine Hilfe bis hier hin.
Ach ja, vielleicht sollte ich erwähnen, dass ich angehender Informatiker bin, und kein Physiker oder Mathematiker. Also sorry für die vielleicht blöden Fragen. Buschmann
Bruce



Anmeldungsdatum: 20.07.2004
Beiträge: 537

Beitrag Bruce Verfasst am: 28. Sep 2004 17:23    Titel: Antworten mit Zitat

Hallo Green Mamba,

deine Fragen sind nicht blöd! Immerhin hast Du dir das Zeug von Anfang
bis Ende durchgelesen und versucht zu verstehen, was gemacht wurde.

Deswegen werde ich jetzt versuchen alle deine Fragen zu beantworten.

Den Lagrange-Formalismus mußt Du hier nicht verstehen und kannst Du als
gegeben hinnehemen. Falls Du dich dafür interessierst, verweise ich dich
auf die einschlägigen Lehrbücher der theoretischen Mechanik. Das würde
dich allerdings einige Wochen Zeit kosten. Willst Du das wirklich??
Für den Fall das ja:
Wolfgang Nolting, Grundkurs Theoretische Physik 1 und 2
Die Bücher vom Nolting enthalten viele durchgerechnete Übungsaufgaben, und
sind deshalb didaktisch wertvoll!

Den Zweck der Näherungen hast Du ganz richtig erkannt. Die haben ausschließlich
den Sinn, die gegebene nichtlineare DGL zu einer analytisch exakt lösbaren
linearen DGL zu vereinfachen.

g ist die Schwerebeschleunigung an der Erdobefläche, also g=9,81m/s^2
und l ist die Länge der beiden Pendelarme. Für den betrachteten Spezialfall,
für den die beiden schwingenden Massen m1 und m2 gleich sind und die beiden
Pendelarme l1 und l2 ebenfalls gleich sind, ergeben sich die Frequenzen
om1 und om2 allein aus g und l=l1=l2.

Die Vektoren e1 und e2 sind sogenannte Eigenvektoren der Matrix B=A^2.
Es gilt (lineare Algebra kennst Du?):


Die Eigenwerte e einer Matrix erhält man als Nullstellen des charakteristischen
Polynoms P(e)=det(B-e*E)=0, wobei E die Einheitsmatrix ist.
Die Frequenzen om1 und om2 ergeben sich somit aus der Gleichung:


Die auf eins normierten Eigenvektoren e1 und e2 zu den Eigenwerten
om1^2=(g/l)(2-sqrt(2)) bzw. om1^2=(g/l)(2+sqrt(2)) von B lauten:



Jetzt benötigst Du kein Integrationsverfahren mehr!! Die berechnete Lösung der
genäherten Differentialgleichungen für phi1 und phi2 sind analytisch exakt.
Die Vektoren e1 und e2 sind konstante Vektoren und die Komponenten des Ergebnisvektors
sind die beiden Winkel phi1 und phi2.

Mir fällt gerade auf, daß in meinem vorherigen Beitrag noch ein Schreibfehler war.
Ersetze exp(om*t) durch exp(i*om*t) = cos(om*t)+i*sin(om*t) (Eulersche Identität)!!
Ich habe das jetzt korrigiert. Sieh nochmal nach was da jetzt steht!!

Gruß von Bruce
Gast






Beitrag Gast Verfasst am: 30. Sep 2004 12:54    Titel: Antworten mit Zitat

Vielen Lieben herzlichen Dank erstmal!
Ich werde mich jetzt mal dran setzen, und sehen ob ich das so programmiert bekomme. Ich denke ich habs soweit verstanden, aber manchmal steckt der Teufel ja noch im Detail.
Sollte ich also doch was nicht verstanden haben, dann meld ich mich nochmal, sollte es klappen, dann kommt zumindest ein Video oder so was davon hier zum DL. Augenzwinkern
Green Mamba



Anmeldungsdatum: 27.09.2004
Beiträge: 12

Beitrag Green Mamba Verfasst am: 01. Okt 2004 16:07    Titel: Antworten mit Zitat

Mensch, war das Board seit gestern offline?
Naja, wie auch immer.

Also, ich habe das ganze jetzt mal programmiert, bekomme aber immer nur stetig steigende Werte für phi1 und phi2 heraus. unglücklich

Ich bin folgendermaßen vorgegangen:
Ich habe erst mal alle festen werte vorberechnet, also die beiden e-vektoren 1 und 2:

E1X=0.5773502691896258;
E1Y=0.816496580927726;
E2X=-0.5773502691896258;
E2Y=0.816496580927726;

Dann habe ich eine Pendellänge (1.1) und eine Masse (3.6) vorgegeben, und berechne daraus dann omega 1 und 2.
Das sind ja auch feste Werte die sich über die Zeit nicht ändern.

Dann habe ich eine Engine Programmiert, die mir Zeitgesteuert jede 1/10el Sekunde die Werte berechnet, und zwar nach diesem Code:

Code:
  m_phiOne =  (((m_fPhiOneStart * exp(omegaOne() * m_fTimeCounter)) +
              (m_fPhiOneSpeedStart * exp (-omegaOne() * m_fTimeCounter))) * E1X) +

              (((m_fPhiTwoStart * exp (omegaTwo() * m_fTimeCounter)) +
              (m_fPhiTwoSpeedStart * exp (-omegaTwo() * m_fTimeCounter))) * E2X);

  m_phiTwo = (((m_fPhiOneStart * exp(omegaOne() * m_fTimeCounter)) +
              (m_fPhiOneSpeedStart * exp (-omegaOne() * m_fTimeCounter))) * E1Y) +

              ((m_fPhiTwoStart * exp (omegaTwo() * m_fTimeCounter) +
              (m_fPhiTwoSpeedStart * exp (-omegaTwo() * m_fTimeCounter))) * E2Y);


Die Bezeichner sollten selbsterklärend sein. Wenn ich das Ding jetzt laufen lasse kommen solche Werte raus, die werden immer größer, bis irgendwann der Zahlenbereich erschöpft ist. unglücklich

Ist es so, dass die 4 Variablen phi 1 und 2, sowie die Winkelgeschwindikeiten immer auf dem Startwert bleiben, oder müssen die in jedem Schritt neu berechnet werden? Ich hab auch schon versucht das Phi 1 und 2 jedesmal mit dem zuletzt berechnetem Wert zu erneuern, was aber auch nichts gebracht hat.
Bei dem Versuch habe ich dann die Winkelgeschwindigkeiten einfach so berechnet:

m_fPhiOneSpeedStart = (m_phiOne - m_fPhiOneStart) * (1/Zeitschritt);
Der Zeitschritt in Sekunden.

Irgendwo steckt da der Wurm drin. Ich habs schon x-mal kontrolliert, finde aber das Würmchen einfach nicht. Vielleicht siehts ja jemand?

Mir ist anhand der Formel irgendwie auch nicht klar wie die Winkel so zum schwingen kommen sollen. Für mich als nicht-Mathematiker sieht das schon irgendwie aus als wollte das immer größer werden. :-/

Also das einzige was sich in den Termen von phi 1 und 2 ändert ist ja der Zeitparameter. Ich blick da nicht durch.
Bruce



Anmeldungsdatum: 20.07.2004
Beiträge: 537

Beitrag Bruce Verfasst am: 02. Okt 2004 11:21    Titel: Antworten mit Zitat

Hallo Green Mamba,

in der von dir implementierten Lösung ist ein Fehler, der auf einen Schreibfehler
in meinem vorletzten Beitrag zu diesem Thema zurückgeht. Du mußt überall exp(om*t)
durch exp(i*om*t)=cos(om*t)+i*sin(om*t) ersetzen.

Ich habe mal die komplette Lösung ausgerechnet. Mit den Anfangsbedingungen


ergibt sich:



Gemäß deine Formel kann nichts schwingen, das siehst du richtig. Aber der Fehler lag bei mir!
Ich habe ein i (i^2=-1) in den Exponentialfunktionen vergessen.

Die Startwerte sind Startwerte, daran ändert sich nichts, die kannst Du beliebeig
aber physikalisch sinnvoll vorgeben.

Beachte, das die Anfangsgeschwindigkeiten für die von mir berechnete Lösung verschwinden!

In welcher Programmiersprache und Entwicklungumgebung schreibst Du dein Programm ?

Gruß von Bruce
Green Mamba



Anmeldungsdatum: 27.09.2004
Beiträge: 12

Beitrag Green Mamba Verfasst am: 02. Okt 2004 12:12    Titel: Antworten mit Zitat

Oh, da bin ich aber gespannt wie das jetzt klappt. Vielen Dank nochmal! smile
Ich hatte mich auch schon ein bisschen gewundert wo die komplexe Zahl abgeblieben war.
Ich programmiere das ganze in C++ unter Linux mit den Coin3D-Bibliotheken, die mir einen Render-Tree bereitstellen. Habe keine Lust alles in OpenGL von Grund auf zu implementieren. Wenn das ganze aber läuft werde ich das vielleicht auch ohne die Coin-Bibliotheken nachprogrammieren, dann wäre eine Installation als Bildschirmschoner einfache. smile
Ich probier das jetzt mal aus, und melde mich dann wieder.

//Edit
Hurra, die Werte schwingen offensichtlich. smile
Ich bastel jetzt mal noch eben eine simple Graphische Umsetzung.
Heisenberg



Anmeldungsdatum: 24.09.2004
Beiträge: 6

Beitrag Heisenberg Verfasst am: 03. Okt 2004 00:48    Titel: Antworten mit Zitat

wow!

bruce du hast ein verdammt gut fundiertes wissen...ich hoffe ich kann dir eines fernen tages das wasser reichen!
da ich jetzt seit 2 wochen den physikvorkurs an der universität bonn besuche und auch schon als physikstudent eingeschrieben bin würde mich interessieren in welchem semester du bist!

übrigens habe ich erst im vorkurs folgende dinge das erste mal gesehen:
partielles ableiten
skalare felder
vektorielle felder
kurvenintegrale
stokescher satz, gaussscher satz
etc...

freitag war letzter vorkurstag und wurden paar büchertipps gegeben:
vielleicht kannst du mir auch ein paar bücher empfehlen!!

Folgende tipps wurden mir bereits gegeben:
Analysis: Königsberger 1-2, Walter, Forster
Lineare Algebra: Axtin, Brieshorn, Fischer
Experimentalphysik: Demtröder (1-4),Tipler, Gerthsen(Meschede)

Also der Tipler wurde mir sehr nahe gelegt! Vielleicht kannst du die Liste ja ergänzen bzw von nem buch abraten oder eins empfehlen Big Laugh
Bruce



Anmeldungsdatum: 20.07.2004
Beiträge: 537

Beitrag Bruce Verfasst am: 05. Okt 2004 23:43    Titel: Antworten mit Zitat

@Heisenberg
Danke für die Blumen, aber von einem Dipl.-Phys. muß man auch mehr
erwarten als von einem Physik-LK Schüler.

Zu den Literaturtips: Im laufe des Studiums wird dir noch
viel Literatur begegnen. Es ist nicht einfach zu sagen, was für diese
oder jene Phase des Studiums gut geeignet ist. Das weiß man
normalerweise erst hinterher. Der Eine findet jenes Buch gut und
hilfreich und der oder die Andere kann damit wenig anfangen und
bevorzugt anderes Material. Persönlicher Geschmack spielt
auch hier eine grosse Rolle. Deiner List würde ich noch die Reihe
Berkley Physik Kurs (Vieweg Verlag) anfügen sowie die neueren
Ausgaben der Bände 1-3 des Bergmann Schäfer. Diese Bücher
solltest Du in deiner Uni-Bibliothek finden.

Gruß von Bruce
Green Mamba



Anmeldungsdatum: 27.09.2004
Beiträge: 12

Beitrag Green Mamba Verfasst am: 06. Okt 2004 18:55    Titel: Antworten mit Zitat

Hallo,

ich nochmal. Irgendwas stimmt da glaub ich immernoch nicht. Die Werte von Phi1 schwingen zwischen -2*PI und 2*PI, die Werte von Phi2 hingegen zwischen ca. -8.86 und 8.86. Das kann doch eigentlich nicht sein, oder?

Hier nochmal mein Code, anscheinend konntest du den ja entziffern. smile

Code:
  m_fTimeCounter+=TIMESTEP;

  m_phiOne =  0.6123724356957945 *
              ((1.414213562373095 * m_fPhiOneStart + m_fPhiTwoStart) * cos (omegaOne() * m_fTimeCounter) * E1X -
              (1.414213562373095 * m_fPhiOneStart - m_fPhiTwoStart) * cos(omegaTwo() * m_fTimeCounter) * E2X);

  m_phiTwo =  0.6123724356957945 *
              ((1.414213562373095 * m_fPhiOneStart + m_fPhiTwoStart) * cos (omegaOne() * m_fTimeCounter) * E1Y -
              (1.414213562373095 * m_fPhiOneStart - m_fPhiTwoStart) * cos(omegaTwo() * m_fTimeCounter) * E2Y);


Die Funktionen OmegaOne und OmegaTwo sehen so aus:
Code:
    inline float omegaOne ()
    { return sqrt((9.81/m_fPendulumLength)*3.414213562373095); }

    inline float omegaTwo ()
    { return sqrt((9.81/m_fPendulumLength)*0.585786437626905); }


E1 und E2 sind ja gleich geblieben:
Code:
  E1X=0.5773502691896258;
  E1Y=0.816496580927726;
  E2X=-0.5773502691896258;
  E2Y=0.816496580927726;


Hab ich diesmal einen Fehler eingebaut?? unglücklich
Bruce



Anmeldungsdatum: 20.07.2004
Beiträge: 537

Beitrag Bruce Verfasst am: 06. Okt 2004 20:47    Titel: Antworten mit Zitat

Hallo Green Mamba,

in deinem Code sehe ich zunächst keinen Fehler.
Was hast Du für m_fPhiOneStart und m_fPhiTwoStart eingesetzt?
Hast Du berücksichtigt, daß physikalisch sinvolle Werte für diese
beiden Winkel zwischen -pi und pi liegen ?

Deine Inline Funktion

inline float omegaOne () { return sqrt((9.81/m_fPendulumLength)*3.414213562373095); }

erscheint mir fragwürdig. Das ist nicht nötig! Definiere einfach die
beiden omegas als (z.B. private) Member-Variable der Klasse, die die
beiden Winkel als Funktion der Zeit berechnet.

Das kann im Prinzip so aussehen:

#include <cmath>
class CDoublePendulum
{
private:
const double l;
const double g;
double om1;
double om2;

public:
CDoublePendulum(double l): l(l), g(9.81)
{
double sqrt2 = pow(2.0,0.5);
om1 = pow(sqrt2*(sqrt2+1)*g/l,0.5);
om2 = pow(sqrt2*(sqrt2-1)*g/l,0.5);
}
~CDoublePendulum(){};
};

Man sollte Funktionen nur als Inline deklarieren, wenn es keine andere einfache
Möglichkeit gibt, die Ausführungsgeschwindigkeit der gewünschten Operation zu
beschleunigen. Es würde mich wundern, wenn der Zugriff auf eine Membervariable
langsamer ist als die sukzessive Durchführung von zwei Multiplikationen und dem
anschließeneden Wurzel ziehen mit sqrt.

Hast Du mal überprüft was schneller ist? Wie kommt dein Debugger mit Inline
Funktionen zurecht? Ich benutze nie Inline!

Gruß von Bruce.
Green Mamba



Anmeldungsdatum: 27.09.2004
Beiträge: 12

Beitrag Green Mamba Verfasst am: 07. Okt 2004 14:48    Titel: Antworten mit Zitat

Hallo,

die Inline-Funktion habe ich nur benutzt um die Sache ein wenig übersichtlicher zu machen. Bei den wenigen Berechnungen gibts keine Probleme mit der Ausführungsgeschwindigkeit. smile
Sie sollte aber wohl nicht das Ergebnis verfälschen, denn die Inline-Funktion wird ja vom Compiler nur an die stelle kopiert wo sie aufgerufen wird.

Die Übergroßen Winkelwerte kamen wohl tatsächlich davon, dass ich zu große Anfangswerte genommen habe. Ich ging davon aus, dass ich die Werte auch zwischen -2*PI und 2*PI wählen darf, genauso wie auch die Ausgangswerte ankommen.

Ich habe jetzt mal meine Test-Geometrie fertig gestellt, und ich muss sagen, die Animation sieht für mich extrem unglaubwürdig aus. unglücklich
Irgendwo muss doch da noch ein Fehlerchen versteckt sein!?

Ich habe das Video mal auf unseren Uni-Server geladen, damit du siehst was ich meine. Die Winkel werden genau in der Richtung abgetragen, wie hier oben auf der Zeichnung angegeben:
http://theory.gsi.de/~vanhees/faq/lagrange/node20.html

Hier gibts das Video:
*klickmich* (3,8MB)
Ich habe das Video mit meinem Fotoapparat aufgenommen, aber man kann zumindest das Pendel deutlich erkennen. smile
komet



Anmeldungsdatum: 06.10.2004
Beiträge: 7

Beitrag komet Verfasst am: 07. Okt 2004 15:32    Titel: Antworten mit Zitat

Scheint ganz gut geworden zu sein.

Schau Dir doch mal den Link an

http://www.mathematik.ch/anwendungenmath/Doppelpendel/

Gruss

_________________
Man ist nie zu alt zum Lernen
Green Mamba



Anmeldungsdatum: 27.09.2004
Beiträge: 12

Beitrag Green Mamba Verfasst am: 07. Okt 2004 15:58    Titel: Antworten mit Zitat

Ja, aber da ist es z.B. so dass sich beide Pendel früher oder später mal überschlagen, dass passiert bei mir nie. Außerdem sieht diese Animation wesentlich glaubwürdiger aus.
Bei mir bewegt sich ab und an das erste Pendel wie von Geisterhand nach oben, obwohl es das gar nicht dürfte.

Irgendwas stimmt doch bei meiner nicht. unglücklich
komet



Anmeldungsdatum: 06.10.2004
Beiträge: 7

Beitrag komet Verfasst am: 07. Okt 2004 20:49    Titel: Antworten mit Zitat

Im Video schaut es aus, als ob da eine Feder im mittleren Gelenk wäre.

Du hast recht etwas stimmt nicht. grübelnd

_________________
Man ist nie zu alt zum Lernen
komet



Anmeldungsdatum: 06.10.2004
Beiträge: 7

Beitrag komet Verfasst am: 07. Okt 2004 21:31    Titel: Antworten mit Zitat

Wie wär es damit?

Bruce schrieb

Entscheidend für eine Vereinfachung der Differentialgleichungen für phi_1 und phi_2 sind die Näherungen.....phi1 <<1 und phi2 <<1

Zitat Ende

Na ja und nun wundern wir uns, warum Unsinn rauskommt, wenn phi1 und phi2 groß werden.

Also musst Du Deine Anfangswerte sehr klein setzen, leider ist das dann nicht mehr so lustig anzuschauen.

Das Gemeine am Doppelpendel ist ja, dass es sich nur bei sehr kleinen Ausschlägen analytisch lösen lässt und bei grösseren Ausschlägen ein chaotisches Verhalten aufzeigt.

Gruß an Bruce Augenzwinkern

_________________
Man ist nie zu alt zum Lernen
Bruce



Anmeldungsdatum: 20.07.2004
Beiträge: 537

Beitrag Bruce Verfasst am: 07. Okt 2004 21:34    Titel: Antworten mit Zitat

@Green Mamba
Die Videodatei ist mir zu groß, ohne DSL dauert mir der Download zu lange, deswegen
habe ich es noch nicht gesehen.

Du darfst von der angenäherten Bewegungsgleichung nicht zuviel erwarten!
Die Näherungen sin(phi)=phi und cos(phi)=1 sind nur für hinreichend
kleine phi erlaubt. Wenn Du phi0=pi/2 wählst, dann gilt das nicht mehr.
Die Anfangswinkel sollten nicht größer als 0.1 sein. Für größere Winkel
ist die genäherte Bewegzungsgleichnug wahrscheinlich physikalisch nicht mehr
sinnvoll. Dann kommt einfach Unfug heraus.

Die berechnete Näherungslösung entspricht physikalisch zwei gekoppelten
Pendeln. Während das eine Pendel Energie verliert und die Amplitude seiner
Ausschläge abnimmt nehmen Energie und Amplitude des daran gekopplten anderen
Pendels zu. So geht das im periodischen Wechsel hin und her.

Wenn Du Überschläge sehen willst, dann mußt Du die exakte Bewegungsgleichung
lösen und die wahrscheinlich Anfangsgeschwindigkeiten ungleich Null wählen.
Falls Du den Lösungsalgorithmus dafür selbst programmierst achte darauf, daß
die Summe der kinetischen und potentiellen Energien der beiden schwingenden
Massen über die berechnete Lösungstrajektorie so konstant wie möglich bleibt.
Das ist die wichtigste Randbedingung zur Beurteilung der Qualität der numerischen
Näherungslösung.

Gruß von Bruce.
Green Mamba



Anmeldungsdatum: 27.09.2004
Beiträge: 12

Beitrag Green Mamba Verfasst am: 07. Okt 2004 21:42    Titel: Antworten mit Zitat

Schade dass dir die Datei zu groß ist, ich versuche gleich mal eine kleinere hinzubekommen.
Aber wenn man als Startwinkel nur 0.1 wählen kann, dann bringt das ganze ja nicht viel. Bei den Winkeln wackeln die Pendel ja nur minimal. unglücklich
Ich will doch echte Aktion am Pendel! Big Laugh

Wie löse ich denn die exakte Bewegungsgleichung? Muss die dann auch erst hergeleitet werden, oder wie muss ich das verstehen? Kannst du mir dabei unter die Arme greifen?
Green Mamba



Anmeldungsdatum: 27.09.2004
Beiträge: 12

Beitrag Green Mamba Verfasst am: 07. Okt 2004 21:48    Titel: Antworten mit Zitat

So, hier eine (hoffentlich) ISDN-freundliche Version vom Video. smile
http://www.avmz.uni-siegen.de/medinfo/test/video_klein.avi
Hat jetzt nur noch 590kb!
Bruce



Anmeldungsdatum: 20.07.2004
Beiträge: 537

Beitrag Bruce Verfasst am: 07. Okt 2004 22:12    Titel: Antworten mit Zitat

Wahrscheinlich kann ich dir dabei unter die Arme greifen,
allerdings nicht vor Dienstag den 12.10.04.
Bis dahin kannst Du mal versuchen, dich über die numerische
Lösung von gewöhnlichen Differntialgleichungen zweiter Ordnung
und den Velocity-Verlet Algorithmus zu informieren.

Also denn, bis Dienstag!
Green Mamba



Anmeldungsdatum: 27.09.2004
Beiträge: 12

Beitrag Green Mamba Verfasst am: 07. Okt 2004 22:27    Titel: Antworten mit Zitat

Verlet-Integration kenne ich, dabei wird nur die Bescheunigung und die Position gespeichert (jeweils die letzten beiden Schritte), und noch nicht mal die Geschwindigkeit. Hab das mal für Partikelsysteme gelernt.

Warum hab ich mir grad sowas heftiges ausgesucht...
Green Mamba



Anmeldungsdatum: 27.09.2004
Beiträge: 12

Beitrag Green Mamba Verfasst am: 12. Okt 2004 13:25    Titel: Antworten mit Zitat

Hallo,

ich möchte mich nochmal bei allen für die aufopfernde Hilfe bedanken, und vor allem bei dir, Bruce.
Ich habe jetzt doch noch im Netz einen alten Turbopascal-Code finden können, der genau meinen Ansprüchen genügte. Ich habe ihn in C++ übersetzt, und es funktioniert nun prächtig. smile
Hier gibts ein Video von Stand bevor noch ein Himmel und eine Wiese hinzugefügt wurde.
http://www.avmz.uni-siegen.de/medinfo/test/doppelpendel.mpeg
Sollte jemand interesse am Quellcode haben, einfach ne eMail oder PN schreiben. smile
Ist wie oben schon erwähnt in C++ unter Linus programmiert worden mit Einbindung von OpenInventor (Coin3D) und SoQT.

Also, vielen Dank nochmal an alle!

Viele Grüße
Timo


PS: Hier mal noch der relevante Code-Teil:
Code:
void
engine::computeStep()
{
  derivs(m_Time, m_Phi, m_dy);
  rk4(m_Phi, m_dy, 4, m_Time, TIMESTEP, m_Phi);
  m_Time += TIMESTEP;

  //m_Pendulum ist das Objekt mit der Geometrie :)
  m_Pendulum->setValues(m_Phi[0], m_Phi[2]);
}

void
engine::derivs (double x, double y [4], double dy [4])
{
  double dp1, cdp1;
  dp1 = y[0] - y[2];
  cdp1 = cos(dp1);

  dy[0] = y[1];
  dy[1] = (m_Gravity * (sin(y[2]) * cdp1 - 2*sin(y[0]))
            - m_fPendulumLength * sin(dp1) * (pow(y[3],2) + pow(y[1],2) * cdp1)) /
            (m_fPendulumLength * (2 - pow(cdp1,2)));
  dy[2] = y[3];
  dy[3] = (m_fPendulumLength * sin(dp1) * (2*pow(y[1],2) + pow(y[3],2) * cdp1)
            - 2 * m_Gravity * (sin(y[2]) - sin(y[0]) * cdp1)) /
            (m_fPendulumLength * (2 - pow(cdp1,2)));
}

void
engine::rk4(double y [4], double dydx [4], int n, double x, double h, double yOut [4])
{
  double hh, h6, xh;
  double yt [4];
  double dyt [4];
  double dym [4];

  int i=0;

  hh = h * 0.5;
  h6 = h / 0.6;
  xh = x + hh;
  for (i=0; i<4; i++)
    yt[i] = y[i] + hh * dydx[i];

  derivs(xh, yt, dyt);

  for (i=0; i<4; i++)
    yt[i] = y[i] + hh * dyt[i];

  derivs(xh,yt,dym);

  for (i=0; i<4; i++)
  {
    yt[i] = y[i] + h * dym[i];
    dym[i] = dyt[i] + dym[i];
  }

  derivs(x+h, yt, dyt);

  for (i=0; i<4; i++)
    yOut[i] = y[i] + h6 * (dydx[i] + dyt[i] + 2.0 * dym[i]);
}
Bin neu
Gast





Beitrag Bin neu Verfasst am: 21. Jan 2005 18:26    Titel: Antworten mit Zitat

Bruce hat Folgendes geschrieben:


Hallo,
ich hätte da noch eine ganz blöde Frage. Blöd weil mir wohl anscheinenend ein wenig Mathemathik fehlt. Ich soll das Doppelpendel in der Schule kurz vorstellen (13. Klasse, Physik LK) und danzu gehören eben auch sowas wie Bewegungsgleichungen.

Ich verstehe die Schreibweise für die beiden Winkel nicht. Es gibt zwei verschiedene Winkel, die aber über die gleiche Formel mit den gleichen Kostanten berechnet werden? So wie ich die Formel jetzt interpretieren würde kommt für beide Winkel zur Zeit z.B. t=2 der gleiche Winkel raus, was ja nicht sein kann.

Ich hoffe ihr versteht was ich meine.

Könnte mir jemand obige Formel vielleicht in zwei Formeln, eine für phi1 und eine für phi2 auflösen? Möglichst ohne Imaginärzahl oder omegas sondern einfach nur abhängig von t, alpha und beta, das wäre super nett.
Ich weiß das es nicht eure Aufgabe hier und ich bin auch nicht die übliche Klientel, aber wie gesagt ich würd mich echt drüber freuen.

Bis dann,
- Georg
navajo
Moderator


Anmeldungsdatum: 12.03.2004
Beiträge: 618
Wohnort: Bielefeld

Beitrag navajo Verfasst am: 21. Jan 2005 18:39    Titel: Antworten mit Zitat

Bruce hat Folgendes geschrieben:


und sind die kanonischen Einheitsvektoren. Die sehen so aus:


und


Das heißt der Summand mit dem drin ist das und der mit ist das .

Ich kanns auch nochmal hinschreiben:

_________________
Das Universum ist 4 Mio Jahre alt, unbewohnt und kreist um die Sonne.
Gast






Beitrag Gast Verfasst am: 22. Jan 2005 13:53    Titel: Antworten mit Zitat

Okay, dann vielen dank Gott! Mal schaun ob ich's richtig verstanden hab:
Wenn ich also jetzt haben will und , , l = 1m bekomm ich für [maple]phi[2](5)=-(sqrt(2)*3.1415-3.1415/2)*cos((sqrt(9.81/1)*(2-sqrt(2)))*5);
[/maple]=2.78 als Winkel im Bogenmaß raus, richtig?
navajo
Moderator


Anmeldungsdatum: 12.03.2004
Beiträge: 618
Wohnort: Bielefeld

Beitrag navajo Verfasst am: 22. Jan 2005 18:29    Titel: Antworten mit Zitat

Du hast dich an einer Stelle verrechnet:

Die Wurzel im Cosinus geht nicht nur über das , sondern das steht auch noch drunter.


Und du musst beachten, dass diese Lösung nur für kleine Winkel gilt. und sind nicht wirklich klein. Augenzwinkern

_________________
Das Universum ist 4 Mio Jahre alt, unbewohnt und kreist um die Sonne.
Gast






Beitrag Gast Verfasst am: 24. Jan 2005 13:20    Titel: Antworten mit Zitat

Ah, nochmal vielen Dank.

Das mit den war nur ein Beispiel ist schon klar, dass man bei Kleinwinkelnäherung keine Riesenwinkel nehmen kann.

Nochmal ne kurze Frage: Was ist eigentlich die exakte (wissenschaftliche) definition von chaotischen Systemen. Ich stoß immer nur auf so Schwammige Sache wie "System, das sensibel auf Anfangsbedingungen Reagiert".

Kann mir jemand da weiterhelfen mit einer URL oder einfach ein Definition?

// [latex korrigiert, para]
// [rechtschreibung auf eigenen wunsch korrigiert, para]
Neko



Anmeldungsdatum: 04.07.2004
Beiträge: 526
Wohnort: Berlin

Beitrag Neko Verfasst am: 26. Apr 2005 21:33    Titel: Antworten mit Zitat

Sagt mal...ich muss den Thread nochma rauskramen, weil ich ne Frage dazu hab. Wenn ich die Winkelfunktion, die ja Bruce so wunderbar hergeleitet hat, benutzen will und daraus die Geschwindigkeiten und Beschleunigungen berechnen will....wie würde man das machen? grübelnd
_________________
Prefect:"ich habe dich von der Erde gerettet"
Dent:"Und was ist mit der Erde passiert?"
"Och,...die wurde zerstört"
"Ach ja"
"Ja, sie ist einfach ins Weltall verdunstet"
"Weißt du, das nimmt mich natürlich ein bißchen mit"
Neue Frage »
Antworten »
    Foren-Übersicht -> Mechanik