Well, I'm glad you didn't give up (and I didn't think you would). I might
actually learn some formal mathematics. But as yet, I do not follow Adam
Strzebonski's proof - nor am I certain exactly what the claims of the proof
are. So let me state the matter in my own words.
Given a one-parameter, say a, finite order, say order d, polynomial with
real or complex coefficients, can we find a set of d root functions which
are each continuous and which give the complete set of roots for the
polynomial for each value of a?
I claim that the answer is yes. Let's say that it is not possible to obtain
continuous exact algebraic roots, say with the Mathematica Root function
(and I think that's what you and Strzebonski are saying). So with Root we
obtain an indexed set of discontinuous root functions. But the
discontinuities are not unrelated. There are global relationships between
the root functions. And specifically I'm claiming that we can introduce a
pointwise reindexing function that will reindex the roots for each value of
a, and that these new root functions can be made continuous. We can even
make up a table of the new roots and fit an InterpolatingFunction to them so
that we will have a set of true numerical root functions that are each
continuous.
Here are the examples again.
Needs["Graphics`Animation`"]
Needs["Graphics`Colors`"]
Routine to reindex at each value of a.
rootindexedset[a_] :=
Module[{roots = rootset[a], newroots, rootpermutations, distances, pick},
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;
{a, #} & /@ newroots
]
Case 1
polynomial = x^5 - a x - 1 == 0;
displaypoly = polynomial /. a -> HoldForm[a];
rootset[a_] = x /. Solve[polynomial, x]
Calculating the reindexed root functions.
memoryrootset = Null;
basepermutations = Permutations[Range[5]];
roottables = Transpose@Table[rootindexedset[a], {a, -6., 10, 0.25}];
Do[root[i] = Interpolation[Part[roottables, i]], {i, 1, Length[roottables]}]
Plot routine and animation
frame[a_] :=
Module[{locations},
locations = {Re[#], Im[#]} & /@ Table[root[i][a], {i, 1, 5}];
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]
]
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]];
roottables = Transpose@Table[rootindexedset[a], {a, -6., 10, 0.50}];
Do[root[i] = Interpolation[Part[roottables, i]], {i, 1, Length[roottables]}]
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]}]
I'm not claiming that I know for certain that this can be done in all cases,
or whether it might depend on how the parameter a enters into the
polynomial. I leave it to the mathematicians to correct me if necessary or
make it sharper.
But I think that it is very worthwhile doing this kind of thing. It changes
our viewpoint of what is happening. For example, the jumping of the initial
root functions is something of an artifact of algebra. It confuses what is
really happening, say in a physical problem. When we take a global view of
the solution set, the discontinuities lose their importantance. What is more
important is that when the parameter a passes through a point that produces
degenerate roots, then the solution set branches. If there is a p'th order
root at the degeneracy, then there are p! branches to the solution set. If a
physical solution corresponded to following a single root, then this
branching would certainly have significance - much more than the
discontinuities in the original root functions.
And there is a lot of good mathematics that flowed out of visual and
graphical thinking.
I'm sure I won't hear from Paul Abbott who posed these particular cases in
the first place.
David Park
djmp at earthlink.net
http://home.earthlink.net/~djmp/
From: Andrzej Kozlowski [mailto:akoz at mimuw.edu.pl]
On 15 Jan 2007, at 08:02, Andrzej Kozlowski wrote:
> One further (I hope last) comment.
As usual I am unable to stick to this kind of promise ;-(
In fact, it is clear that if we want to consider all roots of a
polynomial as a continuous function of the parameter we do not even
need to remove the discriminant. We can simply consider the map
f: C^d -> S^d(C)
where S^d(C) is the so called symmetric product on C (C stands for
the complex numbers). You can think of it as the space whose elements
are unordered tuples (c1,c2,...,cd) of complex numbers - in other
words sets with d elements. So the map f assigns to a polynomial x^d+
a(d-1) x^(d-1)+...+a(0) the unordered tuple (a(d-1), a(d-2),..., a
(0)). The symmetric product has a natural topology (in fact the d-th
symmetric product on C happens to be homeomorphic to C^d but this is
not the case for other spaces, for example the d-th symetric product
on R is not R^d). Anyway, the map f is indeed a continuous map, and
this formalizes the statement that the set of roots of a complex
polynomial depends continuously on the coefficients. However, this is
quite different from saying that you can define one continuous root
on the space of all polynomials, which is certainly impossible (see
again Adam Strzebonski's proof).
I suspect this was the source of all the confusion here and we have
been arguing without understanding what the other side is talking
about. At least in my case this is the kind of situation that is
likely to lead to a loss of patience or even (as happened briefly
this time) temper. I think it also shows the great advantage of using
formal mathematics rather than intuitive arguments, even if supported
by very skillful animations. In 30 years of doing mathematics I can't
recall coming across anyone loosing his temper over a strictly formal
mathematical argument. When something like this does happen it always
turns out that someone was simply not being formal enough.
Andrzej Kozlowski
> There is of course a sense in which the roots of a polynomial are
> continuous in the coefficients. Formally one has to use the concept
> of the symmetric product to state this. Let again X be the space
> C^d-S of monic polynomials of degree d with the determinant remove.
> Now we construct a space Y as follows. We first consider the
> subspace Z of the Cartesian product C^d, consisting of complex
> numbers (c_1,c_2,...,c_d) which are all distinct. The symmetric
> group on d elements (the permutation group) S(d) acts on Z, and we
> let Y be the set of orbits of the action Y=Z/S(d). So now we have a
> map f: X -> Y which assigns to a polynomial p in X, the unordered
> set of its roots (z_1,z_2,...,z_d). This map is certianly
> continuous with respect to the natural topologies on X and Y.
> Intuitively this says that the set of unordered roots (all of them)
> is indeed a continuous function of the parameters of the
> polynomials (but not the individual roots themselves).
>
> If, what you have been saying is in some way related to the above
> than of course I agree, but I can't see how this fact can in any
> way be useful in a computer program like Mathematica.
>
>
> Andrzej Kozlowski
>
>
> On 15 Jan 2007, at 07:35, Andrzej Kozlowski wrote:
>
>> I think I should have expressed myself differently. So here it is
>> again.
>>
>> I am sure that if you read and think about
>>
>> http://forums.wolfram.com/mathgroup/archive/2006/Dec/msg00496.html
>>
>> you will certianly know what I have been talking about. I don't
>> beleive you have done that. I can't explain it any better or
>> simpler. However, I can again state in a formal way what I am
>> asserting to be true.
>>
>> To talk of "continuity" of anything you have to specify three
>> things. One is a topological space X - the source space. The
>> second is a topological space Y - the target space. The third a
>> map (function) f: X -> Y. The statement of the theorem is:
>> Let X = C^d -S be the space of all complex monic polynomials with
>> the discriminant (the set of polynomials with a double root)
>> removed. Let Y = C (the complex numbers). Then there cannot exists
>> a continuous map f :X -> Y such that for any polynomial p in X, f
>> (p) is a root of p.
>>
>> This is proved by Adam Strzebonski in the above link. The theorem
>> of Vassiliev says that if d is a power of prime than you will need
>> at lead d open Sets U_1,U_2, ..., U_d whose union is all of X,
>> such that there is a map f_i: U_i -> C with the property that f(p)
>> is a root of p.
>>
>> I can also prove the following. Let X= R^d-S - the space of real
>> polynomials of degree d with the discriminant removed. Let Y=C.
>> Then there does exist a continuous map f: X -> Y such that for
>> each real polynomial p in X, f(p) is a root of p. (There are in
>> fact many such maps, exactly d over each connected component of X).
>>
>> I think this is as clear as it can be made. Now, of course it is
>> quite possible that what you are trying to say is perfectly
>> sensible and correct. However, to make it mathematics you must be
>> able to make a formal statement like the above. An animation is
>> not a substitute for this. I have no idea form you animation what
>> is your X, what is your Y, and what is your function f that you
>> claim can be a continuous function. An animation or a graphic can
>> be useful once you only if they illustrate some formal mathematica
>> notions like these.
>>
>> Andrzej Kozlowski
>>
>>
>> On 14 Jan 2007, at 18:47, Andrzej Kozlowski wrote:
>>
>>> As I already suggested: read
>>>
>>> http://forums.wolfram.com/mathgroup/archive/2006/Dec/msg00496.html
>>>
>>> and then think about what it says. (Obviously the issue concernst
>>> each individual root being continuous).
>>>
>>> I think I have written about this as much as I am willing to do.
>>>
>>> Andrzej Kozlowski
>>>
>>> On 14 Jan 2007, at 17:58, David Park wrote:
>>>
>>>> Paul Abbot asked: "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?"
>>>>
>>>> (I'm not certain if I exactly understand Paul's question. Does
>>>> he mean that
>>>> each individual root function, in the set of root functions,
>>>> must be
>>>> continuous, or does he allow global reindexing on the entire set
>>>> to achieve
>>>> continuity?)
>>>>
>>>> So, what exactly does your mathematical theorem say? Does it say
>>>> that given
>>>> a one-parameter finite order polynomial it is not possible to
>>>> continuously
>>>> reindex the set of root solutions so that the reindexed roots
>>>> will vary
>>>> continuously in the complex plane as a function of the
>>>> parameter? Or that
>>>> you can't do this when the polynomial contains a complex
>>>> coefficient? If it
>>>> says that, I don't believe it.
>>>>
>>>> It certainly is possible to arrange things so that the roots vary
>>>> continuously, and it can even be useful.
>>>>
>>>> It reminds me of a Groucho Marx quip, something about: "Are you
>>>> going to
>>>> listen to me or are you going to go by what you see in front of
>>>> your eyes?"
>>>>
>>>> David Park
>>>> djmp at earthlink.net
>>>> http://home.earthlink.net/~djmp/
>>>>
>>>>
>>>>
>>>> From: Andrzej Kozlowski [mailto:akoz at mimuw.edu.pl]
>>>>
>>>> I don't understand what you mean by "continuous enough" and why you
>>>> think and animation can "disprove" a mathematical proof?
>>>>
>>>> Please read the argument:
>>>>
>>>> http://forums.wolfram.com/mathgroup/archive/2006/Dec/msg00496.html
>>>>
>>>> It is very simple. Remember the point is that you cannot define
>>>> such
>>>> a function that will be continuous over the entire 6 dimensional (3
>>>> complex dimensions) space of polynomials of degree 3 with complex
>>>> roots (we actually normally remove the discriminant from the
>>>> space).
>>>> You are using a smaller subspace ( you have just one complex
>>>> parameter) and over a smaller subspace naturaly it is possible to
>>>> have a continuous root.
>>>> If you look carefully at Adam's argument you will be easily able to
>>>> see what must go wrong over the entire space of complex cubics.
>>>>
>>>> This in fact is a good illustration of what a double edged weapon
>>>> graphics and animations are in studying mathematics: they can
>>>> just as
>>>> easily mislead your intuition and lead you to wrong conclusions
>>>> as to
>>>> right ones. Which is one reason why I think one should never
>>>> rely too
>>>> much on such tools when teaching mathematics. Proofs are proofs and
>>>> no number of "convincing animations" and "experimental mathematics"
>>>> can replace them.
>>>>
>>>> Andrzej Kozlowski,
>>>>
>>>> Department of Mathematics, Informatics and Mechanics
>>>> Warsaw University, Poland
>>>>
>>>>
>>>> On 14 Jan 2007, at 01:54, David Park wrote:
>>>>
>>>>> 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
>>>>>
>>>>>
>>>>
>>>>
>>>
>>
>