comparison 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
comparison
equal deleted inserted replaced
5902:6af4cea82cc7 5903:11bb9bf343a0
1 #include "mex.h"
2
3 void
4 mexFunction (int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
5 {
6 int n, m, nz;
7 mxArray *v;
8 int i;
9 double *pr, *pi;
10 double *pr2, *pi2;
11 int *ir, *jc;
12 int *ir2, *jc2;
13
14 if (nrhs != 1 || ! mxIsSparse (prhs[0]))
15 mexErrMsgTxt ("expects sparse matrix");
16
17 m = mxGetM (prhs [0]);
18 n = mxGetN (prhs [0]);
19 nz = mxGetNzmax (prhs [0]);
20
21 if (mxIsComplex (prhs[0]))
22 {
23 mexPrintf ("Matrix is %d-by-%d complex sparse matrix with %d elements\n",
24 m, n, nz);
25
26 pr = mxGetPr (prhs[0]);
27 pi = mxGetPi (prhs[0]);
28 ir = mxGetIr (prhs[0]);
29 jc = mxGetJc (prhs[0]);
30
31 i = n;
32 while (jc[i] == jc[i-1] && i != 0) i--;
33 mexPrintf ("last non-zero element (%d, %d) = (%g, %g)\n", ir[nz-1]+ 1,
34 i, pr[nz-1], pi[nz-1]);
35
36 v = mxCreateSparse (m, n, nz, mxCOMPLEX);
37 pr2 = mxGetPr (v);
38 pi2 = mxGetPi (v);
39 ir2 = mxGetIr (v);
40 jc2 = mxGetJc (v);
41
42 for (i = 0; i < nz; i++)
43 {
44 pr2[i] = 2 * pr[i];
45 pi2[i] = 2 * pi[i];
46 ir2[i] = ir[i];
47 }
48 for (i = 0; i < n + 1; i++)
49 jc2[i] = jc[i];
50
51 if (nlhs > 0)
52 plhs[0] = v;
53 }
54 else if (mxIsLogical (prhs[0]))
55 {
56 bool *pbr, *pbr2;
57 mexPrintf ("Matrix is %d-by-%d logical sparse matrix with %d elements\n",
58 m, n, nz);
59
60 pbr = mxGetLogicals (prhs[0]);
61 ir = mxGetIr (prhs[0]);
62 jc = mxGetJc (prhs[0]);
63
64 i = n;
65 while (jc[i] == jc[i-1] && i != 0) i--;
66 mexPrintf ("last non-zero element (%d, %d) = %d\n", ir[nz-1]+ 1,
67 i, pbr[nz-1]);
68
69 v = mxCreateSparseLogicalMatrix (m, n, nz);
70 pbr2 = mxGetLogicals (v);
71 ir2 = mxGetIr (v);
72 jc2 = mxGetJc (v);
73
74 for (i = 0; i < nz; i++)
75 {
76 pbr2[i] = pbr[i];
77 ir2[i] = ir[i];
78 }
79 for (i = 0; i < n + 1; i++)
80 jc2[i] = jc[i];
81
82 if (nlhs > 0)
83 plhs[0] = v;
84 }
85 else
86 {
87
88 mexPrintf ("Matrix is %d-by-%d real sparse matrix with %d elements\n",
89 m, n, nz);
90
91 pr = mxGetPr (prhs[0]);
92 ir = mxGetIr (prhs[0]);
93 jc = mxGetJc (prhs[0]);
94
95 i = n;
96 while (jc[i] == jc[i-1] && i != 0) i--;
97 mexPrintf ("last non-zero element (%d, %d) = %g\n", ir[nz-1]+ 1,
98 i, pr[nz-1]);
99
100 v = mxCreateSparse (m, n, nz, mxREAL);
101 pr2 = mxGetPr (v);
102 ir2 = mxGetIr (v);
103 jc2 = mxGetJc (v);
104
105 for (i = 0; i < nz; i++)
106 {
107 pr2[i] = 2 * pr[i];
108 ir2[i] = ir[i];
109 }
110 for (i = 0; i < n + 1; i++)
111 jc2[i] = jc[i];
112
113 if (nlhs > 0)
114 plhs[0] = v;
115 }
116 }