StepMonitor problem
- To: mathgroup at smc.vnet.net
- Subject: [mg127433] StepMonitor problem
- From: Daniel <dosadchy at its.jnj.com>
- Date: Wed, 25 Jul 2012 02:29:55 -0400 (EDT)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- Delivered-to: mathgroup-newout@smc.vnet.net
- Delivered-to: mathgroup-newsend@smc.vnet.net
Hello,
I use NDSolve to solve a differential system of equations and I need to plot the solution during the execution of NDSolve. I use the StepMonitor option.
For a differential system it works great, at each step I get the time and the function values.
But - for an algebraic-differential system it doesn't work. Instead of function values I get the function derivative values! (took me some time to realize that). The EvaluationMonitor correctly gives the function values.
Do I use the StepMonitor correctly?
Example to illustrate the problem:
Solve an algebraic-differential system, while saving values with StepMonitor and EvaluationMonitor:
{sol, {dataStep, dataEv}} = Reap[
NDSolve[{x'[t] == y[t]^2 + x[t] y[t], 2 x[t]^2 + y[t]^2 == 1,
x[0] == 0}, {x, y}, {t, 0, 10},
StepMonitor :> Sow[{t, x[t], y[t]}, "stepMonitor"],
EvaluationMonitor :> Sow[{t, x[t], y[t]}, "evaluationMonitor"]
],
{"stepMonitor", "evaluationMonitor"}];
Plotting the solution and EvaluationMonitor shows correspondence:
Plot[{x[t], y[t]} /. sol // Evaluate, {t, 0, 10}, PlotRange -> All]
ListPlot[
Transpose[{dataEv[[1, All, 1]], #}] & /@
Transpose[dataEv[[1, All, 2 ;;]]], PlotRange -> All]
Plotting the StepMonitor shows discrepancy:
ListPlot[Transpose[{dataStep[[1, All, 1]], #}] & /@
Transpose[dataStep[[1, All, 2 ;;]]], PlotRange -> All]
Plotting the solution derivatives shows correspondence to StepMonitor:
Plot[{x'[t], y'[t]} /. sol // Evaluate, {t, 0, 10}, PlotRange -> All]