Mercurial > hg > octave-lyh
diff examples/mysparse.c @ 5903:11bb9bf343a0
[project @ 2006-07-26 03:36:33 by jwe]
author | jwe |
---|---|
date | Wed, 26 Jul 2006 03:36:33 +0000 |
parents | |
children | d2bb3b8a8d20 |
line wrap: on
line diff
new file mode 100644 --- /dev/null +++ b/examples/mysparse.c @@ -0,0 +1,116 @@ +#include "mex.h" + +void +mexFunction (int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) +{ + int n, m, nz; + mxArray *v; + int i; + double *pr, *pi; + double *pr2, *pi2; + int *ir, *jc; + int *ir2, *jc2; + + if (nrhs != 1 || ! mxIsSparse (prhs[0])) + mexErrMsgTxt ("expects sparse matrix"); + + m = mxGetM (prhs [0]); + n = mxGetN (prhs [0]); + nz = mxGetNzmax (prhs [0]); + + if (mxIsComplex (prhs[0])) + { + mexPrintf ("Matrix is %d-by-%d complex sparse matrix with %d elements\n", + m, n, nz); + + pr = mxGetPr (prhs[0]); + pi = mxGetPi (prhs[0]); + ir = mxGetIr (prhs[0]); + jc = mxGetJc (prhs[0]); + + i = n; + while (jc[i] == jc[i-1] && i != 0) i--; + mexPrintf ("last non-zero element (%d, %d) = (%g, %g)\n", ir[nz-1]+ 1, + i, pr[nz-1], pi[nz-1]); + + v = mxCreateSparse (m, n, nz, mxCOMPLEX); + pr2 = mxGetPr (v); + pi2 = mxGetPi (v); + ir2 = mxGetIr (v); + jc2 = mxGetJc (v); + + for (i = 0; i < nz; i++) + { + pr2[i] = 2 * pr[i]; + pi2[i] = 2 * pi[i]; + ir2[i] = ir[i]; + } + for (i = 0; i < n + 1; i++) + jc2[i] = jc[i]; + + if (nlhs > 0) + plhs[0] = v; + } + else if (mxIsLogical (prhs[0])) + { + bool *pbr, *pbr2; + mexPrintf ("Matrix is %d-by-%d logical sparse matrix with %d elements\n", + m, n, nz); + + pbr = mxGetLogicals (prhs[0]); + ir = mxGetIr (prhs[0]); + jc = mxGetJc (prhs[0]); + + i = n; + while (jc[i] == jc[i-1] && i != 0) i--; + mexPrintf ("last non-zero element (%d, %d) = %d\n", ir[nz-1]+ 1, + i, pbr[nz-1]); + + v = mxCreateSparseLogicalMatrix (m, n, nz); + pbr2 = mxGetLogicals (v); + ir2 = mxGetIr (v); + jc2 = mxGetJc (v); + + for (i = 0; i < nz; i++) + { + pbr2[i] = pbr[i]; + ir2[i] = ir[i]; + } + for (i = 0; i < n + 1; i++) + jc2[i] = jc[i]; + + if (nlhs > 0) + plhs[0] = v; + } + else + { + + mexPrintf ("Matrix is %d-by-%d real sparse matrix with %d elements\n", + m, n, nz); + + pr = mxGetPr (prhs[0]); + ir = mxGetIr (prhs[0]); + jc = mxGetJc (prhs[0]); + + i = n; + while (jc[i] == jc[i-1] && i != 0) i--; + mexPrintf ("last non-zero element (%d, %d) = %g\n", ir[nz-1]+ 1, + i, pr[nz-1]); + + v = mxCreateSparse (m, n, nz, mxREAL); + pr2 = mxGetPr (v); + ir2 = mxGetIr (v); + jc2 = mxGetJc (v); + + for (i = 0; i < nz; i++) + { + pr2[i] = 2 * pr[i]; + ir2[i] = ir[i]; + } + for (i = 0; i < n + 1; i++) + jc2[i] = jc[i]; + + if (nlhs > 0) + plhs[0] = v; + } +}