please see 
this https://groups.google.com/d/topic/cvxopt/xQ-lR9ESijg/discussion
far a way to make it more sane. It turns out that cvxopt has un 
undocumented function to 
extract the Cholesky factor directly.

On Tuesday, 30 October 2012 21:49:48 UTC+8, Dima Pasechnik wrote:
>
> On 2012-10-29, Raniere Gaia Silva <r.gaia...@gmail.com> wrote: 
> > Hi, 
> > I need to performe a (numerical) cholesky factorization of a sparse 
> > matrix (20x20) but I'm getting a error. 
>
> OK, my previous reply didn't make much sense, so here is one that is 
> meaningful. In cvxopt (a standard Sage spkg) there is an interface to 
> sparse Cholesky 
> factorization. 
> There aren't too many hooks for cvxopt in Sage, and, moreover, cvxopt 
> does not provide a straightforward interface, you need to solve matrix 
> linear equations to get L, see 
>
> http://abel.ee.ucla.edu/cvxopt/userguide/spsolvers.html#positive-definite-linear-equations
>  
>
> so it's a bit of a walk: 
>
> sage: preparser(False) # somehow, preparser breaks cvxopt :( 
> sage: import cvxopt 
> sage: from cvxopt import cholmod 
> sage: A=cvxopt.sparse(cvxopt.matrix([[1,1],[1,2]])); A 
> <2x2 sparse matrix, tc='d', nnz=4> 
> sage: print A 
> [ 1.00e+00  1.00e+00] 
> [ 1.00e+00  2.00e+00] 
> sage: F = cholmod.symbolic(A) 
> sage: cholmod.numeric(A,F) 
> sage: Lt=cvxopt.cholmod.spsolve(F,A,sys=4); Lt 
> <2x2 sparse matrix, tc='d', nnz=3> 
> sage: print Lt 
> [ 1.00e+00  1.00e+00] 
> [    0      1.00e+00] 
>
> Achtung! This only works in the case the decomposition PAP^T=LL^T 
> computed by cholmod (and stored in F), where P is a permutation 
> matrix, has P=identity. More generally, you need to be more careful: 
> either cvxopt.cholmod.symbolic() must be called with the parameter 
> p specified to be the identity (permutation) matrix, or it can (perhaps) 
> be retrieved using cvxopt.cholmod.spsolve() with appropriate B and sys=... 
>
> Well, perhaps you actually do not need to know L explicitly, just to 
> solve these matrix equations... 
>
> By the way, you can extract entries of Lt using syntax like this: 
> sage: Lt[1,0] 
> 0.0 
> sage: Lt[1,1] 
> 1.0 
>
> note that 
> sage: type(Lt[1,0]) 
> <type 'float'> 
>
> so they can be converted back to Sage types. 
>
> HTH, 
> Dmitrii 
>
> PS. cvxopt has its own google group: 
> https://groups.google.com/forum/?fromgroups=#!forum/cvxopt 
>
> > I look at this thread 
> > 
> https://groups.google.com/forum/?fromgroups=#!searchin/sage-devel/cholesky/sage-devel/AW4pmKx49H4/7iuet3rWYQgJ
>  
> > but it didn't help very much (and is a little old). 
> > 
> > Bellow a minimal example of the problem. 
> > 
> > {{{ 
> > sage: D = matrix(RDF, 2, 2, [[1, 1],[1,2]]) 
> > sage: D 
> > [1.0 1.0] 
> > [1.0 2.0] 
> > sage: D.cholesky() 
> > [1.0 0.0] 
> > [1.0 1.0] 
> > sage: D = matrix(RDF, 2, 2, [[1, 1],[1,2]], sparse=True) 
> > sage: D 
> > [1.0 1.0] 
> > [1.0 2.0] 
> > sage: D.cholesky() 
> > 
> --------------------------------------------------------------------------- 
> > TypeError                                 Traceback (most recent call 
> last) 
> > 
> > /home/raniere/documents/cnpq_126874_2012-3/src_sage/<ipython console> 
> > in <module>() 
> > 
> > 
> /home/raniere/opt/sage/local/lib/python2.7/site-packages/sage/matrix/matrix2.so
>  
>
> > in sage.matrix.matrix2.Matrix.cholesky (sage/matrix/matrix2.c:47860)() 
> > 
> > TypeError: base ring of the matrix must be exact, not Real Double Field 
> > }}} 
> > 
> > Thanks, 
> > Raniere 
> > 
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"sage-support" group.
To post to this group, send email to sage-support@googlegroups.com.
To unsubscribe from this group, send email to 
sage-support+unsubscr...@googlegroups.com.
Visit this group at http://groups.google.com/group/sage-support?hl=en.


Reply via email to