       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:=
a = 3;
FindRoot[a^2 == 2, {a, 1}]

Out= {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?