Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2000
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2000

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

Search the Archive

Re: Re: Hold, HoldForm, ReleaseHold when Plotting multiple functions

  • To: mathgroup at smc.vnet.net
  • Subject: [mg25562] Re: [mg25514] Re: [mg25481] Hold, HoldForm, ReleaseHold when Plotting multiple functions
  • From: "Benjamin A. Jacobson" <bjacobson at illumitech.com>
  • Date: Sat, 7 Oct 2000 03:36:09 -0400 (EDT)
  • Sender: owner-wri-mathgroup at wolfram.com

OK, after correcting several typos, I was able to solve part of the problem. 

Plot[Evaluate[Map[bandwidth[#,x][[1]]&,{28.5,28.7,28.9,29.1,29.3,29.5,29
.7,29.9}]],{x,140,200}

tries to evaluate, for example, bandwidth[28.5,x].  Sean's bandwidth
function eventually evaluates something like FindRoot[f[28.5,x]==0].  Since
x is a symbol, FindRoot spits back a bunch of error messages.

You can avoid the error messages in two ways:
1) Plot[Evaluate[
    ReleaseHold[
      Map[Hold[bandwidth[#, x]] &, {28.5, 28.7, 28.9, 29.1, 29.3, 29.5, 29 .7,
           29.9}]]], {x, 140, 200}] does the job; or
2) Make sure that f, the function that includes FindRoot, doesn't evaluate
with symbolic arguments, by modifying the definition to
f[var1_?NumericQ,var2_?NumericQ, etc.].  

I prefer the 2nd way because the logic is clearer and because it has
applications besides Plot, Table, etc.  I find that, in general, whenever I
have a function that calls any numerical routine like FindRoot or NDSolve,
I can avoid problems by using _?NumericQ in the calling function.

In Sean's case, both these methods got rid of the error messages.  However,
they still don't produce the exact same plots as 

Plot[{bandwidth[28.5, x][[1]],
	bandwidth[28.7, x][[1]],
	bandwidth[28.9, x][[1]],
  	bandwidth[29.1, x][[1]],
  	bandwidth[29.3, x][[1]],
  	bandwidth[29.5, x][[1]],
  	bandwidth[29.7, x][[1]],
  	bandwidth[29.9, x][[1]]},{x,140,200}]
I can't see why the numerical results should be different, but I'll leave
that to others.

Ben Jacobson
Illumitech Inc.
http://www.illumitech.com

At 11:50 PM 10/5/00 -0400, you wrote:
>
>Ok, I have attached the notebook showing an example of when
>Plot[Evaluate[...]..] does not work the same as explicitly listing each
>function you want to plot.  The error messages all come from FindRoot, one
>of the functions called by the functions I am trying to Plot.  One of the
>resondents to my message said that the only thing he could think of was
>"some weird interaction with another HoldAll function, like FindRoot".  That
>is exactly the case and this "weird interaction" has stalled several
>programming projects for me.  In one particular case using functions far
>more nested than the ones in this notebook, the result is that a certain set
>of functions gives different results when called within another function
>compared to what they give when called directly, so this "weird interaction"
>is a matter of some concern to me and has plagued me for a couple of years
>now.  If anyone has any light to shed on the matter, please respond to:
>Sean.Ross at kirtland.af.mil
>
> <<FPOPO_tuningcurves.mathgroup.nb>> 
>Dr. Sean Ross
>
>AFRL/DELO
>3550 Aberdeen Ave. Building 761
>Kirtland AFB, NM 87117
>
>Office:    (505) 846-9148
>Labs:      (505) 853-6440/846-9289
>Fax:        (505) 853-0485
>Email:     sean.ross at kirtland.af.mil


  • Prev by Date: Re: ? D[f,{x,n}]
  • Next by Date: Re: Syntax
  • Previous by thread: RE: RE: Hold, HoldForm, ReleaseHold when Plotting multiple functions
  • Next by thread: Re: Hold, HoldForm, ReleaseHold when Plotting multiple functions