Mathematica中具有非线性ODE的初始条件

时间:2010-06-17 13:24:48

标签: wolfram-mathematica ode

我正在尝试使用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)

由于

2 个答案:

答案 0 :(得分: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}]

答案 1 :(得分: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的访问并指出了我遇到的各种问题,包括可怕的代码布局,我通过重写也学到了很多东西。