Autor Beitrag
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Do 06.09.07 02:25 
Hi,

für ein kleines Projekt an dem ich sitze, hab ich eine kleine Frage in Bezug auf eine Berechnung, die ich ausführen muss.

Aber erstmal zum Projekt.
Gegeben ist ein beliebiger, zusammenhängender Graph aus N Punkten (N > 0) mit beliebig vielen Kanten.
Als Darstellung dieses Graphen wird jedem Knoten ein Punkt zugeordnet und jede Kante als Strecke (gerade) zwischen diesen Punkten eingezeichnet.

Soviel vorweg.
Nun fängt das Problem an. Die Startpunkte des Graphen werden zufällig (derzeit in der Fläche, später dann im Raum) verteilt. Da das natürlich ein heilloses Durcheinander ergibt ;-), sollen die Positionen der Knotenpunkte nach folgenden Regeln angepasst werden:
- Verbundene Knoten ziehen sich an (FG+FE)
- Nicht verbundene Knoten stoßen sich ab (FE).
Physikalisch gebildete Menschen könnten jetzt vermuten, dass FG für Gewichtskraft und FE für elektromagnetische Kraft stehen - tun sie auch.

Nun aber zum Problem:
Die in der Wiki zu findenden Formeln:
ausblenden Quelltext
1:
FG = - G * (mA * mB) / r^2					

und
ausblenden Quelltext
1:
FE = 1 / (4*pi*E0) * (qA * qB) / (r^2) [qA=qB]					

gelten AFAIK nur für r=konstant.

Wenn man aber die Massepunkte frei beweglich hat, so kann man die Bewegung der Knoten nicht aus diesen statischen Gleichungen ableiten, sondern muss diese in Abhängigkeit der jeweils anderen noten als Differenzial-Gleichungssystem aufstellen. (Ich hoff, damit lieg ich richtig).

Wer kann mir hir nun nen Ansatz geben, wie man dieses Gleichungssystem 1. aufstellt und 2. eine Beschreibung für das Vorgehen zur Lösung geben? (Eine etwas detailliertere Ausführung wäre hilfreich, da ich das ja auf N Knoten erweitern muss).

Wer ein Beispiel brauch:
A := (edges: (B,D); mass: 5; pos:(X:-2; Y:-2));
B := (edges: (A,C); mass: 7; pos:(X: 0; Y:-1));
C := (edges: (B,D); mass: 3; pos:(X: 2; Y: 0));
D := (edges: (A,C); mass: 9; pos:(X: 0; Y: 2));
Herauskommen soll dann grob, dass die vier Punkte relativ zum Schwerpunkt ein Quadrat bilden (also sich daran annähern).

TIA,
BenBE.

P.S.: Ich leg zwar keinen 100%igen Wert auf die wissenschaftliche Korrektheit, aber zumindest vom Ansatz her sollte diese Simulation korrekt funktionieren.
P.P.S.: Verbundene Knoten haben sowohl FG als auch FE, damit ein Mindestabstand hergestellt wird (und also nicht die gesamte Konstruktion in sich zusammenfällt).
P.P.P.S.: Mein Projekt hat nichts mit der Aufgabe im BWInf zu tun.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Allesquarks
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 510

Win XP Prof
Delphi 7 E
BeitragVerfasst: Fr 07.09.07 13:57 
Für die Gravitationskraft existiert immer ein Potential (Superposition der einzelnen Massen"ladungen") sowie auch für das Coulombgesetz. Kraft ist der Gradient des Potentials. Darüber lässt sich also leicht das Problem formulieren es zu lösen ist etwas schwieriger. Für ein Zentralpotential musst du mal unter Keplerproblem nachschauen oder ähnlich. Streng genommen ist dein Problem aber keins, da n Massepunkte selten ein Zentralpotential bewirken. Schon das Dreikörperproblem der Planetenbewegung (die dritte Masse stört das Zentralpotential) ist bisher nicht gelöst.
Du könntest je nach der Anordnung der "Ladungen immer nur die nächste oder dominierendste betrachten und damit falls beide Feldursprünge für FE und FG zusammenfallen dann auf ein Zweikörperproblem reduzieren ist aber schon eine Näherung. Ansonsten musst du whl oder übel das iterativ lösen das heißt Impulsänderung gemäß der wirkenden Kraft. Da helfen dir vielleicht die diversen Runge Kutta Approximationen.
BenBE Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Fr 07.09.07 17:08 
Das mit Gravitation\Coulomb-Kraft war eher als Veranschaulichung gedacht, um grob zu erklären, wie es zu verstehen ist.

