Re: Getting the (correct) roots of a polynomial

• To: mathgroup at smc.vnet.net
• Subject: [mg67279] Re: [mg67247] Getting the (correct) roots of a polynomial
• From: Bob Hanlon <hanlonr at cox.net>
• Date: Thu, 15 Jun 2006 03:26:22 -0400 (EDT)
• Sender: owner-wri-mathgroup at wolfram.com

```Use greater precision than machine precision

poly = (z - I*u)*z*(z + I*v)*(z - I*v) +
g^2*z*(z + I*v) + g^2*z*(z - I*v) +
g^2*(z + I*v)*(z - I*v) // Simplify

(v^2 + 3*z^2)*g^2 + z*(z - I*u)*(v^2 + z^2)

testVals = {u -> 1/10,  v -> 10^4, g -> 1, w -> 10^7};

Off[N::meprec];

soln=Solve[poly==0,z];

N[poly/.soln/.testVals,20]//Chop

{0,0,0,0}

soln2={Reduce[poly==0,z]//ToRules};

N[poly/.soln2/.testVals,20]//Rationalize

{0,0,0,0}

Bob Hanlon

---- nickc8514 at yahoo.com wrote:
> Hi, I have what seems like a simple question, but I haven't been able
> to find a satisfactory answer.  I wish to find the complex roots of the
> quartic polynomial
>
> (z - I u) z (z + I v) (z - I v) + (g^2) z (z + I v) + (g^2) z (z - I v)
> + (g^2)(z + I v)(z - I v)
>
> where z is the variable of the polynomial, u, v, and g are parameters
> whose values will be specified later, and I is the imaginary unit.  In
> the end, I wish to be able to fix the values of u and g and be able to
> examine (say, by plotting) how the values of the roots depend on v.
> I've tried several (possibly equivalent) approaches, but I seem to keep
> getting answers that are not actually roots.  I am using Mathematica
> 5.2 on SunOS.
>
> I assigned the above expression to the name Poly.  I then tried
> Solve[Poly==0,z].  If I then substitute in the particular values
> TestVals = {u -> 1/10,  v -> 10^4, g -> 1, w -> 10^7}, I find that the
> roots produced by Solve yield significantly non-zero values when
> plugged back into poly, meaning that the following does not produce a
> list of essentially zero values:
>
> Soln = Solve[Poly==0,z];
> Table[N[(Poly /. Soln[[j]]) /. TestVals],{j,1,4}]
>
> The values returned were of order 10^9.  I also tried plugging in the
> parameter values first (i.e. applying the rules in TestVals) before
> using Solve, and this also produced bad solutions.
>
> I also tried using the Root object, thinking that this might produce
> different results.  In this case, I converted Poly to a function of a
> single variable and applied the Root function to get each root.
>
> Table[Root[Evaluate[Poly /. z->#], j],{j,1,4}]
>
> Plugging these values back into Poly and plugging in the parameter
> values (again, by applying the TestVals rules), I get two values that
> are essentially zero (order 10^(-8) ) and two values that are
> significantly non-zero (order 1).  Again, I tried pluggin in the
> parameter values first and then using root, but this doesn't seem to
> change the result (which is what I expected).  After looking at the
> help for the Root function, I also tried setting the option
> ExactRootIsolation->True inside the Root function, but this did not
> seem to improve my results.
>
> I'd appreciate any guidance on how to get the correct roots to this
> polynomial.  I think I either simply don't understand enough about the
> way in which these functions (particularly root) work to understand the
> origin of the problem, or else it's some issue of numerics having to do
> with rounding errors or the like.  Again, I'd like to be able to
> produce the correct roots for any given values of the parameters, and
> particularly for a large range of values of v.  It's probably also
> worth noting that given the other parameter values used above, if v is
> set to be a small value (say, v = 5), then the solutions given by any
> of the methods above seem to be quite good.
>
> Many thanks,
>
> Nick
>

```

• Prev by Date: Re: Package writing
• Next by Date: Re: Getting the (correct) roots of a polynomial
• Previous by thread: Re: Getting the (correct) roots of a polynomial
• Next by thread: Re: Getting the (correct) roots of a polynomial