MathGroup Archive 2007

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

Search the Archive

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?



  • Prev by Date: Re: Thread function now working as expected
  • Next by Date: Closing All Input Cells at Once
  • Previous by thread: Re: Re: Is this a problem in mathematica?
  • Next by thread: Re: Is this a problem in mathematica?