2

MathematicaのNDSolve[]を使用して、結合されたODEを使用して球に沿った測地線を計算しようとしています。

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

問題は、x(0)とx'(0)の初期条件しか入力できず、ソルバーはx "= 0の解に満足していることです。問題は、球上の測地線の初期条件がxであるということです。 "(0)= -x(0)、これは数学にどのように伝えるかわかりません。これを条件として追加すると、条件のリストにTrueを追加していると表示されます。

これが私のコードです:

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]]

これを変更して、初期加速度がゼロではなく、になるようにします-x(0)

ありがとう

4

2 に答える 2

0

私は、元の問題に対処するのではなく、数学的な再配置によってこの問題を修正しました。

V(t)をx(t)に沿ったベクトル場とします。

バツ 。V = 0は、d / dt(x。V)=(x'。V)+(x。V')=0を意味します。

したがって、方程式D / dt V = V'-(x。V')x = V'+(x'。V)xが成り立つこれは、測地線方程式が次のようになることを意味します。x "+(x'。x')x = 0ですから、私が最初に持っていた初期条件を使用して解決することができます。

恐ろしいコードレイアウトを含む私が抱えていたさまざまな問題を経験して指摘してくれたJanusに感謝します。また、あなたの書き直しを通して多くのことを学びました。

于 2010-06-18T01:03:43.807 に答える
0

エラーメッセージにあるように、NDSolveは、ODEに表示される最大次数よりも厳密に小さい次数の導関数の初期条件のみを受け入れます。
これは数学の問題だと思います。数学的には{x''[0]=-x0, x[0]==x0}、は一意のソリューションを定義していません。それを解決するには、それに沿って何かを行う必要があります{x0.x''[0]==-1, x[0]==x0, x'[0]-x0 x0.x'[0]==v0}(NDSolveは同じエラーで失敗します)。単位球上で大円を描くだけだと気づいていますよね?

ちなみに、これが私があなたの例をどのようにコーディングしたかです:

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}]
于 2010-06-17T15:27:21.913 に答える