any Python equivalent of Math::Polynomial::Solve?

Carl Banks invalidemail at aerojockey.com
Sun Feb 27 01:19:44 EST 2005


Just wrote:
> While googling for a non-linear equation solver, I found
> Math::Polynomial::Solve in CPAN. It seems a great little module,
except
> it's not Python... I'm especially looking for its poly_root()
> functionality (which solves arbitrary polynomials). Does anyone know
of
> a Python module/package that implements that?

If you don't have a great need for speed, you can accomplish this
easily with the linear algebra module of Numeric/numarray.   Suppose
your quintic polynomial's in the form

   a + b*x + c*x**2 + d*x**3 + e*x**4 + x**5

The roots of it are equal to the eigenvalues of the companion matrix:

  0   1   0   0   0
  0   0   1   0   0
  0   0   0   1   0
  0   0   0   0   1
 -a  -b  -c  -d  -e

It should be pretty easy to set up a Numeric matrix and call
LinearAlgebra.eigenvalues.  For example, here is a simple quintic
solver:

. from Numeric import *
. from LinearAlgebra import *
.
. def quinticroots(p):
.     cm = zeros((5,5),Float32)
.     cm[0,1] = cm[1,2] = cm[2,3] = cm[3,4] = 1.0
.     cm[4,0] = -p[0]
.     cm[4,1] = -p[1]
.     cm[4,2] = -p[2]
.     cm[4,3] = -p[3]
.     cm[4,4] = -p[4]
.     return eigenvalues(cm)


now-you-can-find-all-five-Lagrange-points-ly yr's,

-- 
CARL BANKS




More information about the Python-list mailing list