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 Washington
http://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