орбита в математике или питоне - PullRequest
0 голосов
/ 03 октября 2018

у меня 4 разн.уравнения (представляющие уравнения орбиты растений)

x'[t] == px[t] + y[t]
y'[t] == py[t] - x[t]
px'[t] == py[t] - dVx[t]
py'[t] == -px[t] - dVy[t]

, которые я хочу решить для x [t] и y [t] для любого времени t.Указанные переменные

x[0]==0
y[0]==0
px[0]==0
py[0]==2.0
\[Epsilon]==0.2

-dVx[t] == x[t] - (1 - \[Epsilon])*(x[t] + \[Epsilon])/((x[t] + \[Epsilon])^2 + 
           y[t]^2)^(3/2) - \[Epsilon] (x[t] + \[Epsilon] - 
           1)/(((x[t] + \[Epsilon] - 1)^2 + y[t]^2)^(3/2))

-dVy[t] == y[t]*(1 - (1 - \[Epsilon])/((x[t] + \[Epsilon])^2 + y[t]^2)^(3/
           2) - \[Epsilon]/((x[t] + \[Epsilon] - 1)^2 + y[t]^2)^(3/2))

Как я могу получить x, y в любое время и построить график в плоскости x, y.Я попробовал это с NDSolve, но мне не удалось.Мой код

In[49]:= -dVx[t] == x[t] - (1 - \[Epsilon])*(x[t] + \[Epsilon])/((x[t] + \ 
        [Epsilon])^2 + y[t]^2)^(3/2) - \[Epsilon] (x[t] + \[Epsilon] - 
         1)/(((x[t] + \[Epsilon] - 1)^2 + y[t]^2)^(3/2))

Out[49]= -dVx[t] == -(0.16/(0.04 + y[t]^2)^(3/2)) + 
          0.16/(0.64 + y[t]^2)^(3/2)

In[50]:= -dVy[t] == 
          y[t]*(1 - (1 - \[Epsilon])/((x[t] + \[Epsilon])^2 + y[t]^2)^(3/
          2) - \[Epsilon]/((x[t] + \[Epsilon] - 1)^2 + y[t]^2)^(3/2))

Out[50]= -dVy[t] == 
         y[t] (1 - 0.8/(0.04 + y[t]^2)^(3/2) - 0.2/(0.64 + y[t]^2)^(3/2))

In[56]:= DSolve[{x'[t] == px[t] + y[t], y'[t] == py[t] - x[t], 
         px'[t] == py[t] - dVx[t], py'[t] == -px[t] - dVy[t], px[0] == 0, 
         y[0] == 0, py[0] == 2.0, x[0] == 0, \[Epsilon] == 0.2}, {x[t], 
         y[t]}, t]

During evaluation of In[56]:= DSolve::dsfun: 0 cannot be used as a function.

Out[56]= DSolve[{Derivative[1][x][t] == px[t] + y[t], 
         Derivative[1][y][t] == 2., Derivative[1][px][t] == 2. - dVx[t], 
         Derivative[1][py][t] == -dVy[t] - px[t], px[0] == 0, y[0] == 0, 
         py[0] == 2., True, True}, {0, y[t]}, t]

Я новичок в Mathematica, я рад любой помощи.Я мог бы использовать Python, если это проще

1 Ответ

0 голосов
/ 03 октября 2018

Много синтаксических ошибок.Попробуйте вместо этого:

\[Epsilon] = 0.2;
dVx = -(x[
      t] - (1 - \[Epsilon])*(x[
          t] + \[Epsilon])/((x[t] + \[Epsilon])^2 + y[t]^2)^(3/
          2) - \[Epsilon] (x[t] + \[Epsilon] - 
         1)/(((x[t] + \[Epsilon] - 1)^2 + y[t]^2)^(3/2)));
dVy = -(y[
      t]*(1 - (1 - \[Epsilon])/((x[t] + \[Epsilon])^2 + y[t]^2)^(3/
           2) - \[Epsilon]/((x[t] + \[Epsilon] - 1)^2 + y[t]^2)^(3/
           2)));
NDSolve[{
  x'[t] == px[t] + y[t],
  y'[t] == py[t] - x[t],
  px'[t] == py[t] - dVx,
  py'[t] == -px[t] - dVy,
  px[0] == 0,
  y[0] == 0,
  py[0] == 2,
  x[0] == 0
  }, {x[t], y[t], px[t], py[t]}, {t, 0, 1}]
...