Simulation

Von: , Frage gestellt am Di, 28. Sep 1999

Hallo !

Wenn ich 2 (bzw. n) Massepunkte habe, die (über eine masselose Verbindung) in einem festen Abstand zueinander verbunden sind und auf die Massepunkte eine Kraft wirkt und ich von einer initialen Bewegung des Massepunkte ausgehe, wie kann isch die weitere Bewegung der Massepunkte berechnen ?

Beispiel: Ich habe eine Hantel (so zwei Eisenkugeln, die durch einen dünnen Plastikstab verbunden sind), die schwebt im Raum. Jetzt stoße ich eine Kugel an. Damit versetzt sich das Gebilde dann in eine Rotation. Sowas möchte ich auf einem Rechner simulieren können. Wie z.B. sieht diese Bewegung dann aus, wenn ich 3, 4, ... n Kugeln auf diese Weise in einer Kette verbinde (Jede Kugel ist um ihre Nachbarn frei rotierbar!). Somit müßte man auch simulieren können, wie sich eine in beliebiger Position befindliche Kette verhält, die an Ihrem Anfang und Ende fixiert ist, wenn die Schwerkraft wirkt (sie "fällt" ja in eine parabelförmige Gestalt).

Ich hoffe, das Problem war verständlich. Kann mir jemand mit einfachen Worten auf die Lösung verhelfen ?

Danke
Jochen

