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 ?
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]
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.
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.
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.
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.
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.
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.
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 ?
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 ?
Ja. Danke!
Ich würde mir eine linear verkettete Liste von Objekten vorstellen mit den Eigenschaften Masse, Postition und Geschwindigkeit. Aufgrund der Eigenschaften wird die Kraft auf den Vorgänger und den Nachfolger berechnet. Jedes Objekt hat dann zum Merken noch die Felder Kraft vom Vorgänger und vom Nachfolger. Das mache ich mit jedem Körper in der Liste.Jetzt habe ich einen Momentanzustand für jeden Körper in der Liste mit Positionen, Bewegungsvektor und wirkenden Kräften. Wenn ich jetzt die Beschleunigungen für jeden Körper berechne und sie sich ein Zeitintervall bewegen lasse, bleiben die Abstände zwischen den Körpern aber nicht konstant (denke ich, zumindest). Wie bekomme ich das gleichzeitig hin ?
Möglicherweise hatte ich die Fragestellung falsch verstanden. Mit der linearen Liste würdest Du also „nur“ ein Kette von Massen erzeugen, kein Netz. (Korrigiere bitte, wenn das doch falsch sein sollte.) Das Problem wird dadurch wirklich ein wenig einfacher, weil die Kraftübertragung nicht kreuz und quer geht, sondern immer nur von einer Masse auf die nächste. Das Problem mit dem Abstand mußt Du durch eine Korrektur hinbekommen. Die Objekte müssen „gezwungen“ werden, auf Abstand zu bleiben.
Angenommen, Deine Objekte sind bereits auf dem Bildschirm plaziert und eines(!) von Ihnen wird „angeschubst“, dann würde zunächst nur die direkt damit verbundene Masse mitbeeinflusst. Diese zweite Masse beeinflusst dann das dritte Objekt, usw. Es gibt da diese schöne Standardübung in der Physik mit den aufgehängten Kugeln, die sich berühren. Eine wird gegen die anderen gestoßen und der Stoß pflanzt sich nach und nach von einer Kugel auf die nächste fort. Für einen Betrachter passiert diese Stoß"fortpflanzung" gleichzeitig und die letzte Kugel ist die einzige, die sich bewegt. Die Physiker schlüsseln dies aber als Reihe von Stoßprozessen auf.
Zurück zu Deinem Gleichzeitig-Problem könntest Du zwei Ansätze benutzen:
Du betrachtest immer nur den Einfluß einer Masse auf die nächste und gibst das Ergebnis direkt auf dem Bildschirm aus. Nach und nach durchläufst Du dann die gesamte Kette und beginst am Ende wieder von vorn. Ergebnis ist, daß zwischendurch die (eigentlich) festen Abstände verändert sind. Das sieht dann etwa aus wie Elastizität zwischen den Massen. Bei der weiteren Stoßfortpflanzung muss das aber korrigiert werden (s.o.).
Wie 1., aber Du gibst Dein Ergebnis erst auf dem Bildschirm aus, wenn die gesamte Reihe berechnet ist. Da bei jedem Einzel"stoß" der Abstand zur Vorgängermasse gecheckt wird, kann dieser dann ggf. korrigiert werden, so daß das auf dem Bild nicht auffällt.
Natürlich wird sich eine solche Simulation einer wahren Bewegung nur annähern. Zum Einen wird wahrscheinlich durch die Ich-muß-den-Abstand-korrigieren-Funktion die „natürliche“ Bewegung leicht verfälscht. Zum anderen betrachtest Du für Deine bewegungen bestimmt diskrete Zeitabschnitte (z.B. Bewegung innerhalb einer Sekunde). Ohne numerische Verfahren zur wirklichkeitsgetreuen Bewegung ist das Ergebnis immer etwas verfälscht. Allerdings dürfte das weniger ins Gewicht fallen, je mehr Massen simuliert werden, weil dann in der Natur das Prinzip des Chaos eine konkrete Berechnung eh erschwert.
(Gleiches gilt auch für meine Gravitationssimulation. Betrachtet man zwei Massen müssten diese sich z.B. auf elliptischen geschlossenen Bahnen umkreisen. Meine Simulation macht aufgrund der diskretisierten Zeit aber eher Bahnkurven in „Blumenmustern“. Da aber schon das Dreikörperproblem nur mit numerischen Verfahren lösbar ist (soweit ich weiss) und bei immer mehr Massen in der realen Welt das Chaos mitregiert, ist meine Simulation mit der Hundertschar von Objekten wohl hinreichend gut.)
Nächste Antwort leider frühestens morgen möglich!
Gruß (und viel Erfolg erstmal hiermit)
Wolfgang
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
das System ist deterministisch, bewegt sich aber auf einem Konfigurationsraum, der Singularit"aten haben kann, d.h. wo sich das System nicht entscheiden kann, wo es als n"achstes hinsoll (bei schlechter Programmierung gibt’s hier eine unendliche Schleife oder einen Absturz)
-die Idee mit den Objekten ist gut, und auch, die Verbindugen als elastisch anzunehmen.
Die Rechnung selbst w"urde ich wie folgt anlegen:
-jede Masse f"uhrt zun"achst die Bewegungen aus, die die "ausseren Kr"afte und die momentane Eigengeschwindigkeit vorgeben. Diese Bewegung f"uhrt fast immer aus dem Konfigurationsraum heraus.
-danach erfolgen Korrekturschritte, und zwar wirkt auf jede Masse f"ur jede Verbindung eine Kraft proportional zu Istl"ange minus Solll"ange in Richtung der verbundenen Masse (wenn nicht normiert, dann werden lange Verbindungen bevorzugt),aufsummieren und dann in Bewegungsgleichungen umsetzen.
Die Proportionalit"atskonstante kann mit der Schrittl"ange in den Differenzengleichungen zusammengefasst werden, eher das Produkt klein lassen und mehrere solcher Korrekturschritte ausf"uhren (ruckelt evtl. nicht so stark). Abbrechen, wenn die Verbindungsl"angen exakt genug sind.
Die Anzahl der Schritte h"angt auch davon ab, wie weit vom Konfigurationsraum entfernt gestartet wird, also von der (Zeit-)Schrittweite im ersten Schritt.
Die Konfiguration sollte insgesamt im euklidischen Raum m"oglich sein, da sonst die Korrekturschritte ins Unendliche laufen.
Werden die "ausseren Kr"afte zu gross, oder der Zeitschritt, dann kann es passieren, dass das System in eine Lage springt, die zwar benachbart, aber ohne Zerlegen der Konstruktion nicht erreichbar ist.
Danke.
Danke !!!
Ich denke, mit all dem komme ich jetzt klar. Vielleicht habe ich irgendwann mal ein Problem mit der Normierung der Korrekturkräfte, aber dann kann ich mich ja nochmal melden.