MathGroup Archive 2007

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

Search the Archive

Re: Why is FindRoot[] HoldAll?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg81941] Re: Why is FindRoot[] HoldAll?
  • From: Szabolcs Horvát <szhorvat at gmail.com>
  • Date: Sun, 7 Oct 2007 05:32:18 -0400 (EDT)

Szabolcs Horvát wrote:
> 1. Either remove the attribute HoldAll to make it clear to the users how 
> this function works (and allow FindRoot to receive Unevaluated arguments 
> so that equations containing NIntegrate[] can be used directly),

I thought a bit more about this, and I can see that HoldAll is necessary 
so that the unknown variable can be made local to FindRoot.

For example,

In[1]:=
a = 3;
FindRoot[a^2 == 2, {a, 1}]

Out[2]= {3 -> 1.4142135623730951}

works, but it still returns 'a' in the result ({a -> solution}), which 
is then replaced with 3.  So even though 'a' is local to FindRoot, it is 
not a good idea to use it as the unknown if it has a value.

> 2. Or prevent FindRoot from evaluating the equation before the unknown 
> has been substituted with a numerical value.

The problem with this is that in certain cases it will make it necessary 
to use Evaluate[]:

eq = a^2 == 1
FindRoot[eq, {a, 1}]

Whether having to use Evaluate[] in certain situations is a greater 
disadvantage than the current problem with NIntegrate etc. is debatable.

Szabolcs


  • Prev by Date: Mathematica Numerical Integration and For Loop
  • Next by Date: Re: rule based program for "Deleting repeated members of a list."
  • Previous by thread: Re: Mathematica Numerical Integration and For Loop
  • Next by thread: Why is FindRoot[] HoldAll?