annotate examples/mysparse.c @ 12312:b10ea6efdc58 release-3-4-x ss-3-3-91

version is now 3.3.91
author John W. Eaton <jwe@octave.org>
date Mon, 31 Jan 2011 08:36:58 -0500
parents 6cb30a539481
children 9a8dbd6b6b20
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
7081
503001863427 [project @ 2007-10-31 01:08:14 by jwe]
jwe
parents: 7019
diff changeset
4 mexFunction (int nlhs, mxArray *plhs[], int nrhs,
9932
6cb30a539481 untabify files in examples directory
John W. Eaton <jwe@octave.org>
parents: 9053
diff changeset
5 const mxArray *prhs[])
5903
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
6 {
6686
2aad75fcc93a [project @ 2007-06-03 20:58:28 by dbateman]
dbateman
parents: 6580
diff changeset
7 mwSize n, m, nz;
5903
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
8 mxArray *v;
6686
2aad75fcc93a [project @ 2007-06-03 20:58:28 by dbateman]
dbateman
parents: 6580
diff changeset
9 mwIndex i;
5903
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
10 double *pr, *pi;
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
11 double *pr2, *pi2;
6686
2aad75fcc93a [project @ 2007-06-03 20:58:28 by dbateman]
dbateman
parents: 6580
diff changeset
12 mwIndex *ir, *jc;
2aad75fcc93a [project @ 2007-06-03 20:58:28 by dbateman]
dbateman
parents: 6580
diff changeset
13 mwIndex *ir2, *jc2;
5903
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
14
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
15 if (nrhs != 1 || ! mxIsSparse (prhs[0]))
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
16 mexErrMsgTxt ("expects sparse matrix");
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
17
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
18 m = mxGetM (prhs [0]);
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
19 n = mxGetN (prhs [0]);
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
20 nz = mxGetNzmax (prhs [0]);
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
21
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
22 if (mxIsComplex (prhs[0]))
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
23 {
7081
503001863427 [project @ 2007-10-31 01:08:14 by jwe]
jwe
parents: 7019
diff changeset
24 mexPrintf ("Matrix is %d-by-%d complex",
9932
6cb30a539481 untabify files in examples directory
John W. Eaton <jwe@octave.org>
parents: 9053
diff changeset
25 " sparse matrix", m, n);
6580
d2bb3b8a8d20 [project @ 2007-04-25 22:19:03 by dbateman]
dbateman
parents: 5903
diff changeset
26 mexPrintf (" with %d elements\n", nz);
5903
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
27
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
28 pr = mxGetPr (prhs[0]);
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
29 pi = mxGetPi (prhs[0]);
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
30 ir = mxGetIr (prhs[0]);
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
31 jc = mxGetJc (prhs[0]);
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
32
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
33 i = n;
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
34 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
35 mexPrintf ("last non-zero element (%d, %d) =",
9932
6cb30a539481 untabify files in examples directory
John W. Eaton <jwe@octave.org>
parents: 9053
diff changeset
36 ir[nz-1]+ 1, i);
7081
503001863427 [project @ 2007-10-31 01:08:14 by jwe]
jwe
parents: 7019
diff changeset
37 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
38
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
39 v = mxCreateSparse (m, n, nz, mxCOMPLEX);
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
40 pr2 = mxGetPr (v);
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
41 pi2 = mxGetPi (v);
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
42 ir2 = mxGetIr (v);
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
43 jc2 = mxGetJc (v);
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 for (i = 0; i < nz; i++)
6580
d2bb3b8a8d20 [project @ 2007-04-25 22:19:03 by dbateman]
dbateman
parents: 5903
diff changeset
46 {
d2bb3b8a8d20 [project @ 2007-04-25 22:19:03 by dbateman]
dbateman
parents: 5903
diff changeset
47 pr2[i] = 2 * pr[i];
d2bb3b8a8d20 [project @ 2007-04-25 22:19:03 by dbateman]
dbateman
parents: 5903
diff changeset
48 pi2[i] = 2 * pi[i];
d2bb3b8a8d20 [project @ 2007-04-25 22:19:03 by dbateman]
dbateman
parents: 5903
diff changeset
49 ir2[i] = ir[i];
d2bb3b8a8d20 [project @ 2007-04-25 22:19:03 by dbateman]
dbateman
parents: 5903
diff changeset
50 }
5903
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
51 for (i = 0; i < n + 1; i++)
6580
d2bb3b8a8d20 [project @ 2007-04-25 22:19:03 by dbateman]
dbateman
parents: 5903
diff changeset
52 jc2[i] = jc[i];
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 if (nlhs > 0)
6580
d2bb3b8a8d20 [project @ 2007-04-25 22:19:03 by dbateman]
dbateman
parents: 5903
diff changeset
55 plhs[0] = v;
5903
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
56 }
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
57 else if (mxIsLogical (prhs[0]))
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
58 {
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
59 bool *pbr, *pbr2;
7081
503001863427 [project @ 2007-10-31 01:08:14 by jwe]
jwe
parents: 7019
diff changeset
60 mexPrintf ("Matrix is %d-by-%d logical",
9932
6cb30a539481 untabify files in examples directory
John W. Eaton <jwe@octave.org>
parents: 9053
diff changeset
61 " sparse matrix", m, n);
6580
d2bb3b8a8d20 [project @ 2007-04-25 22:19:03 by dbateman]
dbateman
parents: 5903
diff changeset
62 mexPrintf (" with %d elements\n", nz);
5903
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 pbr = mxGetLogicals (prhs[0]);
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
65 ir = mxGetIr (prhs[0]);
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
66 jc = mxGetJc (prhs[0]);
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 i = n;
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
69 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
70 mexPrintf ("last non-zero element (%d, %d) = %d\n",
503001863427 [project @ 2007-10-31 01:08:14 by jwe]
jwe
parents: 7019
diff changeset
71 ir[nz-1]+ 1, i, pbr[nz-1]);
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 v = mxCreateSparseLogicalMatrix (m, n, nz);
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
74 pbr2 = mxGetLogicals (v);
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
75 ir2 = mxGetIr (v);
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
76 jc2 = mxGetJc (v);
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 for (i = 0; i < nz; i++)
6580
d2bb3b8a8d20 [project @ 2007-04-25 22:19:03 by dbateman]
dbateman
parents: 5903
diff changeset
79 {
d2bb3b8a8d20 [project @ 2007-04-25 22:19:03 by dbateman]
dbateman
parents: 5903
diff changeset
80 pbr2[i] = pbr[i];
d2bb3b8a8d20 [project @ 2007-04-25 22:19:03 by dbateman]
dbateman
parents: 5903
diff changeset
81 ir2[i] = ir[i];
d2bb3b8a8d20 [project @ 2007-04-25 22:19:03 by dbateman]
dbateman
parents: 5903
diff changeset
82 }
5903
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
83 for (i = 0; i < n + 1; i++)
6580
d2bb3b8a8d20 [project @ 2007-04-25 22:19:03 by dbateman]
dbateman
parents: 5903
diff changeset
84 jc2[i] = jc[i];
5903
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 if (nlhs > 0)
6580
d2bb3b8a8d20 [project @ 2007-04-25 22:19:03 by dbateman]
dbateman
parents: 5903
diff changeset
87 plhs[0] = v;
5903
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
88 }
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
89 else
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
90 {
7081
503001863427 [project @ 2007-10-31 01:08:14 by jwe]
jwe
parents: 7019
diff changeset
91 mexPrintf ("Matrix is %d-by-%d real",
9932
6cb30a539481 untabify files in examples directory
John W. Eaton <jwe@octave.org>
parents: 9053
diff changeset
92 " sparse matrix", m, n);
6580
d2bb3b8a8d20 [project @ 2007-04-25 22:19:03 by dbateman]
dbateman
parents: 5903
diff changeset
93 mexPrintf (" with %d elements\n", nz);
5903
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
94
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
95 pr = mxGetPr (prhs[0]);
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
96 ir = mxGetIr (prhs[0]);
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
97 jc = mxGetJc (prhs[0]);
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 i = n;
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
100 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
101 mexPrintf ("last non-zero element (%d, %d) = %g\n",
503001863427 [project @ 2007-10-31 01:08:14 by jwe]
jwe
parents: 7019
diff changeset
102 ir[nz-1]+ 1, i, pr[nz-1]);
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 v = mxCreateSparse (m, n, nz, mxREAL);
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
105 pr2 = mxGetPr (v);
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
106 ir2 = mxGetIr (v);
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
107 jc2 = mxGetJc (v);
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 for (i = 0; i < nz; i++)
6580
d2bb3b8a8d20 [project @ 2007-04-25 22:19:03 by dbateman]
dbateman
parents: 5903
diff changeset
110 {
d2bb3b8a8d20 [project @ 2007-04-25 22:19:03 by dbateman]
dbateman
parents: 5903
diff changeset
111 pr2[i] = 2 * pr[i];
d2bb3b8a8d20 [project @ 2007-04-25 22:19:03 by dbateman]
dbateman
parents: 5903
diff changeset
112 ir2[i] = ir[i];
d2bb3b8a8d20 [project @ 2007-04-25 22:19:03 by dbateman]
dbateman
parents: 5903
diff changeset
113 }
5903
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
114 for (i = 0; i < n + 1; i++)
6580
d2bb3b8a8d20 [project @ 2007-04-25 22:19:03 by dbateman]
dbateman
parents: 5903
diff changeset
115 jc2[i] = jc[i];
5903
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
116
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
117 if (nlhs > 0)
6580
d2bb3b8a8d20 [project @ 2007-04-25 22:19:03 by dbateman]
dbateman
parents: 5903
diff changeset
118 plhs[0] = v;
5903
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
119 }
11bb9bf343a0 [project @ 2006-07-26 03:36:33 by jwe]
jwe
parents:
diff changeset
120 }