MathGroup Archive 2006

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

Search the Archive

RE: Behaviour of FindRoot

  • To: mathgroup at smc.vnet.net
  • Subject: [mg65147] RE: [mg65096] Behaviour of FindRoot
  • From: Hartmut.Wolf at t-systems.com
  • Date: Wed, 15 Mar 2006 06:30:44 -0500 (EST)
  • Sender: owner-wri-mathgroup at wolfram.com


> -----Original Message-----
> From: dh [mailto:dh at metrohm.ch] 
To: mathgroup at smc.vnet.net
> Subject: [mg65147] [mg65096] Behaviour of FindRoot
> 
> Hi,
> in a previous thread: "optimization nested in root-finding" the 
> following as yet unanswered problem poped up (simplified):
> 
> Remove[f1];
> f1[x1_] := (Print["x1=",x1];
>        x1^2
>        );
> FindRoot[f1[x] == 2., {x, 1}]
> 
> This will print "x1=x" showing that f1 was called with an 
> unevaluated x, 
> despite FindRoot having the Attribute "HoldAll". There is no other 
> output from the Print statement
> 
> However, if we replace f1[x1_]  by f1[x1_Real]
> we get the expected:
> 
> x1=1.
> ...
> 
> I think this has to do with compilation. Can anybody explain this?
> 
> Daniel
> 


Daniel,

not with compilation, but with use of FindRoot itself, look:

In[30]:= lhs = x^3;
In[31]:= rhs = 2x;

In[32]:= FindRoot[lhs == rhs, {x, 1}]
Out[32]= {x -> 1.41421}

FindRoot will first do a symbolic evaluation of the expression (the equation), and such try transformation rules (which might simplify the expression considerably).

Such, with symbolic x, evaluation of f1[x] gives

In[21]:= f1[x]
From In[21]:= "x1="x
Out[21]= x^2

so no printing thing goes to the FindRoot machinery.


In contrast 

In[34]:= Remove[f1]
In[35]:= f1[x1_Real] := (Print["x1=", x1]; x1^2);

In[36]:= f1[x]
Out[36]= f1[x]

as symbolic x isn't Real, doesn't transform your expression (smuggling your printing spy)

--
Hartmut


  • Prev by Date: Question: DiracDelta simplifies/integrates incorrectly?
  • Next by Date: Re: laplace transform
  • Previous by thread: Behaviour of FindRoot
  • Next by thread: laplace transform