Das physikalisch gesehen die Gravitation ständig wirkt, ist mir als Ex-Leistungskurser klar ;-) Grob ging es ja darum, dass die besagten "Kräfte" je nach Konstellation wirken: Wenn ich also Knotenpunkte habe, diemit einander verbunden sind, dass diese nach und nach einander näher positioniert werden; Knoten, die keine Verbindung zueinander haben potentiell weiter auseinander liegen. Quasi eine "Selbstneuordnung".

In Bezug auf das Drei-Körper-Problem: Ist klar, da das in den Bereich chaotische Systeme zählt. Und die sind approximierbar, aber nicht vollständig im Voraus berechenbar.

Ich such ggf. auch noch mal meine QB-Implementation raus, die die klassischen Gleichungen (also ohne Differntial-Ansatz) genutzt hat. Das hat für große Abstände der Punkte (da waren es wirklich Massepunkte im physikalischen Sinne) die Simulation auch durchaus "korrekte" Ergebnisse ergeben. Jedoch wenn sich zwei Punkte zu nah kamen, hatte man da schnell mal "Gravitationskatapulte", wo ein Punkt gleich mal 20000 Einheiten aus'm Bildschirm geschossen wurde.

Hauptproblem von mir ist aber immer noch die Differential-Gleichungen an sich aufzustellen, wenn ich sie denn approximieren will. ;-) Da würd ich gern etwas mehr Infos haben, wie man dort ran geht.

Anm.: Ich berechnet immer nur "einen Schritt" für die Positionen und setzte danach u.U. einige Parameter neu (also z.B. die Knotenmasse), wenn sich diese durch die Simulationslogik eines Graphen geändert haben. D.h. ich brauch keine vollständig stetig-definierten Funktionen. Genauso Rückwärtsgang wird nicht benötigt.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Allesquarks
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 510

Win XP Prof
Delphi 7 E
BeitragVerfasst: So 09.09.07 20:02 
Der Satz immer ein Potential sollte nicht heißen es wirkt immer ne Kraft, sondern es exisitert immer ein Mathematisches Ding namens Potential, denn nur dann ist die Kraft der Gradient und die Gleichungen meiner Meinung nach besonders schön. Man könnte sogar darüber nachdenken das Potential an sich "infinetesimal" zu nähern, denn bei vielen Knoten und Punkten und so ist eine Neuberechnung der effektiven Kraft wahrscheinlich ebenso aufwändig wie die Bahnberechnung an sich.
Prinzipiell erstmal (Tech Style):
\nabla \phi=\frac{d\vec p}{d t} und \phi=\sum_{k=1}^n \gamma \frac{M_1 M_2}{r-r_knoten}
Da der Radius bzw der Abstand der gerade betrachteten "Ladung" zum Aufpunkt der Kraft einfach steht ist das also schon die Stammfunktion und damit halt auch schon das Potential. Leider ist diese Summe aus Differenzen analytisch halt ziemlich häßlich und wahrscheinlich sogar das rechenaufwändigste daran.
Wenn du das Gradient bilden nicht magst (Das würde man halt einfach über Differenzenquotient des Potentials in der Nähe der betrachteten Stelle machen) musst du das halt über Summation der vektoriellen Ausdrucksweise der Kräfte machen.
Eigentlich musst du dich nur noch für das Näherungsverfahren entscheiden.
BenBE Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mo 10.09.07 00:11 
Und jetzt noch mal zum Mitschreiben für jemanden, der den Teil Reihenentwicklung an der Uni nur bestanden hat, weil die andere Prüfungshälfte Mengenlehre war???

Aber rein zum Verständnis: Hinten die zweite in TeX-Style angegebene Funktion ist rein erstmal die statisch von mir oben erwähnte Gleichung für die Kraft? Ich glaub so nen ähnlichen Ansatz hatt ich schon mal in nem früheren Testprogramm (QBasic, "Planetensimulation").

Wichtig ist am Ende ja hauptsächlich, dass diese Simulation der Flugbahnen zwar halbwegs genau und "Knick-frei" verläuft, aber dennoch nicht die meiste Rechenzeit benötigt. Auch Vorberechnungen bei geänderten Parametern sollten minimal gehalten werden, da sich später im Programm die Beziehungen (Kanten) zwischen Knoten (und das Gewicht der Knoten) häufig ändern.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.