sage: import numpy
sage:  numpy.roots?
       The values in the rank-1 array p are coefficients of a
polynomial.
              If the length of p is n+1 then the polynomial is
            p[0] * x**n + p[1] * x**(n-1) + ... + p[n-1]*x + p[n]

sage: a=numpy.array([1,0,1],dtype=float)
sage: numpy.roots(a)

 
Josh

On Aug 5, 11:22 am, "William Stein" <[EMAIL PROTECTED]> wrote:
> On 8/5/07, Robert Miller <[EMAIL PROTECTED]> wrote:
>
>
>
> > The following handles factoring over RR:
>
> >         elif is_RealField(R):
> >             n = pari.set_real_precision(int(3.5*R.prec()) + 1)
> >             G = list(self._pari_('x').factor())
>
> > Would this work for RDF too? Is there a faster way?
>
> It would work for RDF (with some more work), but I bet it would be vastly 
> faster
> to use something designed specifically for doubles.  E.g., see this
> chapter of the GSL reference manual:
>
> http://www.gnu.org/software/gsl/manual/html_node/Polynomials.html
>
> You could find all the complex roots using GSL and use that to reconstruct
> the factorization.
>
> scipy or numpy probably also have something to return all roots of a complex
> double precision polynomial, but I couldn't find it in their
> documentation after
> looking for 10 minutes. (scipy.optimize has very sophisticated 
> multidimensional
> root finding...)
>
>
>
> > On Aug 4, 12:06 pm, "William Stein" <[EMAIL PROTECTED]> wrote:
> > > On 8/4/07, Robert Miller <[EMAIL PROTECTED]> wrote:
>
> > > > Here is the full traceback.
>
> > > > sage: M = random_matrix(RDF, 4, 4)
> > > > sage: M.eigenspaces()
> > > > ---------------------------------------------------------------------------
> > > > <type 'exceptions.NotImplementedError'>   Traceback (most recent call
> > > > last)
> > > > /Volumes/HOME/robert/sage-2.7.2/<ipython console> in <module>()
> > > > /Volumes/HOME/robert/sage-2.7.2/matrix2.pyx in
> > > > matrix2.Matrix.eigenspaces()
> > > > /Volumes/HOME/robert/sage-2.7.2/matrix2.pyx in matrix2.Matrix.fcp()
> > > > /Volumes/HOME/robert/sage-2.7.2/polynomial_element.pyx in
> > > > polynomial_element.Polynomial.factor()
> > > > <type 'exceptions.NotImplementedError'>:
>
> > > > What is happening is that polynomial_element.Polynomial.factor doesn't
> > > > know what to do with the RDF ring. It checks whether the ring is real,
> > > > but only does this for RR, not RDF:
>
> > > >         elif is_RealField(R):
> > > >             n = pari.set_real_precision(int(3.5*R.prec()) + 1)
> > > >             G = list(self._pari_('x').factor())
>
> > > > is_RealField(RDF) is False. So it makes it to the end of factor(),
> > > > where it says:
>
> > > >         if G is None:
> > > >             raise NotImplementedError
>
> > > > So the real problem is that polynomials over RDF don't know how to be
> > > > factored:
>
> > > > sage: R = PolynomialRing(RDF, 'x')
> > > > sage: f = R('x^2')
> > > > sage: f.factor()
> > > > ---------------------------------------------------------------------------
> > > > <type 'exceptions.NotImplementedError'>   Traceback (most recent call
> > > > last)
> > > > /Volumes/HOME/robert/sage-2.7.2/<ipython console> in <module>()
> > > > /Volumes/HOME/robert/sage-2.7.2/polynomial_element.pyx in
> > > > polynomial_element.Polynomial.factor()
> > > > <type 'exceptions.NotImplementedError'>:
>
> > > The algorithm for computing
> > > eigenspaces / eigenvalues using charpolys and factoring
> > > is going to be stupid in comparison to sophisticated numerical
> > > algorithms in numpy, which is what should override the
> > > eigenspaces and eigenvalues commands...
>
> > > That said, it would be nice if polys over RDF had a factorization
> > > algorithm.
>
> > > william
>
> > > > On Aug 3, 3:03 pm, Joshua Kantor <[EMAIL PROTECTED]> wrote:
> > > > > The eigen routine uses numpy. If you do
> > > > > p,e=m.eigen()
>
> > > > > then p is an array of eigenvalues and e is a matrix whose columns are
> > > > > eigenvectors.
> > > > > The documentation works fine in my local install not sure why it fails
> > > > > on sage.math
>
> > > > > Josh
>
> > > > > On Aug 3, 2:43 pm, Robert Bradshaw <[EMAIL PROTECTED]>
> > > > > wrote:
>
> > > > > > Linear algebra over RR is generic and, in many cases, really bad so
> > > > > > far. Use RDF or even scipy unless you really need arbitrary
> > > > > > precision. (If the RDF interface is inconsistent, fix it and send a
> > > > > > patch :-)
>
> > > > > > - Robert
>
> > > > > > On Aug 1, 2007, at 6:28 AM, Robert Miller wrote:
>
> > > > > > > Hi everyone,
>
> > > > > > > I have a symmetric square matrix of real numbers, and I wish to
> > > > > > > compute the (necessarily) real eigenvalues of this matrix.
>
> > > > > > > sage: version()
> > > > > > > 'SAGE Version 2.7.2, Release Date: 2007-07-28'
>
> > > > > > > sage: M = random_matrix(RDF, 4, 4)
> > > > > > > sage: M += M.transpose()
>
> > > > > > > Now M is such a matrix. My first instinct was to try 
> > > > > > > 'eigenspaces':
>
> > > > > > > sage: M.eigenspaces()
> > > > > > > Exception (click to the left for traceback):
> > > > > > > ...
> > > > > > > NotImplementedError
>
> > > > > > > So I then tried using RR instead of RDF, and often I was getting
> > > > > > > variables in the eigenvalues. The example is no longer symmetric, 
> > > > > > > and
> > > > > > > I suspect this might be why:
>
> > > > > > > sage: M = random_matrix(RR, 4, 4)
> > > > > > > sage: M.eigenspaces()
> > > > > > > [
> > > > > > > (-0.687210648633541, []),
> > > > > > > (0.251596873005605, []),
> > > > > > > (1.00000000000000*a2, [])
> > > > > > > ]
>
> > > > > > > Wouldn't it be better to return the complex eigenvalues?
>
> > > > > > > When I went back to RDF, I was surprised by the function eigen, 
> > > > > > > which
> > > > > > > seems to be doing exactly what I want:
>
> > > > > > > sage: M = random_matrix(RDF, 4, 4)
> > > > > > > sage: M += M.transpose()
> > > > > > > sage: M.eigen()
> > > > > > > ([2.83698656526, 1.12513535857, -1.92195925813, -0.781971696103],
> > > > > > > [  -0.685785481323    0.676886167426   -0.249484727275
> > > > > > > -0.0963367054158]
> > > > > > > [   0.171856298084 -0.00520796932156   -0.108449572475
> > > > > > > -0.97912051357]
> > > > > > > [   0.704671991219    0.683316875186   -0.135215217363
> > > > > > > 0.135026952387]
> > > > > > > [  0.0600089260487   -0.273634868922   -0.952739684321
> > > > > > > 0.117515876478])
>
> > > > > > > However, the output is a little confusing-- I'm guessing either 
> > > > > > > the
> > > > > > > columns or rows of the matrix are the eigenvectors. So I check the
> > > > > > > documentation (this is on sagenb.org):
>
> > > > > > > sage: M.eigen?
> > > > > > > Traceback (most recent call last):
> > > > > > >   File "<stdin>", line 1, in <module>
> > > > > > >   File "/home/server2/nb1/sage_notebook/worksheets/rlmill/0/code/
> > > > > > > 50.py", line 4, in <module>
> > > > > > >     print _support_.docstring("M.eigen", globals())
> > > > > > >   File 
> > > > > > > "/usr/local/sage-2.6/local/lib/python2.5/site-packages/sage/
> > > > > > > server/support.py", line 142, in docstring
> > > > > > >     s += 'Definition:  %s\n'%sageinspect.sage_getdef(obj, 
> > > > > > > obj_name)
> > > > > > >   File 
> > > > > > > "/usr/local/sage-2.6/local/lib/python2.5/site-packages/sage/
> > > > > > > misc/sageinspect.py", line 267, in sage_getdef
> > > > > > >     spec = sage_getargspec(obj)
> > > > > > >   File 
> > > > > > > "/usr/local/sage-2.6/local/lib/python2.5/site-packages/sage/
> > > > > > > misc/sageinspect.py", line 252, in sage_getargspec
> > > > > > >     args, varargs, varkw = inspect.getargs(func_obj.func_code)
> > > > > > > UnboundLocalError: local variable 'func_obj' referenced before
> > > > > > > assignment
>
> > > > > > > I have absolutely no idea what to make of this.
>
> > > > > > > -R Miller
>
> > > --
> > > William Stein
> > > Associate Professor of Mathematics
> > > University of Washingtonhttp://www.williamstein.org
>
> --
> William Stein
> Associate Professor of Mathematics
> University of Washingtonhttp://www.williamstein.org


--~--~---------~--~----~------------~-------~--~----~
To post to this group, send email to sage-devel@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at http://groups.google.com/group/sage-devel
URLs: http://sage.scipy.org/sage/ and http://modular.math.washington.edu/sage/
-~----------~----~----~----~------~----~------~--~---

Reply via email to