Real Roots of cubics
- To: mathgroup at yoda.physics.unc.edu
- Subject: Real Roots of cubics
- From: paul at earwax.pd.uwa.edu.au (Paul Abbott)
- Date: Mon, 14 Mar 1994 17:10:51 +0800
>>Actually, I'd suggest that WRI's version of the cubic formula >>is defective and provides unnecessary "I" values. This bug >>was corrected in Macsyma, as I recall, about 20 years ago. If you need them, the real roots of a cubic can be expressed in explicitly form using trigs and arctrigs. The following is a slightly modified version of a column that appeared in The Mathematica Journal (Vol 2, Issue 3, 1992): Consider the polynomial poly = 11 x^3 - 20 x^2 - 10 x + 22 2 3 22 - 10 x - 20 x + 11 x Its roots: sol = Solve[poly == 0, x]; are all real as is easily determined numerically: N[sol] // Chop {{x -> 1.61319}, {x -> -1.01567}, {x -> 1.22065}} but this is certainly not obvious from the format of the exact symbolic solution. For example, First[sol] 1/3 20 730 2 {x -> -- + --------------------------------- + 33 1/3 33 (-36074 + 66 I Sqrt[58479]) 1/3 (-36074 + 66 I Sqrt[58479]) ------------------------------} 1/3 33 2 How can this be simplified to a real expression? From the general theory of cubic equations [see Numerical Recipes in C, 2nd Ed (1992), 183-5; American Journal of Physics 52 (3), 269 (1984)], a cubic of the form x^3 + a x^2 + b x + c, has three real roots when q[a_,b_] := (a^2 - 3b)/9 and r[a_,b_,c_] := (2 a^3 - 9a b + 27 c)/54 are real and r^2 < q^3. Defining theta[r_,q_] := ArcCos[r/q^(3/2)] the three roots are roots[a_,b_,c_,n_] := -a/3 - 2 Sqrt[q[a,b]] * Cos[(theta[r[a,b,c],q[a,b]] + (2-n) 2 Pi)/3] where n = 1, 2 and 3. >From the coefficients of the polynomial: {c,b,a} = Drop[CoefficientList[poly,x]/Coefficient[poly,x^3],-1] 10 20 {2, -(--), -(--)} 11 11 it is seen that r and q are positive real: r[a,b,c] 18037 ----- 35937 q[a,b] 730 ---- 1089 and also that r[a,b,c]^2 - q[a,b]^3 19493 -(------) 395307 is negative. Hence, the three roots can be written exactly as: Table[roots[a,b,c,n],{n,3}] 18037 2 Pi + ArcCos[-------------] 730 Sqrt[730] 2 Sqrt[730] Cos[----------------------------] 20 3 {-- - ---------------------------------------------, 33 33 18037 ArcCos[-------------] 730 Sqrt[730] 2 Sqrt[730] Cos[---------------------] 20 3 -- - --------------------------------------, 33 33 18037 -2 Pi + ArcCos[-------------] 730 Sqrt[730] 2 Sqrt[730] Cos[-----------------------------] 20 3 -- - ----------------------------------------------} 33 33 This expression is simpler, more elegant and, because it does not involve complex numbers, much more suitable for subsequent algebraic manipulation. As a check it is seen that the numerical values do tally: N[%] {1.22065, -1.01567, 1.61319} Paul Abbott -------------------------------------------------------------------------- | Department of Physics | Interests: Computer Algebra, | | University of Western Australia | Computational Physics, | | Nedlands 6009 | Exact atomic research | | Phone: +61-9-380-2734 | | | Fax: +61-9-380-1014 | | | email: paul at earwax.pd.uwa.edu.au | | --------------------------------------------------------------------------