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