MathGroup Archive 2008

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

Search the Archive

Re: Re: Plot vs NMaximize

  • To: mathgroup at smc.vnet.net
  • Subject: [mg94304] Re: [mg94240] Re: [mg94221] Plot vs NMaximize
  • From: DrMajorBob <btreat1 at austin.rr.com>
  • Date: Wed, 10 Dec 2008 04:45:34 -0500 (EST)
  • References: <13842004.1228737086065.JavaMail.root@m02>
  • Reply-to: drmajorbob at longhorns.com

Here's the same example along with Plot's maximum used to feed FindMaximum:

Quit

f[x_] := Sin[2 \[Pi] x] + 10 Sin[(2 \[Pi] x)/30]
Timing[NMaximize[{f[x], x >= 0 && x < 50}, x]]

{0.04529, {10.9864, {x -> 37.2527}}}

Quit

f[x_] := Sin[2 \[Pi] x] + 10 Sin[(2 \[Pi] x)/30]
Timing[{max =
    SortBy[First@
       Cases[p = Plot[f[x], {x, 0, 50}], Line[x_] :> x, Infinity],
      Last][[-1, 1]], FindMaximum[f[x], {x, max}]}
  ]

{0.047725, {7.25518, {10.9864, {x -> 7.25275}}}}

p

The second method is barely any slower, and it yields the graph as an  
extra.

Bobby

On Tue, 09 Dec 2008 05:55:02 -0600, Nikolaus Rath <Nikolaus at rath.org>  
wrote:

> "David Park" <djmpark at comcast.net> writes:
>>> It seems to me that it is significantly faster *and* more accurate to
>>> determine global maxima by plotting the function and looking for the
>>> positions on the plot than to use NMaximize: in all the cases that
>>> I've encountered recently, NMaximize got stuck in local extrema (which
>>> was very easy to see when looking at the plot).
>>>
>>> I know that global optimization is a very difficult problem, but I do
>>> not understand why Plot[] does not suffer from the same problem. If
>>> Plot[] is able to generate a plot where I can see the position of the
>>> global maximum in a second, why does NMaximize need several seconds to
>>> get stuck in some local maxima? Shouldn't it be able to make use of
>>> the same algorithms that Plot[] uses?
>>
>> How about a specific example where NMaximize gets stuck but you can  
>> easily
>> see the maximum from a plot?
>
> Try this one:
>
> f[x_] :=  Sin[2 \[Pi] x] + 10 Sin[(2 \[Pi] x)/30]
> Plot[f[x], {x, 0, 50}]
> NMaximize[{f[x], x >= 0 && x < 50}, x]
>
> this gives me a maximum at {0.988032, {x -> 29.8451}}.
>
>> In the case a 2D function I can envision a dynamic display that would  
>> hav=
> e a
>> background contour plot of the function and a movable rectangle with
>> adjustable side lengths that would pick a certain region, and then  
>> NMaxim=
> ize
>> would be used within the region to give a higher precision answer. So  
>> why
>> not combine the two in that way?
>
> Well, I realized the same thing. But the point of my question is: why
> do I have to set up the above manually?
>
> Since I could also parse the Graphics[] object directly to find the
> local maximum, there isn't a need for a dynamic display at all. But
> why doesn't NMaximize already do that? (It should of course not parse
> the Graphic[] but make use of the data that was used to generate it).
>
>    -Nikolaus
>
> --
>  =C2=BBIt is not worth an intelligent man's time to be in the majority.
>   By definition, there are already enough people to do that.=C2=AB
>                                                          -J.H. Hardy
>
>   PGP fingerprint: 5B93 61F8 4EA2 E279 ABF6  02CF A9AD B7F8 AE4E 425C
>



-- 
DrMajorBob at longhorns.com


  • Prev by Date: Re: Drop elements from list
  • Next by Date: Re: Re: A 3D Plot Query
  • Previous by thread: Re: Plot vs NMaximize
  • Next by thread: Re: Plot vs NMaximize