2
$\begingroup$

I attempted to simulate the motion of a particle approaching to a potential hill. The particle should experience a force of -1/r^2, if the equation for the potential hill is 1/r. So the acceleration for the particle should be -c/r^2, where c is an arbitrary proportional constant. The particle is expected to bounce back when close enough to the hill, but it passed through the hill instead, despite of different values of c. Is there anything wrong with my code or the equations of motions. Secondly, when PlotPoints->10 changed to PlotPoints->30 in order to obtain an intact potential hill, the program becomes unbearable slow. How to get around this?

Clear[x, y, z, t, ux, uy, bx, by, cnt];
t = -2;
ux = 1; uy = 1;
bx = -1; by = -1;
obx = -1; oby = -1;
cnt = 0.2;
ax[x_, y_] := -cnt*x/( x^2 + y^2)^(3/2)  ;
ay[x_, y_] := -cnt*y/( x^2 + y^2)^(3/2)   ;

field = ContourPlot3D[
   1/(x^2 + y^2)^(1/2) - z == 0, {x, -2, 2}, {y, -2, 2}, {z, 0, 50}, 
   PlotPoints -> 10];

particle[t_] := (
   bx = ux t + 0.5 ax[obx, oby] t^2;
   by = uy t + 0.5 ay[obx, oby] t^2;
   bz = 1/(bx^2 + by^2)^(1/2) ;
   obx = bx; oby = by;
   Graphics3D[{
     Red, Sphere[{bx, by, bz}, 0.1]}]);

Dynamic[
 Refresh[
  Row[{Show[field, particle[t], ImageSize -> {300, 300}], 
    If[t < 2, t = t + 0.1, t = -2]}]
  , UpdateInterval -> 1
  ]
   ]

enter image description here

$\endgroup$

1 Answer 1

8
$\begingroup$

A couple things: You don't update velocity (obx and oby appear to be unused?). You do your timestep wrong (you want x+=velocity*timestep, not x=velocity*time!). You also have your direction of your force wrong. You should take the negative gradient of potential. The gradient of 1/r is -1/r^2. The negative of that is 1/r^2. So you get the common sense result - it pushes away from the center.

The usual way to do this, though, is to use NDSolve:

soln = First@NDSolve[{x''[t] == x[t]/(x[t]^2 + y[t]^2)^(3/2),
     y''[t] == y[t]/(x[t]^2 + y[t]^2)^(3/2),
     x[0] == -1,
     y[0] == -1,
     x'[0] == 1.8,
     y'[0] == 2}, {x, y}, {t, 0, 2}];

plt = Plot3D[1/Sqrt[x^2 + y^2], {x, -2, 2}, {y, -2, 2}, 
   PlotRange -> {-1, 5}];

Animate[Show[plt, 
   Graphics3D[{Red, 
     Sphere[{x[t], y[t], 1/Sqrt[x[t]^2 + y[t]^2]}, 0.1]}],BoxRatios->Automatic] /. 
  soln, {t, 0, 2}]
$\endgroup$
3
  • 1
    $\begingroup$ (+1) Just a suggestion: your sphere will appear distorted if one looks closely. This is because the axes are not equally spaced in Plot3D. The way to fix this would be to include the option BoxRatios -> Automatic in Show. $\endgroup$
    – Jens
    Commented Aug 7, 2014 at 4:45
  • $\begingroup$ @Jens Thanks! added. $\endgroup$
    – user273
    Commented Aug 7, 2014 at 5:17
  • $\begingroup$ @NeuroFuzzy Thanks a lot. Much clearer to the approach of the problem now. $\endgroup$
    – Putterboy
    Commented Aug 7, 2014 at 5:51

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.