Mercurial > octave-nkf
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 } |