質問

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

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

問題は、x(0)とx '(0)の初期条件のみを入力でき、ソルバーはx "= 0のソリューションに満足していることです。 "(0)= -x(0)、Mathematicaにどのように伝えるかわからない。これを条件として追加すると、条件のリストに真実を追加すると表示されます。

これが私のコードです:

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).

ありがとう

役に立ちましたか?

解決 2

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

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は、測地線方程式が次のようになることを意味します。そのため、私が元々持っていた初期条件を使用して解決できます。

ヤヌスは、恐ろしいコードレイアウトを含めて私が抱えていたさまざまな問題を通過し、指摘してくれてありがとう、私はあなたの書き直しを通して多くのことを学びました。

他のヒント

さて、エラーメッセージが示すように、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}]
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top