annotate examples/mysparse.c @ 7019:4270ded9ddc6

[project @ 2007-10-13 01:42:20 by jwe]
author jwe
date Sat, 13 Oct 2007 01:42:21 +0000
parents 2aad75fcc93a
children 503001863427
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7019
4270ded9ddc6 [project @ 2007-10-13 01:42:20 by jwe]
jwe
parents: 6686
diff changeset
1 /*
4270ded9ddc6 [project @ 2007-10-13 01:42:20 by jwe]
jwe
parents: 6686
diff changeset
2
4270ded9ddc6 [project @ 2007-10-13 01:42:20 by jwe]
jwe
parents: 6686
diff changeset
3 Copyright (C) 2006, 2007 David Bateman
4270ded9ddc6 [project @ 2007-10-13 01:42:20 by jwe]
jwe
parents: 6686
diff changeset
4
4270ded9ddc6 [project @ 2007-10-13 01:42:20 by jwe]
jwe
parents: 6686
diff changeset
5 This file is part of Octave.
4270ded9ddc6 [project @ 2007-10-13 01:42:20 by jwe]
jwe
parents: 6686
diff changeset
6
4270ded9ddc6 [project @ 2007-10-13 01:42:20 by jwe]
jwe
parents: 6686
diff changeset
7 Octave is free software; you can redistribute it and/or modify it
4270ded9ddc6 [project @ 2007-10-13 01:42:20 by jwe]
jwe
parents: 6686
diff changeset
8 under the terms of the GNU General Public License as published by the
4270ded9ddc6 [project @ 2007-10-13 01:42:20 by jwe]
jwe
parents: 6686
diff changeset
9 Free Software Foundation; either version 3 of the License, or (at your
4270ded9ddc6 [project @ 2007-10-13 01:42:20 by jwe]
jwe
parents: 6686
diff changeset
10 option) any later version.
4270ded9ddc6 [project @ 2007-10-13 01:42:20 by jwe]
jwe
parents: 6686
diff changeset
11
4270ded9ddc6 [project @ 2007-10-13 01:42:20 by jwe]
jwe
parents: 6686
diff changeset
12 Octave is distributed in the hope that it will be useful, but WITHOUT
4270ded9ddc6 [project @ 2007-10-13 01:42:20 by jwe]
jwe
parents: 6686
diff changeset
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
4270ded9ddc6 [project @ 2007-10-13 01:42:20 by jwe]
jwe
parents: 6686
diff changeset
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
4270ded9ddc6 [project @ 2007-10-13 01:42:20 by jwe]
jwe
parents: 6686
diff changeset
15 for more details.
4270ded9ddc6 [project @ 2007-10-13 01:42:20 by jwe]
jwe
parents: 6686
diff changeset
16
4270ded9ddc6 [project @ 2007-10-13 01:42:20 by jwe]
jwe
parents: 6686
diff changeset
17 You should have received a copy of the GNU General Public License
4270ded9ddc6 [project @ 2007-10-13 01:42:20 by jwe]
jwe
parents: 6686
diff changeset
18 along with Octave; see the file COPYING. If not, see
4270ded9ddc6 [project @ 2007-10-13 01:42:20 by jwe]
jwe
parents: 6686
diff changeset
19 <http://www.gnu.org/licenses/>.
4270ded9ddc6 [project @ 2007-10-13 01:42:20 by jwe]
jwe
parents: 6686
diff changeset
20
4270ded9ddc6 [project @ 2007-10-13 01:42:20 by jwe]
jwe
parents: 6686
diff changeset
21 */
4270ded9ddc6 [project @ 2007-10-13 01:42:20 by jwe]
jwe
parents: 6686
diff changeset
22
5903
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
23 #include "mex.h"
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
24
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
25 void
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
26 mexFunction (int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
27 {
6686
2aad75fcc93a [project @ 2007-06-03 20:58:28 by dbateman]
dbateman
parents: 6580
diff changeset
28 mwSize n, m, nz;
5903
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
29 mxArray *v;
6686
2aad75fcc93a [project @ 2007-06-03 20:58:28 by dbateman]
dbateman
parents: 6580
diff changeset
30 mwIndex i;
5903
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
31 double *pr, *pi;
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
32 double *pr2, *pi2;
6686
2aad75fcc93a [project @ 2007-06-03 20:58:28 by dbateman]
dbateman
parents: 6580
diff changeset
33 mwIndex *ir, *jc;
2aad75fcc93a [project @ 2007-06-03 20:58:28 by dbateman]
dbateman
parents: 6580
diff changeset
34 mwIndex *ir2, *jc2;
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 if (nrhs != 1 || ! mxIsSparse (prhs[0]))
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
37 mexErrMsgTxt ("expects sparse matrix");
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
38
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
39 m = mxGetM (prhs [0]);
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
40 n = mxGetN (prhs [0]);
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
41 nz = mxGetNzmax (prhs [0]);
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
42
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
43 if (mxIsComplex (prhs[0]))
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
44 {
6580
d2bb3b8a8d20 [project @ 2007-04-25 22:19:03 by dbateman]
dbateman
parents: 5903
diff changeset
45 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
46 mexPrintf (" with %d elements\n", nz);
5903
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
47
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
48 pr = mxGetPr (prhs[0]);
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
49 pi = mxGetPi (prhs[0]);
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
50 ir = mxGetIr (prhs[0]);
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
51 jc = mxGetJc (prhs[0]);
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
52
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
53 i = n;
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
54 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
55 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
56 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
57
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
58 v = mxCreateSparse (m, n, nz, mxCOMPLEX);
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
59 pr2 = mxGetPr (v);
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
60 pi2 = mxGetPi (v);
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
61 ir2 = mxGetIr (v);
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
62 jc2 = mxGetJc (v);
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 for (i = 0; i < nz; i++)
6580
d2bb3b8a8d20 [project @ 2007-04-25 22:19:03 by dbateman]
dbateman
parents: 5903
diff changeset
65 {
d2bb3b8a8d20 [project @ 2007-04-25 22:19:03 by dbateman]
dbateman
parents: 5903
diff changeset
66 pr2[i] = 2 * pr[i];
d2bb3b8a8d20 [project @ 2007-04-25 22:19:03 by dbateman]
dbateman
parents: 5903
diff changeset
67 pi2[i] = 2 * pi[i];
d2bb3b8a8d20 [project @ 2007-04-25 22:19:03 by dbateman]
dbateman
parents: 5903
diff changeset
68 ir2[i] = ir[i];
d2bb3b8a8d20 [project @ 2007-04-25 22:19:03 by dbateman]
dbateman
parents: 5903
diff changeset
69 }
5903
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
70 for (i = 0; i < n + 1; i++)
6580
d2bb3b8a8d20 [project @ 2007-04-25 22:19:03 by dbateman]
dbateman
parents: 5903
diff changeset
71 jc2[i] = jc[i];
5903
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
72
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
73 if (nlhs > 0)
6580
d2bb3b8a8d20 [project @ 2007-04-25 22:19:03 by dbateman]
dbateman
parents: 5903
diff changeset
74 plhs[0] = v;
5903
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
75 }
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
76 else if (mxIsLogical (prhs[0]))
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
77 {
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
78 bool *pbr, *pbr2;
6580
d2bb3b8a8d20 [project @ 2007-04-25 22:19:03 by dbateman]
dbateman
parents: 5903
diff changeset
79 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
80 mexPrintf (" with %d elements\n", nz);
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 pbr = mxGetLogicals (prhs[0]);
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
83 ir = mxGetIr (prhs[0]);
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
84 jc = mxGetJc (prhs[0]);
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
85
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
86 i = n;
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
87 while (jc[i] == jc[i-1] && i != 0) i--;
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
88 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
89 i, pbr[nz-1]);
5903
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
90
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
91 v = mxCreateSparseLogicalMatrix (m, n, nz);
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
92 pbr2 = mxGetLogicals (v);
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
93 ir2 = mxGetIr (v);
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
94 jc2 = mxGetJc (v);
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
95
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
96 for (i = 0; i < nz; i++)
6580
d2bb3b8a8d20 [project @ 2007-04-25 22:19:03 by dbateman]
dbateman
parents: 5903
diff changeset
97 {
d2bb3b8a8d20 [project @ 2007-04-25 22:19:03 by dbateman]
dbateman
parents: 5903
diff changeset
98 pbr2[i] = pbr[i];
d2bb3b8a8d20 [project @ 2007-04-25 22:19:03 by dbateman]
dbateman
parents: 5903
diff changeset
99 ir2[i] = ir[i];
d2bb3b8a8d20 [project @ 2007-04-25 22:19:03 by dbateman]
dbateman
parents: 5903
diff changeset
100 }
5903
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
101 for (i = 0; i < n + 1; i++)
6580
d2bb3b8a8d20 [project @ 2007-04-25 22:19:03 by dbateman]
dbateman
parents: 5903
diff changeset
102 jc2[i] = jc[i];
5903
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 if (nlhs > 0)
6580
d2bb3b8a8d20 [project @ 2007-04-25 22:19:03 by dbateman]
dbateman
parents: 5903
diff changeset
105 plhs[0] = v;
5903
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
106 }
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
107 else
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
108 {
6580
d2bb3b8a8d20 [project @ 2007-04-25 22:19:03 by dbateman]
dbateman
parents: 5903
diff changeset
109 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
110 mexPrintf (" with %d elements\n", nz);
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 pr = mxGetPr (prhs[0]);
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
113 ir = mxGetIr (prhs[0]);
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
114 jc = mxGetJc (prhs[0]);
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
115
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
116 i = n;
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
117 while (jc[i] == jc[i-1] && i != 0) i--;
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
118 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
119 i, pr[nz-1]);
5903
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
120
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
121 v = mxCreateSparse (m, n, nz, mxREAL);
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
122 pr2 = mxGetPr (v);
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
123 ir2 = mxGetIr (v);
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
124 jc2 = mxGetJc (v);
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
125
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
126 for (i = 0; i < nz; i++)
6580
d2bb3b8a8d20 [project @ 2007-04-25 22:19:03 by dbateman]
dbateman
parents: 5903
diff changeset
127 {
d2bb3b8a8d20 [project @ 2007-04-25 22:19:03 by dbateman]
dbateman
parents: 5903
diff changeset
128 pr2[i] = 2 * pr[i];
d2bb3b8a8d20 [project @ 2007-04-25 22:19:03 by dbateman]
dbateman
parents: 5903
diff changeset
129 ir2[i] = ir[i];
d2bb3b8a8d20 [project @ 2007-04-25 22:19:03 by dbateman]
dbateman
parents: 5903
diff changeset
130 }
5903
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
131 for (i = 0; i < n + 1; i++)
6580
d2bb3b8a8d20 [project @ 2007-04-25 22:19:03 by dbateman]
dbateman
parents: 5903
diff changeset
132 jc2[i] = jc[i];
5903
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
133
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
134 if (nlhs > 0)
6580
d2bb3b8a8d20 [project @ 2007-04-25 22:19:03 by dbateman]
dbateman
parents: 5903
diff changeset
135 plhs[0] = v;
5903
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
136 }
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
137 }