MathGroup Archive 1999

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

Search the Archive

Plotting multiple outputs from cpu intensive function

  • To: mathgroup at smc.vnet.net
  • Subject: [mg16745] Plotting multiple outputs from cpu intensive function
  • From: jns1 <jns1 at madmax.hrl.HAC.COM>
  • Date: Wed, 24 Mar 1999 02:23:55 -0500
  • Organization: LRH
  • Sender: owner-wri-mathgroup at wolfram.com

Here is one that has stumped me for a while.
Now I need to do it again, and would appreciate any advice.

Say you are using a module to calculate something that takes quite a
LONG while.

It has 2 or more outputs in an output list, or whatever is convenient:

f[x_]:=Module[{...},
 ...long cpu intensive stuff...;
{out1,out2}]

out1 and out2 are calculated together because they are closely related
and share a lot of the needed cputime. How would you go about plotting
out1 and out2 together in the same graph without duplicating the
cputime?

The obvious is 

Plot [f[x],{x,x1,x2}]

but it doesn't work because it tries to plot f[x] before evaluating f[x]
as a list and bombs.
This suggests trying Evaluate[f[x]] instead of f[x] in the plot
statement, which
does work if it is o.k. to immediately evaluate f[x] before the
plotting. But of
course this seldom is doable. In my case there are numerical
integrations or inputting
from files going on, so delayed evaluation must be used.

So I am stuck with 2 alternatives:

1) Make a table of values of {out1,out2}'s for different x's and then
use ListPlot or

2) Make 2 separate functions, f1[x_]:=f[x][[1]], and f2[x_]:=f[x][[2]]
and use
Plot[{f1[x],f2[x]},{x,x1,x2}]. This works fine, but it DOUBLES the cpu
time, for no reason.

Is there perhaps some combination of Hold's, Evaluate's, or whatever
where I can plot
things like this together conveniently?

Thanks,

Joel


  • Prev by Date: Re: combining two plots
  • Next by Date: Mathlink problem
  • Previous by thread: Re: Equation numbers
  • Next by thread: Re: Plotting multiple outputs from cpu intensive function