Getting the (correct) roots of a polynomial

*To*: mathgroup at smc.vnet.net*Subject*: [mg67249] Getting the (correct) roots of a polynomial*From*: nickc8514 at yahoo.com*Date*: Wed, 14 Jun 2006 06:29:10 -0400 (EDT)*Sender*: owner-wri-mathgroup at wolfram.com

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