1
// =============================================================================
2
// === qrsimple.cpp ============================================================
3
// =============================================================================
5
// A very simple example of the use of SuiteSparseQR by a C++ main program.
6
// Usage: qrsimple < Matrix_in_MatrixMarket_format
8
#include "SuiteSparseQR.hpp"
9
int main (int argc, char **argv)
11
cholmod_common Common, *cc ;
13
cholmod_dense *X, *B, *Residual ;
14
double rnorm, one [2] = {1,0}, minusone [2] = {-1,0} ;
19
cholmod_l_start (cc) ;
22
A = (cholmod_sparse *)
23
cholmod_l_read_matrix (stdin, 1, &mtype, cc) ;
25
// B = ones (size (A,1),1)
26
B = cholmod_l_ones (A->nrow, 1, A->xtype, cc) ;
29
X = SuiteSparseQR <double> (A, B, cc) ;
31
// rnorm = norm (B-A*X)
32
Residual = cholmod_l_copy_dense (B, cc) ;
33
cholmod_l_sdmult (A, 0, minusone, one, X, Residual, cc) ;
34
rnorm = cholmod_l_norm_dense (Residual, 2, cc) ;
35
printf ("2-norm of residual: %8.1e\n", rnorm) ;
36
printf ("rank %ld\n", cc->SPQR_istat [4]) ;
38
// free everything and finish CHOLMOD
39
cholmod_l_free_dense (&Residual, cc) ;
40
cholmod_l_free_sparse (&A, cc) ;
41
cholmod_l_free_dense (&X, cc) ;
42
cholmod_l_free_dense (&B, cc) ;
43
cholmod_l_finish (cc) ;