Frage

Ich versuche Mathematicas NDSolve zu verwenden [] eine geodätische entlang einer Kugel zu berechnen, die gekoppelt ODE mit:

x" - (x" . x) x = 0

Das Problem ist, dass ich nur die Anfangsbedingungen für x eingeben (0) und x '(0) und der Solver ist zufrieden mit der Lösung, wobei x“= 0. Das Problem ist, dass mein geodätischer auf dem Gebiet den Anfang hat Bedingung, daß x "(0) = x (0), die ich keine Ahnung, wie Mathematica zu erzählen. Wenn ich dies als eine Bedingung hinzuzufügen, es sagt ich hinzufüge Getreu die Liste der Bedingungen.

Hier ist mein Code:

s1 = NDSolve[{x1''[t] - (x1[t] * x1''[t] + x2[t] * x2''[t] + x3[t]*x3''[t]) * x1[t] == 0, x2''[t] -  (x1[t] * x1''[t] + x2[t] * x2''[t] + x3[t]*x3''[t]) * x2[t] == 0, x3''[t] - (x1[t] * x1''[t] + x2[t] * x2''[t] + x3[t]*x3''[t]) * x3[t] == 0, x1[0] == 1, x2[0] == 0, x3[0] == 0, x1'[0] == 0, x2'[0] == 0, x3'[0] == 1} , { x1, x2, x3}, {t, -1, 1}][[1]]

Ich möchte, dies ändern, so dass die anfängliche Beschleunigung nicht Null, sondern -x(0) ist.

Danke

War es hilfreich?

Lösung 2

ich dieses Problem durch eine mathematische Umlagerung fixierte eher als meine ursprüngliche Frage Adressierung:

Sei V (t) ein Vektorfeld entlang x (t).

x. V = 0 bedeutet, d / dt (x. V) = (x 'V) + (x. V') = 0

So ist die Gleichung D / dt V = V - '(. V '(. X V') x = V x) +' x hält Das heißt, die Geodätengleichung wird. X“+ (‚ x‘x) x = 0 und so kann es die Anfangsbedingungen gelöst werden unter Verwendung von I hatte ursprünglich

Vielen Dank Janus für den Gang durch und den Hinweis auf die verschiedenen Probleme, die ich mit war schrecklich Code-Layout einschließlich, habe ich viel gelernt durch Ihre neu zu schreiben als auch.

Andere Tipps

Nun, da die Fehlermeldung sagt - NDSolve akzeptiert nur die Anfangsbedingungen für Derivate von Aufträgen strikt kleiner ist als die maximale Ordnung in der ODE erscheinen
. Ich habe das Gefühl, dies eher eine mathematische Frage. Mathematisch {x''[0]=-x0, x[0]==x0}, keine eindeutige Lösung definieren - Sie würden etwas entlang der Linien von {x0.x''[0]==-1, x[0]==x0, x'[0]-x0 x0.x'[0]==v0} zu tun haben, dafür zu arbeiten (NDSolve würde immer noch mit dem gleichen Fehler fehlschlagen). Sie erkennen Sie gerade einen großen Kreis auf der Einheitskugel, nicht wahr?

Übrigens, hier ist, wie ich dein Beispiel codiert würde:

x[t_] = Table[Subscript[x, j][t], {j, 3}];
s1 = NDSolve[Flatten[Thread /@ #] &@{
       x''[t] - (x''[t].x[t]) x[t] == {0, 0, 0},
       x[0] == {1, 0, 0}, 
       x'[0] == {0, 0, 1}
     }, x[t], {t, -1, 1}]
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top