MathGroup Archive 1998

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

Search the Archive

Re: Gradient Option in FindMinimum


Chris Farr wrote:
> 
> Math Group:
> 
> Is the following a bug?
> 
> First, I set nameofgrad equal to 2*x.
> 
> In[32]:= nameofgrad = {2*x}
> Out[32]= {2 x}
> 
> Second, I show that if {2*x} is put directly into the FindMin. =
> expression everything works okay.
> 
> In[33]:= FindMinimum[x^2,{x,1.},Gradient->{2* x}] Out[33]= { 0.,{x
> -> 0.} }
> 
> Third, here is the bug (I think), when I put nameofgrad into the =
> FindMin. expression (which is just equal to {2*x}), I get an error =
> message!
> 
> In[34]:= FindMinimum[x^2,{x,1.},Gradient->nameofgrad]
> 
> FindMimimum::fmgl : Gradient {{2.}} is not a length 1 list of real =
> numbers at {x} = {1.}
> 
> Can anyone duplicate this on their machine?  Any ideas?
> 

This is quite reproducible since it is caused by the evaluation
semantics of FindMinimum, in particular that it has the HoldAll
attribute.  Thus, the arguments are passed to the function unevaluated,
so FindMinimum sees the gradient as just the symbol nameofgrad which is
noty a list.  Since it needs the gradient to be a list, it warps a list
around that, leading to your eventual problem.

This can easily be remedied by simply using

 FindMinimum[x^2,{x,1.},Evaluate[Gradient->nameofgrad]]

which forces the third argument to be evaluated.

Rob Knapp


  • Prev by Date: Re: Can it be done - easily?
  • Next by Date: Re: Can it be done - easily?
  • Previous by thread: Gradient Option in FindMinimum
  • Next by thread: Re: Re: Gradient Option in FindMinimum