Just wrote:
In article <[EMAIL PROTECTED]>,
 "Carl Banks" <[EMAIL PROTECTED]> wrote:

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,


Wow, THANKS. This was the answer I was secretly hoping for... "Great need for speed", no, not really, but this Numeric-based version is about 9 times faster than what I translated from Perl code yesterday, so from where I'm standing your version is blazingly fast...

Thanks again,

Just

in addition:
I'm writing a class for polynomial manipulation. The generalization of the above code is:


definitions:
1.) p = array([a_0, a_i, ..., a_n]) represents your polynomial
P(x) = \sum _{i=0} ^n a_i x^i

2.) deg(p) is its degree

3.) monic(p) makes P monic, i.e. monic(p) = p / p[:-1]

then you get:
from numarray import *
import numarray.linear_algebra as la

def roots(p):
        p = monic(p); n = deg(p)
        M = asarray(zeros((n,n)), typecode = 'f8')
# or 'c16' if you need complex coefficients
        M[:-1,1:] = identity(n-1)
        M[-1,:] = -p[:-1]
        return la.eigenvalues(M)

Alex
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to