1 #include "cs_mex.h"
2 /* cs_droptol: remove small entries from A */
mexFunction(int nargout,mxArray * pargout[],int nargin,const mxArray * pargin[])3 void mexFunction
4 (
5 int nargout,
6 mxArray *pargout [ ],
7 int nargin,
8 const mxArray *pargin [ ]
9 )
10 {
11 CS_INT j, k ;
12 double tol ;
13 if (nargout > 1 || nargin != 2)
14 {
15 mexErrMsgTxt ("Usage: C = cs_droptol(A,tol)") ;
16 }
17 tol = mxGetScalar (pargin [1]) ; /* get tol */
18
19 if (mxIsComplex (pargin [0]))
20 {
21 #ifndef NCOMPLEX
22 cs_cl Amatrix, *C, *A ;
23 A = cs_cl_mex_get_sparse (&Amatrix, 0, pargin [0]) ; /* get A */
24 C = cs_cl_spalloc (A->m, A->n, A->nzmax, 1, 0) ; /* C = A */
25 for (j = 0 ; j <= A->n ; j++) C->p [j] = A->p [j] ;
26 for (k = 0 ; k < A->nzmax ; k++) C->i [k] = A->i [k] ;
27 for (k = 0 ; k < A->nzmax ; k++) C->x [k] = A->x [k] ;
28 cs_cl_droptol (C, tol) ; /* drop from C */
29 pargout [0] = cs_cl_mex_put_sparse (&C) ; /* return C */
30 #else
31 mexErrMsgTxt ("complex matrices not supported") ;
32 #endif
33 }
34 else
35 {
36 cs_dl Amatrix, *C, *A ;
37 A = cs_dl_mex_get_sparse (&Amatrix, 0, 1, pargin [0]) ; /* get A */
38 C = cs_dl_spalloc (A->m, A->n, A->nzmax, 1, 0) ; /* C = A */
39 for (j = 0 ; j <= A->n ; j++) C->p [j] = A->p [j] ;
40 for (k = 0 ; k < A->nzmax ; k++) C->i [k] = A->i [k] ;
41 for (k = 0 ; k < A->nzmax ; k++) C->x [k] = A->x [k] ;
42 cs_dl_droptol (C, tol) ; /* drop from C */
43 pargout [0] = cs_dl_mex_put_sparse (&C) ; /* return C */
44 }
45 }
46