Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2008

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

Search the Archive

Re: Trace'ing Gradient in FindMinimum

  • To: mathgroup at smc.vnet.net
  • Subject: [mg87434] Re: Trace'ing Gradient in FindMinimum
  • From: Jens-Peer Kuska <kuska at informatik.uni-leipzig.de>
  • Date: Thu, 10 Apr 2008 02:15:03 -0400 (EDT)
  • References: <fti3st$odo$1@smc.vnet.net>

Hi,

try

f[x_List] := (x.x - 10)^2
df[x : {__?NumericQ}] := (Sow[x]; 4 (x.x - 10) x)
init = RandomReal[1, {3}];

Reap[FindMinimum[f[x], {x, init}, Gradient -> df[x]]]


Regards
   Jens


Art wrote:
> Can I track Gradient computations in FindMinimum using Trace? Here, tr
> is empty though df is evaluated several times:
> 
> f[x_List] := (x.x - 10)^2
> df[x : {__?NumericQ}] := 4 (x.x - 10) x
> init = RandomReal[1, {1000}];
> 
> tr =
>   Trace[
>     FindMinimum[f[x], {x, init}, Gradient -> df[x]],
>     df[x_] -> Norm[x]
>   ]
> 
> But Tracing the evaluation of f[] is possible and yields the same as
> EvaluationMonitor:
> 
> ev = {};
> tr =
>  ReleaseHold /@
>   Flatten@Trace[
>     FindMinimum[f[x], {x, init}, Gradient -> df[x],
>      EvaluationMonitor :> AppendTo[ev, Norm[x]] ],
>     f[x_] -> Norm[x]];
> 
> Here, tr == ev.
> 
> It looks like FindMinimum eats the function df and doesn't ever
> explicitly call it, but it doesn't eat f.
> 
> I am trying to resolve an error where FindMinimum immediately
> complains my Gradient doesn't evaluate to a vector of reals for init
> and returns. Placing a Print inside df shows that FindMinimum does
> actually call df with init and when I separately evaluate df[init],
> there is no problem. I know I am doing something wrong so I was hoping
> to figure it out with Trace on df. I would also like to learn to use
> Trace.
> 
> Second question: Is there a way to specify that FindMinimum should not
> try to find symbolic derivatives and such for it's arguments other
> than using patterns like x:{__?NumericQ}, which probably take time to
> compute. It would be nice for something like f[x_ /;
> And@@(MatrixQ[#,NumericQ]&/@x)] not to be evaluated each iteration. Is
> there a global $TrustUserUnconditionally = True option?
> 
> Thanks for any suggestions.
> 


  • Prev by Date: Re: Pattern problem: How to count from a long list of numbers all occurrences of 2 numbers next to each others?
  • Next by Date: Re: Just primitive ColorFunction
  • Previous by thread: Trace'ing Gradient in FindMinimum
  • Next by thread: Re: Trace'ing Gradient in FindMinimum