Monitoring/collecting evaluations
- To: mathgroup at smc.vnet.net
- Subject: [mg91609] Monitoring/collecting evaluations
- From: vasil michev <michev at gmail.com>
- Date: Fri, 29 Aug 2008 04:10:23 -0400 (EDT)
Is there a way (built-in function) to monitor the steps taken in evaluation or collect sample points without doubling the evaluation time? Tried using EvaluationMonitor with/without Sow/Reap and the results are almost the same, and not using it takes twice less time. here are some code samples: (a fairly common function in physics, with few secs evaluation time) f[m_]:=NIntegrate[UnitStep[3-m-Cos[x]-Cos[y]-Cos[z]],{x,-\[Pi],\[Pi]}, {y,-\[Pi],\[Pi]},{z,-\[Pi],\[Pi]},MaxPoints->1000000,Method- >"LocalAdaptive"]/8/\[Pi]^3 (just the plot) AbsoluteTiming[Plot[f[x],{x,0,1},PlotPoints->10,MaxRecursion->1]] 35.8700000 (simple monitoring) AbsoluteTiming[values={}; Monitor[Plot[f[x],{x,0,1},PlotPoints->10,MaxRecursion- >1,EvaluationMonitor:>AppendTo[values,{x,f[x]}]],ListPlot[values]]] 69.2440000 -> double time, as f[x] is evaluaed twice (Sow/Reap) AbsoluteTiming[evals={}; {plot,evals}=Reap[Plot[f[x],{x,0,1}, PlotRange->All,PlotPoints- >10,MaxRecursion->1,EvaluationMonitor:>Sow[{x,f[x]}]]];Show[plot]] 69.5930000 -> same (Monitoring with Sow/Reap) AbsoluteTiming[evals={}; {plot,evals}=Reap[Monitor[Plot[f[x],{x,0,1}, PlotRange->All,PlotPoints- >10,MaxRecursion- >1,EvaluationMonitor:>AppendTo[evals,Sow[{x,f[x]}]]],ListPlot[evals]]]; Show[plot]] 69.8420000 -> same So, does anyone know how to achieve that? Im usualy dealing with ContourPlot3D's of similar integrals, each of which takes a minute to evaluate, and I do it for a lot of points, there's quite a difference between calculation running for a week or 2 weeks. I know it takes just a few lines of code to do this, but im looking for something applicable to a broader range of functions