Mercurial > hg > octave-lyh
annotate libinterp/operators/op-sm-cs.cc @ 17481:576cf0589c6d
Overhaul contour labeling functions.
* scripts/plot/clabel.m: Use 'h', rather than 'retval', to match variables to
documentation. Improve performance of input processing by using try/catch block
and eliminating for loops.
* scripts/plot/private/__clabel__.m: Get X and Y spacing in points from axis
rather than assuming 4"x3" plot figure. Fix incorrect determination of axis limits
if no contour handle provided. Rename loop vars i1, j1 to i,j. Performance
improvement by using bsxfun over repmat. Use find to replace while loop (slow).
Keep label rotation in the range [-90, 90] for readability.
author | Rik <rik@octave.org> |
---|---|
date | Tue, 24 Sep 2013 13:16:50 -0700 |
parents | 2fc554ffbc28 |
children |
rev | line source |
---|---|
5164 | 1 /* |
2 | |
14138
72c96de7a403
maint: update copyright notices for 2012
John W. Eaton <jwe@octave.org>
parents:
11586
diff
changeset
|
3 Copyright (C) 2004-2012 David Bateman |
11523 | 4 Copyright (C) 1998-2004 Andy Adler |
7016 | 5 |
6 This file is part of Octave. | |
5164 | 7 |
8 Octave is free software; you can redistribute it and/or modify it | |
9 under the terms of the GNU General Public License as published by the | |
7016 | 10 Free Software Foundation; either version 3 of the License, or (at your |
11 option) any later version. | |
5164 | 12 |
13 Octave is distributed in the hope that it will be useful, but WITHOUT | |
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
16 for more details. | |
17 | |
18 You should have received a copy of the GNU General Public License | |
7016 | 19 along with Octave; see the file COPYING. If not, see |
20 <http://www.gnu.org/licenses/>. | |
5164 | 21 |
22 */ | |
23 | |
24 #ifdef HAVE_CONFIG_H | |
25 #include <config.h> | |
26 #endif | |
27 | |
28 #include "gripes.h" | |
29 #include "oct-obj.h" | |
30 #include "ov.h" | |
31 #include "ov-typeinfo.h" | |
32 #include "ov-complex.h" | |
33 #include "ops.h" | |
34 #include "xpow.h" | |
35 | |
36 #include "sparse-xpow.h" | |
37 #include "sparse-xdiv.h" | |
38 #include "ov-re-sparse.h" | |
39 #include "ov-cx-sparse.h" | |
40 #include "smx-sm-cs.h" | |
41 #include "smx-cs-sm.h" | |
42 | |
43 // sparse matrix by scalar ops. | |
44 | |
45 DEFBINOP_OP (add, sparse_matrix, complex, +) | |
46 DEFBINOP_OP (sub, sparse_matrix, complex, -) | |
47 DEFBINOP_OP (mul, sparse_matrix, complex, *) | |
48 | |
49 DEFBINOP (div, sparse_matrix, complex) | |
50 { | |
51 CAST_BINOP_ARGS (const octave_sparse_matrix&, const octave_complex&); | |
52 | |
53 Complex d = v2.complex_value (); | |
54 octave_value retval; | |
55 | |
56 if (d == 0.0) | |
8835
1685c61542f8
Don't perform narrowing to full matrices in mixed spare scalar operators
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
57 gripe_divide_by_zero (); |
5164 | 58 |
8835
1685c61542f8
Don't perform narrowing to full matrices in mixed spare scalar operators
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
59 retval = octave_value (v1.sparse_matrix_value () / d); |
5164 | 60 |
61 return retval; | |
62 } | |
63 | |
64 DEFBINOP (pow, sparse_matrix, complex) | |
65 { | |
66 CAST_BINOP_ARGS (const octave_sparse_matrix&, const octave_complex&); | |
67 return xpow (v1.matrix_value (), v2.complex_value ()); | |
68 } | |
69 | |
70 DEFBINOP (ldiv, sparse_matrix, complex) | |
71 { | |
5760 | 72 CAST_BINOP_ARGS (const octave_sparse_matrix&, const octave_complex&); |
5164 | 73 |
14846
460a3c6d8bf1
maint: Use Octave coding convention for cuddled parenthis in function calls with empty argument lists.
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
74 if (v1.rows () == 1 && v1.columns () == 1) |
6221 | 75 { |
76 double d = v1.scalar_value (); | |
77 | |
78 if (d == 0.0) | |
9931
fb6b6fcafa62
untabify files in src/OPERATORS directory
John W. Eaton <jwe@octave.org>
parents:
8920
diff
changeset
|
79 gripe_divide_by_zero (); |
5164 | 80 |
8835
1685c61542f8
Don't perform narrowing to full matrices in mixed spare scalar operators
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
81 return octave_value (SparseComplexMatrix (1, 1, v2.complex_value () / d)); |
6221 | 82 } |
83 else | |
84 { | |
85 MatrixType typ = v1.matrix_type (); | |
86 SparseMatrix m1 = v1.sparse_matrix_value (); | |
87 ComplexMatrix m2 = ComplexMatrix (1, 1, v2.complex_value ()); | |
88 ComplexMatrix ret = xleftdiv (m1, m2, typ); | |
89 v1.matrix_type (typ); | |
90 return ret; | |
91 } | |
5164 | 92 } |
93 | |
94 DEFBINOP_FN (lt, sparse_matrix, complex, mx_el_lt) | |
95 DEFBINOP_FN (le, sparse_matrix, complex, mx_el_le) | |
96 DEFBINOP_FN (eq, sparse_matrix, complex, mx_el_eq) | |
97 DEFBINOP_FN (ge, sparse_matrix, complex, mx_el_ge) | |
98 DEFBINOP_FN (gt, sparse_matrix, complex, mx_el_gt) | |
99 DEFBINOP_FN (ne, sparse_matrix, complex, mx_el_ne) | |
100 | |
101 DEFBINOP_OP (el_mul, sparse_matrix, complex, *) | |
102 | |
103 DEFBINOP (el_div, sparse_matrix, complex) | |
104 { | |
105 CAST_BINOP_ARGS (const octave_sparse_matrix&, const octave_complex&); | |
106 | |
107 Complex d = v2.complex_value (); | |
108 octave_value retval; | |
109 | |
110 if (d == 0.0) | |
8835
1685c61542f8
Don't perform narrowing to full matrices in mixed spare scalar operators
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
111 gripe_divide_by_zero (); |
5164 | 112 |
8835
1685c61542f8
Don't perform narrowing to full matrices in mixed spare scalar operators
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
113 retval = octave_value (v1.sparse_matrix_value () / d); |
5164 | 114 |
115 return retval; | |
116 } | |
117 | |
118 DEFBINOP_FN (el_pow, sparse_matrix, complex, elem_xpow) | |
119 | |
120 DEFBINOP (el_ldiv, sparse_matrix, complex) | |
121 { | |
122 CAST_BINOP_ARGS (const octave_sparse_matrix&, const octave_complex&); | |
123 | |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
124 return octave_value (x_el_div (v2.complex_value (), |
9931
fb6b6fcafa62
untabify files in src/OPERATORS directory
John W. Eaton <jwe@octave.org>
parents:
8920
diff
changeset
|
125 v1.sparse_matrix_value ())); |
5164 | 126 } |
127 | |
128 DEFBINOP_FN (el_and, sparse_matrix, complex, mx_el_and) | |
129 DEFBINOP_FN (el_or, sparse_matrix, complex, mx_el_or) | |
130 | |
131 DEFCATOP (sm_cs, sparse_matrix, complex) | |
132 { | |
133 CAST_BINOP_ARGS (octave_sparse_matrix&, const octave_complex&); | |
134 SparseComplexMatrix tmp (1, 1, v2.complex_value ()); | |
135 return octave_value (v1.sparse_matrix_value (). concat (tmp, ra_idx)); | |
136 } | |
137 | |
138 void | |
139 install_sm_cs_ops (void) | |
140 { | |
141 INSTALL_BINOP (op_add, octave_sparse_matrix, octave_complex, add); | |
142 INSTALL_BINOP (op_sub, octave_sparse_matrix, octave_complex, sub); | |
143 INSTALL_BINOP (op_mul, octave_sparse_matrix, octave_complex, mul); | |
144 INSTALL_BINOP (op_div, octave_sparse_matrix, octave_complex, div); | |
145 INSTALL_BINOP (op_pow, octave_sparse_matrix, octave_complex, pow); | |
146 INSTALL_BINOP (op_ldiv, octave_sparse_matrix, octave_complex, ldiv); | |
147 | |
148 INSTALL_BINOP (op_lt, octave_sparse_matrix, octave_complex, lt); | |
149 INSTALL_BINOP (op_le, octave_sparse_matrix, octave_complex, le); | |
150 INSTALL_BINOP (op_eq, octave_sparse_matrix, octave_complex, eq); | |
151 INSTALL_BINOP (op_ge, octave_sparse_matrix, octave_complex, ge); | |
152 INSTALL_BINOP (op_gt, octave_sparse_matrix, octave_complex, gt); | |
153 INSTALL_BINOP (op_ne, octave_sparse_matrix, octave_complex, ne); | |
154 INSTALL_BINOP (op_el_mul, octave_sparse_matrix, octave_complex, el_mul); | |
155 INSTALL_BINOP (op_el_div, octave_sparse_matrix, octave_complex, el_div); | |
156 INSTALL_BINOP (op_el_pow, octave_sparse_matrix, octave_complex, el_pow); | |
157 INSTALL_BINOP (op_el_ldiv, octave_sparse_matrix, octave_complex, el_ldiv); | |
158 INSTALL_BINOP (op_el_and, octave_sparse_matrix, octave_complex, el_and); | |
159 INSTALL_BINOP (op_el_or, octave_sparse_matrix, octave_complex, el_or); | |
160 | |
161 INSTALL_CATOP (octave_sparse_matrix, octave_complex, sm_cs); | |
162 | |
163 INSTALL_ASSIGNCONV (octave_sparse_matrix, octave_complex, | |
9931
fb6b6fcafa62
untabify files in src/OPERATORS directory
John W. Eaton <jwe@octave.org>
parents:
8920
diff
changeset
|
164 octave_sparse_complex_matrix); |
5164 | 165 } |