annotate examples/mysparse.c @ 6580:d2bb3b8a8d20

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