Re: Is this a problem in mathematica?
- To: mathgroup at smc.vnet.net
- Subject: [mg74620] Re: Is this a problem in mathematica?
- From: "dimitris" <dimmechan at yahoo.com>
- Date: Wed, 28 Mar 2007 04:34:51 -0500 (EST)
- References: <eud3g1$l0t$1@smc.vnet.net>
No problem. I copy from the Help Browser... "Even if the same minimum is achieved at several points, only one is returned." "An important feature of Minimize and Maximize is that they always find global minima and maxima. Often functions will have various local minima and maxima at which derivatives vanish. But Minimize and Maximize use global methods to find absolute minima or maxima, not just local extrema. " Let see an example f[x_] := x + 2*Sin[x] The function has many local maxima and minima. Plot[f[x], {x, -10, 10}]; Minimize and NMInimize find the global minimum. Minimize[{x + 2*Sin[x], -10 <= x <= 10}, x] N[%] NMinimize[{x + 2*Sin[x], -10 <= x <= 10}, x] {-Sqrt[3] - (8*Pi)/3, {x -> -((8*Pi)/3)}} {-10.109631217141658, {x -> -8.377580409572781}} {-10.10963121714166, {x -> -8.377580411890266}} Maximize and NMaximize find the global minimum. Maximize[{x + 2*Sin[x], -10 <= x <= 10}, x] N[%] NMaximize[{x + 2*Sin[x], -10 <= x <= 10}, x] {Sqrt[3] + (8*Pi)/3, {x -> (8*Pi)/3}} {10.109631217141658, {x -> 8.377580409572781}} {10.10963121714166, {x -> 8.377580409158735}} If you want to find all the local extremums, then you can work as follows: Reduce[Derivative[1][f][x] == 0 && -10 <= x <= 10, x] {ToRules[%]} f[x] /. % N[%] x == -((8*Pi)/3) || x == -((4*Pi)/3) || x == -((2*Pi)/3) || x = == (2*Pi)/3 || x == (4*Pi)/3 || x == (8*Pi)/3 {{x -> -((8*Pi)/3)}, {x -> -((4*Pi)/3)}, {x -> -((2*Pi)/3)}, {x -> (2*Pi)/3}, {x -> (4*Pi)/3}, {x -> (8*Pi)/3}} {-Sqrt[3] - (8*Pi)/3, Sqrt[3] - (4*Pi)/3, -Sqrt[3] - (2*Pi)/3, Sqrt[3] + (2*Pi)/3, -Sqrt[3] + (4*Pi)/3, Sqrt[3] + (8*Pi)/3} {-10.109631217141658, -2.4567393972175133, -3.8264459099620725, 3=2E8264459099620725, 2.4567393972175133, 10.109631217141658} Or << "NumericalMath`IntervalRoots`" IntervalBisection[Derivative[1][f][x], x, Interval[{-10., 10}], 0.001, MaxRecursion -> 16] List @@ % (FindRoot[Derivative[1][f][x] == 0, {x, #1[[1]], #1[[2]]}] & ) /@ % f[x] /. % Interval[{-8.377685546875014, -8.377075195312507}, {-4.188842773437508, -4.188232421875004}, {-2.0947265625000053, -2.0941162109375036}, {2.0941162109375, 2=2E0947265625000018}, {4.188232421875, 4.1888427734375036}, {8.3770751953125, 8.377685546875007}] {{-8.377685546875014, -8.377075195312507}, {-4.188842773437508, -4.188232421875004}, {-2.0947265625000053, -2.0941162109375036}, {2.0941162109375, 2=2E0947265625000018}, {4.188232421875, 4.1888427734375036}, {8.3770751953125, 8.377685546875007}} {{x -> -8.377580409572781}, {x -> -4.1887902047863905}, {x -> -2.0943951023931957}, {x -> 2.0943951023931957}, {x -> 4.1887902047863905}, {x -> 8.377580409572781}} {-10.10963121714166, -2.4567393972175138, -3.8264459099620725, 3=2E8264459099620725, 2.4567393972175138, 10.10963121714166} The following code finds additionally which local extremum is minimum and which is maximum. Reduce[Derivative[1][f][x] == 0 && -10 <= x <= 10, x] ext = x /. {ToRules[%]} ({#1, f[#1]} & ) /@ ext ({#1, Derivative[1][f][#1]} & ) /@ ext ({#1, Derivative[2][f][#1]} & ) /@ ext maxm = Cases[%, {(x_)?NumericQ, (y_)?NumericQ} /; y < 0] minm = Cases[%%, {(x_)?NumericQ, (y_)?NumericQ} /; y > 0] x == -((8*Pi)/3) || x == -((4*Pi)/3) || x == -((2*Pi)/3) || x = == (2*Pi)/3 || x == (4*Pi)/3 || x == (8*Pi)/3 {-((8*Pi)/3), -((4*Pi)/3), -((2*Pi)/3), (2*Pi)/3, (4*Pi)/3, (8*Pi)/3} {{-((8*Pi)/3), -Sqrt[3] - (8*Pi)/3}, {-((4*Pi)/3), Sqrt[3] - (4*Pi)/ 3}, {-((2*Pi)/3), -Sqrt[3] - (2*Pi)/3}, {(2*Pi)/3, Sqrt[3] + (2*Pi)/3}, {(4*Pi)/3, -Sqrt[3] + (4*Pi)/3}, {(8*Pi)/3, Sqrt[3] + (8*Pi)/3}} {{-((8*Pi)/3), 0}, {-((4*Pi)/3), 0}, {-((2*Pi)/3), 0}, {(2*Pi)/3, 0}, {(4*Pi)/3, 0}, {(8*Pi)/3, 0}} {{-((8*Pi)/3), Sqrt[3]}, {-((4*Pi)/3), -Sqrt[3]}, {-((2*Pi)/3), Sqrt[3]}, {(2*Pi)/3, -Sqrt[3]}, {(4*Pi)/3, Sqrt[3]}, {(8*Pi)/3, -Sqrt[3]}} {{-((4*Pi)/3), -Sqrt[3]}, {(2*Pi)/3, -Sqrt[3]}, {(8*Pi)/3, -Sqrt[3]}} {{-((8*Pi)/3), Sqrt[3]}, {-((2*Pi)/3), Sqrt[3]}, {(4*Pi)/3, Sqrt[3]}} Dimitris =CF/=C7 traz =DD=E3=F1=E1=F8=E5: > Let's say I wanna solve this problem: > > Determine point(s) on y = x^2 +1 that are > closest to (0,2). > > So in mathematica: > > minDist = (x - 0)^2 + (y - 2)^2; > Minimize[minDist, y == 1 + x^2, {x, y}] > > Output will give you: x -> -1/Sqrt[2], y -> 3/2 > > but x also has another answer: +1/Sqrt[2]. Is this a problem in mathemati= ca or can my code be changed to output the other value of x for the minimum= distance?