MathGroup Archive 2007

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

Search the Archive

RE: Re: Limit and Root Objects

Indeed, that would be very nice.

In the Cardano3 complex function plotting package I have vector plots with
multifunctions. For example, I represent z^(1/3) at a point as a spray of
three vectors. If we make an animation as the point circuits the origin you
can see that one must circle three times for each vector to return to its
original position. It all looks very smooth. But in fact it only looks
smooth because the group of three vectors discontinuously jumps to a
indistinguishable pattern as we move across a branch point. I would like to
color one of the vectors red, instead of black, so we could more clearly see
that it takes three circuits. But that is very difficult.

It seems to me that the only way to do this is to proceed in small steps and
keep the previous set of solutions. Then we could identify the new set of
points (or vectors in my case) by their closeness to the previous set.

However, this runs into the problem of how one detects degenerate solutions
and how one consistently handles them. Numerically one could only say that
points came very close and were considered to be degenerate. In that case
they might get mixed up. A routine to do this, at least approximately, does
not seem to be out of the question.

David Park
djmp at

From: Paul Abbott [mailto:paul at]

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


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

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


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?


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)

  • Prev by Date: Re: An Introduction to Programming with Mathematica, Third Edition
  • Next by Date: On AspectRatio
  • Previous by thread: Re: Re: Limit and Root Objects
  • Next by thread: RE: Re: Re: Limit and Root Objects