MathGroup Archive 2004

[Date Index] [Thread Index] [Author Index]

Search the Archive

Using StoppingTest in NDSolve

  • To: mathgroup at smc.vnet.net
  • Subject: [mg49533] Using StoppingTest in NDSolve
  • From: Urijah Kaplan <uak at sas.upenn.edu>
  • Date: Fri, 23 Jul 2004 05:59:21 -0400 (EDT)
  • Organization: University of Pennsylvania
  • Sender: owner-wri-mathgroup at wolfram.com

Hello,

I don't know if what I want to do is possible...briefly, I have a 
numerical diff. equation of a chaotic pendulum, that is I trace the path 
of a pendulum over three magnets and the pendulum eventually stops over 
one of them. In order to save (computational) time, I would like NDsolve 
to stop when it's clear that the pendulum is going to stay over one of the 
magnets. I also want it to progress for a minimum of time, say t (the 
independent variable) going to 100.

Here is a what I tried for a similar example

NDSolve[{f''[x] + f[x] == 0, f[0] == 0, f'[0] == 1}, f, {
     x, 0, 10}, StoppingTest -> (Which[x < 5,
       False, Abs[f[x] - f[x - 1]] < .1, True])]

here if x is less than 5 I want to continue; and if 5<x<10, and if the 
absolute difference  between f[x] and f[x-1] is less than a small amount 
   (say .1) NDSolve will stop. 		

I'm pretty sure the problem here is that Mtm doesn't know what to do with 
f[x-1]. Does anyone have any suggestions? Also, if someone can figure out 
how to do this, how would I save the stopping value to a variable? Say 
NDSolve stopped at t=20.2, (i.e. the InterpolatingFunction stops at 20.2) 
how do I save that number.

Thank you very much for any help.


		--Urijah Kaplan

If it helps, here is the actual problem

R = 0.15;
x1 = Sqrt[3] - 1; x2 = -Sqrt[3] - 1; x3 = 0 - 1;
y1 = 1; y2 = 1; y3 = -2;
c = 0.2;
d = 0.25;
magnetx1 = Derivative[2][x][t] +
      R*Derivative[1][x][t] - (x1 - x[t])/
       Sqrt[(x1 - x[t])^2 + (y1 - y[t])^2 + d^2]^3 -
      (x2 - x[t])/Sqrt[(x2 - x[t])^2 + (y2 - y[t])^2 +
          d^2]^3 - (x3 - x[t])/
       Sqrt[(x3 - x[t])^2 + (y3 - y[t])^2 + d^2]^3 +
      c*x[t] == 0; magnety1 =
    Derivative[2][y][t] + R*Derivative[1][y][t] -
      (y1 - y[t])/Sqrt[(x1 - x[t])^2 + (y1 - y[t])^2 +
          d^2]^3 - (y2 - y[t])/
       Sqrt[(x2 - x[t])^2 + (y2 - y[t])^2 + d^2]^3 -
      (y3 - y[t])/Sqrt[(x3 - x[t])^2 + (y3 - y[t])^2 +
          d^2]^3 + c*y[t] == 0;




solution = NDSolve[{magnetx1, magnety1, x[0] == 2.5,
     Derivative[1][x][0] == 0, y[0] == 2.5,
     Derivative[1][y][0] == 0}, {x, y}, {t, 0, 100},
    MaxSteps -> 10000];
xy[t_] = {x[t], y[t]} /. solution;
Plot[Evaluate[{x[t], y[t]} /. solution], {t, 0, 50},
   PlotRange -> All]


  • Prev by Date: Re: Quantum Mechanics, Boundary Value Problem
  • Next by Date: Re: Plotting 2D functions with discontinuities
  • Previous by thread: DisplayTogether, multiple ListPlots, compound paths, and Illustrator/EPS problems
  • Next by thread: Re: Using StoppingTest in NDSolve