Mathematica 9 is now available
Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2006
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2006

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

Search the Archive

Re: Re: variable metric method automatic gradient yields Indeterminate

  • To: mathgroup at smc.vnet.net
  • Subject: [mg70460] Re: [mg70448] Re: variable metric method automatic gradient yields Indeterminate
  • From: "Chris Chiasson" <chris at chiasson.name>
  • Date: Tue, 17 Oct 2006 02:58:18 -0400 (EDT)
  • References: <egse3s$crc$1@smc.vnet.net> <200610160636.CAA27862@smc.vnet.net>

that's weird

I would have expected the same answer with and without PiecewiseExpand

On 10/16/06, Peter Pein <petsie at dordos.net> wrote:
> Chris Chiasson schrieb:
> > A user-defined augmented lagrange multiplier method for NMinimize
> > drives a (user defined) variable metric method for FindMinimum. The
> > NMinimize routine ends up creating penalty functions that have
> > "discontinuous" first order derivatives due to the presence of
> > functions like Max. At the points of discontinuity in the derivative,
> > the Indeterminate result usually ends up multiplied by zero. The limit
> > of the derivative exists.
> >
> > for example, the function passed to FindMinimum is
> > func=Max[0,-X[1]]^2+Max[0,-1+X[1]+X[2]]^2+(-1+X[1])^2+(-1+X[2])^2
> >
> > its derivative with respect to X[1] is
> > 2*(-1+Max[0,-1+X[1]+X[2]]*Piecewise[{{1,X[1]+X[2]>1}},0]+
> > Max[0,-X[1]]*Piecewise[{{-1,X[1]<0},{0,X[1]>0}},Indeterminate]+X[1])
> >
> > Notice that when X[1] is zero, the Piecewise returns Indeterminate,
> > which is multiplied by zero from the nearby Max function. However,
> > 0*Indeterminate is still Indeterminate in Mathematica. When the
> > derivative is evaluated at X[1]=zero, the answer returned is
> > Indeterminate. This totally messes up the numerical routine.
> >
> > the limit of D[func,X[1]] as X[1]->0 is
> > Piecewise[{{-2,X[2]<1}},2*(-2 +X[2])]
> >
> > I am tempted to check the gradient vector for Indeterminate results,
> > look up the "corresponding" variable (heh, how do I really know which
> > one is responsible?), and take the limit as that variable approaches
> > the value I wanted to evaluate at. I don't know how well that will
> > work in practice.
> >
> > So, does anyone have any suggestions?
>
> Hi Chris,
>
> PiecewiseExpand your func:
>
> func =
> PiecewiseExpand[Max[0,-X[1]]^2+Max[0,-1+X[1]+X[2]]^2+(-1+X[1])^2+(-1+X[2])^2];
>
> FreeQ[grad = D[func, {X /@ {1, 2}}], Indeterminate, Infinity]
> --> True
>
> FindMinimum[func, {X[1], 1}, {X[2], 1}]
> --> {0.33333333333333337,
>   {X[1] -> 0.6666666666666667,
>    X[2] -> 0.6666666666666666}}
>
> Peter
>
>


-- 
http://chris.chiasson.name/


  • Prev by Date: Re: Functions inside list
  • Next by Date: a better solution for a fourth order differential equation
  • Previous by thread: Re: variable metric method automatic gradient yields Indeterminate
  • Next by thread: Question from a biologist