Re: Plotting multiple outputs from cpu intensive functi
- To: mathgroup at smc.vnet.net
- Subject: [mg16875] Re: [mg16745] Plotting multiple outputs from cpu intensive functi
- From: "Richard W. Klopp" <rwklopp at unix.sri.com>
- Date: Mon, 5 Apr 1999 02:24:18 -0400
- Organization: SRI International
- References: <7e1c75$bb6@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Actually, you can sort of hijack the Plot[] adaptive sampling routines
using the following. I learned this in a Mathematica course that I took.
I don't know where they got it. It's great for extracting plot points
for plotting in a more plotting-friendly environment such as Igor or
Sigmaplot.
SetAttributes[AdaptiveSample, HoldAll]
AdaptiveSample[f_, {var_, min_, max_}, opts___] :=
Block[{plot, cmp, pts, bend, div, sampler},
sampler = Plot; If[MatchQ[Hold[f], Hold[{_, _}]],
sampler = ParametricPlot];
{cmp, pts, bend, div} =
{Compiled, PlotPoints, MaxBend, PlotDivision} /. {opts} /.
Options[sampler]; plot =
sampler[f, {var, min, max}, Compiled -> cmp, PlotPoints -> pts,
MaxBend -> bend, PlotDivision -> div, Axes -> none, Frame ->
False,
DisplayFunction -> Identity, Prolog -> {}, Epilog -> {}];
First /@ Cases[First[plot], _Line, Infinity]]
jns1 wrote:
>
> The best would be if the adaptive choices of x for f (with g evaluated
> and stored also) could be stored as starting points for the adaptive
> values for g. Then, fewer extra evaluations of g (and unavoidably, f)
> would be needed. This certainly does not seem difficult to program
> outside of the Plot function and then use ListPlot on the result. It
> would be even easier if the algorithm that Mathematica uses inside Plot
> to choose points was available. Then it could be modified with your own
> MaxBend, PlotDivision, PlotPoints arguments for this multiple function
> case.
>
> See, this is an argument for Open Source Mathematica!
>
> Joel
>
> Allan Hayes wrote:
> >
> > Ted,
> > One problem is that Plot[{f,g}, {x,a,b}] makes adaptive choices of x for f
> > and then independently for g. For this and maybe for other reasons the
> > remembered values may not be the ones needed. One way out might be to make
> > interpolating functions from the remembered values (a linear interpolation
> > would likely be sufficient). Of course we might then have to deal with
> > evaluating outside the data range.
> >
> > Allan