MathGroup Archive 2011

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

Search the Archive

Re: Finding the Local Minima of a somewhat complicated function

  • To: mathgroup at smc.vnet.net
  • Subject: [mg116018] Re: Finding the Local Minima of a somewhat complicated function
  • From: Bob Hanlon <hanlonr at cox.net>
  • Date: Sat, 29 Jan 2011 05:27:18 -0500 (EST)

Explicitly constrain y to  the interval 0 < y <1

fun[a_, y_] = 
  FullSimplify[(1000 - 5*a)/10000000000 + 
    332*(y/10000000000 + (1 - y)*(1/5000000000 + y)) + (1/2)*
     y*(1000 - 5*a + 1000*(-1/10)) + 
    695/1000*a*(-(Log[10000000000]/10000000000) + (1 - y)*Log[1 - y] + 
       y*Log[y])];

Table[{a, y /. #[[2]], #[[1]]} &@FindMinimum[{fun[a, y], 0 < y < 1}, y], {a, 
  100, 300, 5}]

And @@ (fun @@ Most[#] == Last[#] & /@ %)

True

ym[a_?NumericQ] := y /. FindMinimum[{fun[a, y], 0 < y < 1}, y][[2]];

funm[a_?NumericQ] := FindMinimum[{fun[a, y], 0 < y < 1}, y][[1]]

Plot[ym[a], {a, 100, 300}, Frame -> True, Axes -> False]

Plot[funm[a], {a, 100, 300}, Frame -> True, Axes -> False]


Bob Hanlon

---- Andrew DeYoung <adeyoung at andrew.cmu.edu> wrote: 

=============
Hi,

I have a function that consists of two variables, y and a.  I would
like to find the local minimum of the function in y for various
constant values of a.

For example, the list of a values is given by:

atable = Range[100, 300, 5];

For each a value in atable, I want to find the local minimum of the
function in y.  My function is "fun," and I use code like the
following:

fun=(1000-5*a)/10000000000+332*(y/10000000000+(1-y)*(1/5000000000+y))
+(1/2)*y*(1000-5*a+1000*(-1/10))+0.695*a*(-(Log[10000000000]/
10000000000)+(1-y)*Log[1-y]+y*Log[y]);

startPoint = 10^(-20);
endPoint = 1-10^(-20);
minData = Table[FindMinimum[fun /. a -> j, {y, startPoint, endPoint}],
{j, atable}]

Above, I use startPoint=10^(-20) and endPoint=1-10^(-20) because the
function is indeterminate at y=0 and at y=1.  When I run the above
code, I see that for most (but not all) values of a, Mathematica does
not find a local minimum.  Why is this so?

Of course, it could be that the function does not have a local minimum
at those values of a where Mathematica does not find one.  But, if I
plot fun at a=300, for example, the plot shows that there is a local
minimum at something like y=0.945:

Plot[fun /. a -> 300, {y, 0, 1}]

But if I ask Mathematica to find that local minimum...

FindMinimum[fun /. a -> 300, {y, startPoint, endPoint}]

...Mathematica will not find it.

Can you please help me understand why I am having trouble finding the
local minima?

Many thanks in advance,

Andrew DeYoung
Carnegie Mellon University



  • Prev by Date: Re: adding a keyboard shortcut for double brackets
  • Next by Date: Re: Odd Behavior of GraphicsRow and GraphPlot
  • Previous by thread: Re: Finding the Local Minima of a somewhat complicated function
  • Next by thread: Re: Finding the Local Minima of a somewhat complicated function