如何使arcsin不是循环的,并在每个点进行评估

时间:2015-05-12 04:47:17

标签: wolfram-mathematica

所以我使用NDSolve在mathematica中求解一组四个微分方程。我也使用ArcSin作为方程的一部分。现在,我的ArcSin值对y的值不敏感,导致解决方案定期生成。 例如,对于x = 1,y = 1,我将ArcSin作为pi / 4。如果我把它设为x = 1,y = -1,它仍然是pi / 4。如何避免循环行为?我知道,条件应该是如果y <0,则将pi添加到解决方案中。我没能正确地写它。

任何帮助表示赞赏。

     ClearAll["Global`*"]
        \[Alpha]1 = 0.5;
        \[Sigma]1 = -1;
        Subscript[\[CapitalTheta], N] = \[Pi]/2;
        traceractive = 
        NDSolve[{x'[
         t] == ((-\[Alpha]1*(x[t] - 
             X[t]))/((x[t] - X[t])^2 + (y[t] - Y[t])^2)^(3/
          2)) - (2*
           Cos[Subscript[\[CapitalTheta], N] - 
             ArcSin[(x[t] - X[t])/((x[t] - X[t])^2 + (y[t] - Y[t])^2)^(1/
              2)]]*\[Alpha]1*\[Sigma]1)/((x[t] - X[t])^2 + (y[t] - 
             Y[t])^2)^(3/
         2) + ((y[t] - Y[t])*
           Sin[Subscript[\[CapitalTheta], N] - 
             ArcSin[(x[t] - X[t])/((x[t] - X[t])^2 + (y[t] - Y[t])^2)^(1/
              2)]]*\[Alpha]1*\[Sigma]1)/((x[t] - X[t])^2 + (y[t] - 
             Y[t])^2)^2, 
       y'[t] == ((-\[Alpha]1*(y[t] - 
             Y[t]))/((x[t] - X[t])^2 + (y[t] - Y[t])^2)^(3/
          2)) - (2*
           Cos[Subscript[\[CapitalTheta], N] - 
             ArcSin[(x[t] - X[t])/((x[t] - X[t])^2 + (y[t] - Y[t])^2)^(1/
              2)]]*\[Alpha]1*\[Sigma]1)/((x[t] - X[t])^2 + (y[t] - 
             Y[t])^2)^(3/
         2) - ((x[t] - X[t])*
           Sin[Subscript[\[CapitalTheta], N] - 
             ArcSin[(x[t] - X[t])/((x[t] - X[t])^2 + (y[t] - Y[t])^2)^(1/
              2)]]*\[Alpha]1*\[Sigma]1)/((x[t] - X[t])^2 + (y[t] - 
             Y[t])^2)^2, X'[t] == 0, Y'[t] == 0, x[0] ==  0.1, 
       y[0] == 0.02, X[0] == 0, Y[0] == 0}, {x, y, X, Y}, {t, 0, 1000}]

xlist = Flatten[Table[x[t] /. traceractive, {t, 0, 100}]];
ylist = Flatten[Table[y[t] /. traceractive, {t, 0, 100}]];

Xlist = Flatten[Table[X[t] /. traceractive, {t, 0, 100}]];
Ylist = Flatten[Table[Y[t] /. traceractive, {t, 0, 100}]];

Tracer = Transpose@{xlist, ylist};
Length[Tracer];
Activep = Transpose@{Xlist, Ylist};

P1 = ListPlot[Tracer, Joined -> True]
P2 = ListPlot[Activep,  PlotMarkers -> Automatic]

Show [P1, P2, Graphics[{PointSize[0.025], Point[{Tracer[[1]]}]}], 
 Graphics[{PointSize[0.025], Red, Point[{Tracer[[Length[Tracer]]]}]}],
  PlotRange -> All, AxesOrigin -> {0, 0}]
(*Black point: Tracer initial position, Red point: Tracer final \
position*)

0 个答案:

没有答案