MathGroup Archive 2007

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

Search the Archive

RE: Re: Re: Limit and Root Objects

  • To: mathgroup at smc.vnet.net
  • Subject: [mg72667] RE: [mg72644] Re: [mg72620] Re: Limit and Root Objects
  • From: "David Park" <djmp at earthlink.net>
  • Date: Sun, 14 Jan 2007 04:54:50 -0500 (EST)

This looks continuous enough to me, with and without complex coefficients.

Needs["Graphics`Animation`"]
Needs["Graphics`Colors`"]

frame[a_] :=
  Module[{roots = rootset[a], newroots, rootpermutations, distances, pick,
      locations},
    If[memoryrootset === Null, newroots = roots,
      rootpermutations = Permutations[roots];
      distances =
        Plus @@ Abs[Part[roots, #] - memoryrootset] & /@ basepermutations;
      pick = Part[Position[distances, Min[distances], 1], 1, 1];
      newroots = Part[roots, Part[basepermutations, pick]]];
    memoryrootset = newroots;
    locations = {Re[#], Im[#]} & /@ newroots;

    Show[Graphics[
        {LightCoral, AbsolutePointSize[15],
          Point /@ locations,
          Black,
          MapThread[Text[#1, #2] &, {Range[5], locations}],

          Text[SequenceForm["a = ",
              NumberForm[a, {3, 2}, NumberPadding -> {" ", "0"}]],
            Scaled[{0.1, 0.95}], {-1, 0}]}],

      AspectRatio -> Automatic,
      TextStyle -> {FontFamily -> "Courier", FontSize -> 12,
          FontWeight -> "Bold"},
      Frame -> True,
      PlotRange -> {{-3, 3}, {-3, 3}},
      PlotLabel -> SequenceForm["Continuous Roots of" , displaypoly],
      ImageSize -> 400]
    ]

Case 1

polynomial = x^5 - a x - 1 == 0;
displaypoly = polynomial /. a -> HoldForm[a];
rootset[a_] = x /. Solve[polynomial, x]

memoryrootset = Null;
basepermutations = Permutations[Range[5]];
Animate[frame[a], {a, -6, 10, 0.25}]
SelectionMove[EvaluationNotebook[], All, GeneratedCell]
FrontEndTokenExecute["OpenCloseGroup"]; Pause[0.5];
FrontEndExecute[{FrontEnd`SelectionAnimate[200, AnimationDisplayTime -> 0.1,
      AnimationDirection -> ForwardBackward]}]

Case 2

polynomial = x^5 + (1 + I) x^4 - a x - 1 == 0;
displaypoly = polynomial /. a -> HoldForm[a];
rootset[a_] = x /. Solve[polynomial, x];

memoryrootset = Null;
basepermutations = Permutations[Range[5]];
Animate[frame[a], {a, -6, 10, 0.5}]
SelectionMove[EvaluationNotebook[], All, GeneratedCell]
FrontEndTokenExecute["OpenCloseGroup"]; Pause[0.5];
FrontEndExecute[{FrontEnd`SelectionAnimate[200, AnimationDisplayTime -> 0.1,
      AnimationDirection -> ForwardBackward]}]

But this is a combinatoric algorithm and if there are too many roots it
might begin to get costly. But it is perfectly practical for these examples.

David Park
djmp at earthlink.net
http://home.earthlink.net/~djmp/

From: Andrzej Kozlowski [mailto:akoz at mimuw.edu.pl]

On 12 Jan 2007, at 11:05, Paul Abbott wrote:

> In article <em8jfr$pfv$1 at smc.vnet.net>,
>  Andrzej Kozlowski <andrzej at akikoz.net> wrote:
>
>> What you describe, including the fact that the numbering or roots
>> changes is inevitable and none of it is not a bug. There cannot exist
>> an ordering of complex roots that does not suffer from this problem.
>> What happens is this.
>> Real root objects are ordered in the natural way. A cubic can have
>> either three real roots or one real root and two conjugate complex
>> ones. Let's assume we have the latter situation. Then the real root
>> will be counted as being earlier then the complex ones. Now suppose
>> you start changing the coefficients continuously. The roots will
>> start "moving in the complex plane", with the real root remaining on
>> the real line the two complex roots always remaining conjugate
>> (symmetric with respect to the real axis). Eventually they may
>> collide and form a double real root. If this double real root is now
>> smaller then the the "original real root" (actually than the root to
>> which the original real root moved due the the changing of the
>> parameter), there will be a jump in the ordering; the former root
>> number 1 becoming number 3.
>> This is completely unavoidable, not any kind of bug, and I am not
>> complaining about it. It takes only elementary  topology of
>> configuration spaces to prove that this must always be so.
>
> But is there a continuous root numbering if the roots are not ordered?
>
> What I mean is that if you compute the roots of a polynomial, which
> is a
> function of a parameter, then if you assign a number to each root, can
> you follow that root continuously as the parameter changes? Two
> examples
> are presented below.
>
> Here is some code to animate numbered roots using the standard root
> ordering, displaying the root numbering:
>
>  rootplot[r_] := Table[ListPlot[
>    Transpose[{Re[x /. r[a]], Im[x /. r[a]]}],
>    PlotStyle -> AbsolutePointSize[10],
>    PlotRange -> {{-3, 3}, {-3, 3}},
>    AspectRatio -> Automatic,
>    PlotLabel -> StringJoin["a=", ToString[PaddedForm[Chop[a], {2,
> 1}]]],
>    Epilog -> {GrayLevel[1],
>     MapIndexed[Text[#2[[1]], {Re[#1], Im[#1]}] & , x /. r[a]]}],
>       {a, -6, 10, 0.5}]
>
> First, we have a polynomial with real coefficients:
>
>   r1[a_] = Solve[x^5 - a x - 1 == 0, x]
>
> Animating the trajectories of the roots using
>
>   rootplot[r1]
>
> we observe that, as you mention above, when the complex conjugate
> roots
> 2 and 3 coalesce, they become real roots 1 and 2 and root 1 becomes
> root
> 3. But, ignoring root ordering, why isn't it possible for these
> roots to
> maintain their identity (I realise that at coelescence, there is an
> arbitrariness)?
>
> Second, we have a polynomial with a complex coefficient:
>
>   r2[a_] = Solve[x^5 + (1+I) x^4 - a x - 1 == 0, x]
>
> Animating the trajectories of the roots using
>
>   rootplot[r2]
>
> we observe that, even though the trajectories of the roots are
> continuous, the numbering switches:
>
>   2 -> 3 -> 4
>   5 -> 4 -> 3
>   3 -> 4 -> 5
>   4 -> 3 -> 2
>
> and only root 1 remains invariant. Again, ignoring root ordering, why
> isn't it possible for all these roots to maintain their identity
> and so
> be continuous functions of the parameter? And wouldn't such continuity
> be nicer than enforcing root ordering?
>
> Cheers,
> Paul
>
> ______________________________________________________________________
> _
> Paul Abbott                                      Phone:  61 8 6488
> 2734
> School of Physics, M013                            Fax: +61 8 6488
> 1014
> The University of Western Australia         (CRICOS Provider No
> 00126G)
> AUSTRALIA                               http://physics.uwa.edu.au/
> ~paul


In the cases of polynomials with real coefficients it is indeed
possible to define a continuous root. It is certianly not possible to
do so for polynomials with complex coefficients. For a proof see my
and Adam Strzebonski's posts in the same thread. Adam Strzebonski
gave a very elementary proof of the fact that a continuous root
cannot be defined on the space of complex polynomials of degree d. I
quoted a more powerful but not elementary theorem of Vassiliev, which
describes the minimum number of open sets that are needed to cover
the space of complex polynomials of degree d, so that there is a
continuous root defined on each open set. In fact, Vassiliev gives
the exact number only in the case when d is prime, in which case d
open sets are needed. For example, for polynomials of degree 3 at
least 3 sets are needed . If it were possible to define a  continuous
root, then of course only one set would suffice. In the case when d
is not prime no simple formula seems to be known, but it is easy to
prove that that the number is >1, (e.g. by means of Adam
Strzebonski's proof).

Andrzej Kozlowski



  • Prev by Date: Re: Sorting by date
  • Next by Date: Re: Re: sparsearray and its nonempty cells
  • Previous by thread: RE: Re: Limit and Root Objects
  • Next by thread: Re: Re: Re: Limit and Root Objects