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