Re: numerical roots of a polynomial

*To*: mathgroup at christensen.cybernetics.net*Subject*: [mg1194] Re: numerical roots of a polynomial*From*: withoff (David Withoff)*Date*: Mon, 22 May 1995 02:42:48 -0400*Organization*: Wolfram Research, Inc.

In article <3pjkiu$7h0 at news0.cybernetics.net> Sigurd.Schelstraete at rug.ac.be (Sigurd Schelstraete) writes: >hello, > >does anyone know if there exists a package/function that allows one to find >(numerically) all n roots of a polynomial of degree n, whether they are >real or not? Since NSolve seems to be equivalent to N[Solve], it can not >be used for generic polynomials of fifth degree or higher. Also the >function FindRoot only allows one to find a single root near a given >starting value (which can be complex though). > >What I would like, is a function that returns the numerical values of all >n roots as a list of substitution rules, as does Solve or NSolve. > >I guess it could be done by successively dividing out a single root found >with FindRoot, but I'd rather first hear if anyone out there already has >a clear-cut solution to this problem. > >All answers are appreciated. > >Greetings, > >Sigurd Schelstraete >University of Gent >Belgium Will NRoots do what you want? The NSolve function is defined in terms of Solve in the startup package NSolve.m, so you can look in the package to find the exact relationship between NSolve[...] and N[Solve[...]]. NRoots is the N-code (the code called to evaluate N[Roots[...]]) for Roots, which is in turn called by Solve. In[1]:= On[Roots] In[2]:= sol = Solve[x^7 - x^5 + x^3 + x^2 - 1 == 0, x] 7 5 3 2 Roots::trace: Roots[1 x - x + 1 x + 1 x == 1, x] --> 2 3 5 7 Roots[x + x - x + x == 1, x]. 2 3 5 7 Out[2]= {ToRules[Roots[x + x - x + x == 1, x]]} In[3]:= N[sol] Out[3]= {{x -> -0.975995 - 0.3389 I}, {x -> -0.975995 + 0.3389 I}, > {x -> -0.36948 - 0.860376 I}, {x -> -0.36948 + 0.860376 I}, > {x -> 0.78954}, {x -> 0.950705 - 0.670453 I}, > {x -> 0.950705 + 0.670453 I}} Dave Withoff Research and Development Wolfram Research