Re: Real roots of polynomials
- To: mathgroup at smc.vnet.net
- Subject: [mg24729] Re: [mg24688] Real roots of polynomials
- From: "Ersek, Ted R" <ErsekTR at navair.navy.mil>
- Date: Wed, 9 Aug 2000 02:31:29 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
Jack Goldberg wanted an efficient way to find all real roots of a
polynomial. The built-in functions Roots and NRoots can do nothing but find
roots of polynomials. I hope the developers made these functions work as
efficiently as possible. As expected NRooots runs much faster. You only
need to do is a little programming to discard the roots with a non-zero
complex part. I give you functions below that work like Roots and NRoots but
only return the real roots. The definition below only works for polynomials
in one variable.
You could if you want give RealRoots all the same options as the built-in
Roots function.
----------------
In[1]:=
RealRoots[lhs_*rhs_,
var_]/;(PolynomialQ[lhs-rhs]&&Variables[lhs-rhs]==={var}):=
Select[Roots[lhs*rhs, var, Cubics->False,Quartics->False],
(Im[Last[#]]===0)&]
In[2]:=
NRealRoots[lhs_*rhs_,
var_]/;(PolynomialQ[lhs-rhs]&&Variables[lhs-rhs]==={var}):=
Select[NRoots[lhs*rhs, var], (Im[Last[#]]* 0.0)&]
In[3]:=
RealRoots[2 x^4-3 x^3+x-5*0,x]
Out[3]=
x == Root[-5 + #1 - 3*#1^3 + 2*#1^4 & , 1] ||
x == Root[-5 + #1 - 3*#1^3 + 2*#1^4 & , 2]
In[4]:=
NRealRoots[2 x^4-3 x^3+x-5*0,x]
Out[4]=
x == -1.05796 || x == 1.78349
--------------------
Regards,
Ted Ersek
Mathematica tips, tricks have moved to
http://www.verbeia.com/mathematica/tips/Tricks.html