【问题标题】:Can't DSolve two-body problem using Mathematica?不能使用 Mathematica 解决二体问题吗?
【发布时间】:2011-09-30 17:33:46
【问题描述】:

编辑:

@auxsvr 是正确的,我的力方程是错误的,关于 -3/2 指数。

另一种看待它的方式是简单地看二维并考虑一个 从原点作用的力,与 1/r^2 成正比,就像重力一样, 其中 r 是到原点的距离。

在 (x,y) 处,力沿 (-x,-y) 方向作用。然而,那是 只是方向,而不是大小。如果我们使用 k 作为常数 比例,力是(-kx,-ky)。

因此力的大小为 Sqrt[(-kx)^2+(-ky)^2],或 k*Sqrt[x^2+y^2] 或 k*Sqrt[r^2] 或 k*r

由于力的大小也是 1/r^2,这给了我们 k= 1/r^3。

因此力为 (-x/r^3, -y/r^3)。

因为我最初使用 r^2 作为我的主要数量,所以是 (r^2)^(-3/2),这就是 3/2 的来源。

这实际上使我的问题无效,尽管它仍然使 有趣的理论讨论。

我用正确的方程重试了这个 Mathematica,但仍然得到 没有答案。正如其他指出的那样,结果只是下面的一个椭圆 某些条件(在其他情况下可能是抛物线或双曲线)。

此外,虽然最终的轨道是圆锥截面,但 初始轨道可以螺旋进出,直到最终的圆锥截面轨道 已完成。

编辑到此结束

我正在使用 Mathematica 解决二体问题:

DSolve[{
    d2[t] == (x1[t]-x0[t])^2 + (y1[t]-y0[t])^2 + (z1[t]-z0[t])^2,
    D[x0[t], t,t] == (x1[t]-x0[t])/d2[t],
    D[y0[t], t,t] == (y1[t]-y0[t])/d2[t],
    D[z0[t], t,t] == (z1[t]-z0[t])/d2[t],
    D[x1[t], t,t] == -(x1[t]-x0[t])/d2[t],
    D[y1[t], t,t] == -(y1[t]-y0[t])/d2[t],
    D[z1[t], t,t] == -(z1[t]-z0[t])/d2[t]
    },
    {x0,y0,z0,x1,y1,x1,d2},
    t
]

但我回来了:

因变量比方程少,所以系统是超定的。

我数了 7 个方程和 7 个因变量?

事实上,系统是半不确定的,因为我没有提供时间 0 的位置和速度。

我意识到我的方程本身对于二体问题可能是错误的,但我仍然想知道为什么 Mathematica 会抱怨这个问题。

【问题讨论】:

  • 您将 x1 列为变量两次,而 z1 根本没有,因此出现了消息。但修复它不足以让 DSolve 给出结果,它只会删除错误消息。
  • @belisarius,尝试编写这样的函数会很有趣。不过,写起来可能很邪恶。迷人,但邪恶。
  • @rcollyer 你想让 DSolve 弄清楚如何使用极坐标?这只是冷...
  • @Null 你是不是用 Unicode 绕过了单词过滤器?狡猾的。

标签: wolfram-mathematica


【解决方案1】:

NDSolve怎么样?

d2[t_] = (-x0[t] + x1[t])^2 + (-y0[t] + y1[t])^2 + (-z0[t] + 
    z1[t])^2; sol = {x0, y0, z0, x1, y1, z1} /. 
  NDSolve[{x0''[t] == (-x0[t] + x1[t])/d2[t], 
     y0''[t] == (-y0[t] + y1[t])/d2[t], 
     z0''[t] == (-z0[t] + z1[t])/d2[t], x1''[t] == -x0''[t], 
     y1''[t] == -y0''[t], z1''[t] == -z0''[t], x0[0] == 0, y0[0] == 0,
      z0[0] == 0, x1[0] == 1, y1[0] == 0, z1[0] == 0, x0'[0] == -0.5, 
     y0'[0] == 1, z0'[0] == 0.5, x1'[0] == 0.5, y1'[0] == -1, 
     z1'[0] == -0.5}, {x0, y0, z0, x1, y1, z1}, {t, 0, 120}][[1]]

r = 3;
 Animate[
  Graphics3D[
   {
    PointSize -> 0.05,
    Point[{sol[[1]][t], sol[[2]][t], sol[[3]][t]}],
    Point[{sol[[4]][t], sol[[5]][t], sol[[6]][t]}],
    Red,
    Line[Table[{sol[[1]][t1], sol[[2]][t1], sol[[3]][t1]}, {t1, 0, t, 0.1}]],
    Green,
    Line[Table[{sol[[4]][t1], sol[[5]][t1], sol[[6]][t1]}, {t1, 0, t, 0.1}]]
   }, 
   PlotRange -> {{-r, r}, {-r, r}, {-r, r}}
  ], {t, 0, 120}, AnimationRate -> 4
 ]

【讨论】:

  • 没有暗物质,没有诺贝尔奖
【解决方案2】:

我很惊讶没有人注意到每个人都错误地写出了运动方程,这从图中很明显,因为两个物体的引力势中的有界轨道总是闭合的(伯特兰定理)。正确的运动方程是

{x0''[t] == (-x0[t] + x1[t])/d2[t]^(3/2), 
 y0''[t] == (-y0[t] + y1[t])/d2[t]^(3/2),
 x1''[t] == -x0''[t], 
 y1''[t] == -y0''[t]}

d2[t_]:= (x1[t]-x0[t])^2 + (y1[t]-y0[t])^2

因为中心力场的运动是平面的。此外,必须适当设置初始条件,否则质心移动,轨道不再是圆锥截面。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-21
    相关资源
    最近更新 更多