Scilab Home page | Wiki | Bug tracker | Forge | Mailing list archives | ATOMS | File exchange
Please login or create an account
Change language to: Français - Português - 日本語 - Русский

Please note that the recommended version of Scilab is 6.1.1. This page might be outdated.
However, this page did not exist in the previous stable version.

Scilab Help >> UMFPACK Interface (sparse) > taucs_chfact


cholesky factorization of a sparse s.p.d. matrix

Calling Sequence

C_ptr = taucs_chfact(A)



a sparse real symmetric positive definite (s.p.d.) matrix


a pointer to the Cholesky factors (C,p : A(p,p)=CC')


This function computes a Cholesky factorization of the sparse symmetric positive definite (s.p.d.) matrix A and retrieves at the scilab level, a pointer (C_ptr) to a handle of the Cholesky factors (C,p) (the memory used for them is "outside" scilab space).

If your matrix is s.p.d. this function must be used in place of umf_lufact or in place of the scilab function chfact for a gain in speed (also as chfact uses the scilab memory for the factors the user must set the stacksize with a large value because of the fill-in occuring in computing the factor C which then may take more memory than the initial matrix A).

When such a factorization have been computed, a linear system must be solved with taucs_chsolve. To free the memory used by the Cholesky factors, use taucs_chdel(C_ptr) ;to retrieve the Cholesky factors at the scilab level (for example to display their sparse patterns), use taucs_chget; to get some information (number of non zeros in C), use taucs_chinfo. To compute an approximation of the condition number in norm 2 use cond2sp.


  • taucs_chfact works only with the upper triangle of A, and the matrix A must be provided either in its complete form (that is with the lower triangle also) or only with its upper triangle;

  • currently taucs_chfact uses the genmmd (generalized minimum degree) algorithm of Liu to find in a first step the permutation p (so as to minimize the fill-in in the factorization); future versions will let the user choose his/her own reordering by providing a supplementary argument p.


// Example #1 : a small linear test system 
// whom solution must be [1;2;3;4;5]
A = sparse( [ 2 -1  0  0  0;
             -1  2 -1  0  0; 
              0 -1  2 -1  0; 
              0  0 -1  2 -1; 
              0  0  0 -1  2] );
b = [0 ; 0; 0; 0; 6];
Cp = taucs_chfact(A);
x = taucs_chsolve(Cp,b)
// do not forget to clear memory with
// Example #2 a real example
// first load a sparse matrix
[A] = ReadHBSparse(SCI+"/modules/umfpack/examples/bcsstk24.rsa");
// compute the factorization
Cp = taucs_chfact(A); 
b = rand(size(A,1),1); // a random rhs
// use taucs_chsolve for solving Ax=b
x = taucs_chsolve(Cp,b);
norm(A*x - b)
// the same with one iterative refinement step
x = taucs_chsolve(Cp,b,A);
norm(A*x - b)
// do not forget to clear memory

See Also

  • taucs_chsolve — solve a linear sparse (s.p.d.) system given the Cholesky factors
  • taucs_chdel — utility function used with taucs_chfact
  • taucs_chinfo — get information on Cholesky factors
  • taucs_chget — retrieve the Cholesky factorization at the scilab level
  • cond2sp — computes an approximation of the 2-norm condition number of a s.p.d. sparse matrix
Scilab Enterprises
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Wed Apr 01 10:13:56 CEST 2015