annotate examples/mysparse.c @ 7334:274d9642ac10 release-3-0-0

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