2

我正在尝试使用 Mathematica 的 NDSolve[] 使用耦合 ODE 计算沿球体的测地线:

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

问题是我只能输入 x(0) 和 x'(0) 的初始条件,求解器对 x" = 0 的解感到满意。问题是我在球体上的测地线具有 x “(0)= -x(0),我不知道如何告诉mathematica。如果我将此添加为条件,则表示我将 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) 的向量场。

X 。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 回答