13 Antworten zu dieser Frage

  1. Antwort von nach 42 Minuten hilfreich
    Re: Simulation

    Also:
    Wenn ich mich recht erinnere, läuft das auf einen spezialfall des Dreikörperproblems hinaus. Dieses Problem ist analytisch nicht lösbar, numerisch schon. In Worten ausgedrückt; wenn man 3 und mehr körper (Massepunkte) hat sind von Sonderfällen abgesehen (alle Körper haben die gleiche Masse und/oder befinden sich an den Ecken eines gleichseitigen Dreiecks) die Bewegungen nicht geschlossen beschreibbar. Soweit ich noch weiss, erhält man ein System von 4n Differenzialgleichungen (wenn n die Anzahl der Körper ist), für die aber nur für wenige(beim Dreikörperproblem 4 oder 6) Gleichungen Anfangswerte hat. Für den Rest muß man mehr oder weniger genau schätzen und rechnen rechnen rechnen, was für komplexere Systeme (so etwa ab 6 bis 7 Körper !) kaum noch zu bewerkstelligen ist.

    Falls ich mich nicht richtig erinnert habe, bitte ich um Korrektur.

    Gandalf [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

    • Antwort von nach einer Stunde hilfreich
      Re^2: Simulation

      Richtig, richtig. Ich will's ja simulieren, das is ne numerische Lösung. Die muß mathematisch nicht ad infinito korrekt sein aber eben näherungsweise brauchbar. Es handelt sich ja wohl um nichtlineare, rückgekoppelte Systeme, also Chaos usw, Abh. von Anfangsbedingungen, langfristige Vorhersagen nicht möglich etc.
      Letzlich gehe ich von n Vektoren P(x,y,z) aus, die mir die Lagen des Massenschwerpunkte angeben und n Vektoren V(x,y,z) mit den Geschwindigkeiten der Bewegungen der Punkte und evtl. F(x,y,z) mit den wirkenden Kräften. Jetzt habe ich ein kleines Delta-T (dt) und berechne für jeden P(t) den folgenden P(t+dt). Das Problem ist: Die Abstände zwischen P[m] und P[m+1] (Punkt Nummer m bzw. m+1) muß dabei konstant bleiben.

      Vielleicht ist das ja NUR mit Berücksichtigung von V ODER F leichter. Wäre ein Anfang.

      Jochen

    • Antwort von nach 20 Stunden hilfreich
      Re^2: Simulation

      Die hier beschriebene Situation ist NICHT das Dreikoerperproblem. Dieses besteht aus drei Koerpern, die aufeinander eine abstandsabhaengige Kraft ausueben (z.B. Gravitation, EM-Kraft). Im vorliegenden Problem sind alle Abstaende fix (starrer Koerper).

      Was Du fuer Deine Berechnug brauchst ist die Bewegung des Schwerpunktes (im Inertialsystem des Beobachters) und die Bewegung (Rotation) eines weiteren im Prinzip beliebigen Punktes relativ zum Schwerpunkt (also im koerperfesten Koordinatensystem). Am besten geeignet (im allgemeinen Fall) sind wohl Kugelkoordinaten (r, theta, phi; in diesem Fall ist r fest). Alle anderen Punkte Deines Koerpers haben die gleichen Winkelabhaengigkeiten, aber mit anderen Anfangswerten und anderen Abstaenden.


      Matthias

      • Antwort von nach einem Tag hilfreich
        Re^3: Simulation

        Danke für die Antworten !

        Kann ich das Problem vereinfachen, wenn ich mich auf den Schwerpunkt als Fixpunkt beziehe ?

        Nehemn wir mal folgenden Fall mit drei Massen, die anfangs in Ruhelage eine grade Reihe bilden: o-o-o
        Jetzt stoße ich die rechte Masse mit einem Impuls P senkrecht zur Reihe (nach "oben") an. Während er sich dann nach "oben" bewegt, zieht er die beiden anderen ja etwas nach "rechts", dann den mittleren etwas nach "oben" usw. und schließlich gerät das ganze in eine Rotation. In diesem Fall sollte sich der Schwerpunkt doch nicht verschieben.
        Anders, wenn ich die rechte Kugel exaxt nach rechts anstoße. Dann bewegt sich die ganze Kette einfach und geradlinig nach rechts. Keine Rotation, aber Translation des Schwerpunkts.

        Jochen

        • Antwort von nach einem Tag hilfreich
          Re^4: Simulation

          Nehemn wir mal folgenden Fall mit drei
          Massen, die anfangs in Ruhelage eine
          grade Reihe bilden: o-o-o
          Jetzt stoße ich die rechte Masse mit
          einem Impuls P senkrecht zur Reihe (nach
          "oben") an. Während er sich dann nach
          "oben" bewegt, zieht er die beiden
          anderen ja etwas nach "rechts", dann den
          mittleren etwas nach "oben" usw. und
          schließlich gerät das ganze in eine
          Rotation. In diesem Fall sollte sich der
          Schwerpunkt doch nicht verschieben.
          Doch! Der Schwerpunkt der ganzen Dreierkette bewegt sich gemaess Impulserhaltung nach "oben". Aus Deinem anfaenglichen Stoss kannst Du also die Bewegung des Schwerpunktes erhalten (=gleichfoermig geradlinige Bewegung mit Geschw. v, zu berechnen mit Impulssatz). Um auf die Winkelgeschwingigkeit, mit der sich die anderen beiden Massen um den Schwerpunkt drehen, zu kommen, benutze man die Drehimpulserhaltung:
          hineingesteckter Drehimpuls L = p x r (vektorielles Kreuzprodunkt von Impuls und Ortsvektor des Angriffspunktes [mit Schwerpunkt als Ursprung]). Dieser L ist gleich J*w (Traegheitsmoment mal Winkelgeschw.).
          Also alles zusammen:
          (x(t),y(t))=(x0,y0) + (vx,vy)*t + |r|*(sin(w*t),cos(w*t))
          =Anfangsort + Ort des Schwerpunktes + Rel. Ort zum Schwerpunkt
          Alles in Kartesischen Koord. (x-Komponente, y-komp.) im System eines ausenstehenden Beobachters. Anders, wenn ich die rechte Kugel exaxt
          nach rechts anstoße. Dann bewegt sich die
          ganze Kette einfach und geradlinig nach
          rechts. Keine Rotation, aber Translation
          des Schwerpunkts.
          Stimmt. Obige Formeln kannst Du auch hier anwenden. Das Kreuzprodukt p x r ist hier =0, weil der Stoss parallel zum Vektor Schwerpunkt-Stosspunkt ist.

          Gruss
          Matthias

  2. Antwort von nach 3 Stunden hilfreich
    Re: Simulation

    Hallo

    Wenn die Verbindungen starr sind, dann sollte sich das Ganze eigentlich analog zu einem Festkörper rechnen lassen.

    Das heißt, Du teilst Deine wirkende Kraft auf in tangential und radial zum Schwerpunkt. Der radiale Anteil bewirkt eine Geschwindigkeitsänderung des ganzen Systems, der sich über den Schwerpunkt berechnen läßt. Das ist der einfache Teil.

    Der tangentiale Teil bewirkt eine Rotation und die kann recht hart sein. Die Grundgleichungen sind aber meines Erachtens in jedem guten Buch über klassische Mechanik gelistet und müssten sich für 2 Massen stark vereinfachen und für 3,...n Massen in entsprechend viele gekoppelte Differentialgleichungen auflösen lassen. Der Rest wäre dann Number crunching.

    Viel Spaß
    Thomas

  3. Antwort von nach 8 Tagen hilfreich
    Re: Simulation

    Wie schon unten beschrieben, sind die Formeln in fast allen Büchern der Klassischen Mechanik zu finden. Wenn Du Dich allerdings (sehr) gut mit der Programmierung - im Speziellen: mit der Objektorientierten Programmierung - auskennst, benötigst Du u.U. die speziellen Formeln für dieses Problem gar nicht.

    Angenommen, Du programmierst Objekte, denen Du die Eigenschaften für Trägheit, u.s.w. zuteilst. Dann ist es möglich, fast beliebige Situationen für starr miteinander verbundene Körper zu simulieren. Du könntest dann z.B. beliebig viele Deiner Objekte auf dem Bildschirm plazieren und sie irgendwie miteinander verbinden. Wenn Du einem dieser Objekte einen Impuls gibst, würden sie sich aufgrund der bestehenden Verbindungen (beinahe) real bewegen können.

    Für so etwas sind allerdings nicht nur fortgeschrittene Programmierkenntnisse, sondern auch Wissen über die Objekt-Theorie vonnöten. Ein solches Programm läßt sich dann wohl nicht "mal eben" erstellen.

    Übrigens:
    Eine Simulation von Gravitationskräften habe ich ähnlich realisiert. Falls Dich das Ergebnis interessiert, schau mal unter
    http://student.physik.uni-dortmund.de/homepages/wsch...
    und dort bei "software"

    Gruß
    Wolfgang [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

    • Antwort von nach 9 Tagen hilfreich
      Re^2: Simulation

      Hallo !

      Ja, ich kann objektorientiert programmieren, und so wäre ich die Sache auch angegangen. Mein Problem liegt aber darin, daß über die drehbaren Verbindungen der Objekte gleichzeitig jedes Objekt an denem anderen zieht und drückt. Wie kann ich das umsetzen ?

      Jochen

      • Antwort von nach 9 Tagen hilfreich
        Re^3: Simulation

        Hi Jochen!

        Du müsstest z.B. die Objektklassen "Massekörper" und "Verbindung" programmieren, mit der eine Kopplung der Massen möglich wird. Je nachdem, wie die Entwicklung der Objekte vorgenommen wird, Verwaltest Dein Massensystem(objekt) dann

        entweder:
        Massekörper, die Verbindungen (zu anderen Körpern) haben
        oder:
        Verbindungen, die je zwei Massen zusammenhalten.

        Ein Massenobjekt kann dann (über eine Methode) allen angeschlossenen Verbindungen mitteilen, daß die am anderen Ende hängenden Massen sich mitbewegen sollen. Diese anderen Massen müssen dann selbst entscheiden (aufgrund der eigenen Massenträgheit), wie stark sie von der angesprochenen Masse tatsächlich beeinflusst werden.

        Das ganze ist ein wirklich komplexes Problem, aber ausgehend von der ursprünglich angestoßenen Masse kann sich so die Bewegung über die Verbindungsobjekte an alle anderen Massenobjekte fortpflanzen.

        Leider (oder: ZUM GLÜCK) fängt eine objektorientiertes Programmierung ja nicht erst beim Tippen des Quelltexts an, sondern bereits bei den ersten Entwürfen auf dem Papier. Es will also wohlüberlegt sein, wie Dein System sich aufbauen soll, welche Objektklassen Du brauchst und wie sich die Objekte Nachrichten schicken. Eine gute Planung dauert oft länger als die eigentliche Programmierung.

        Gruß
        W. Ja, ich kann objektorientiert
        programmieren, und so wäre ich die Sache
        auch angegangen. Mein Problem liegt aber
        darin, daß über die drehbaren
        Verbindungen der Objekte gleichzeitig
        jedes Objekt an denem anderen zieht und
        drückt. Wie kann ich das umsetzen ?

        Jochen



Keine passende Antwort gefunden? Jetzt eigene Frage stellen!