Mercurial > hg > octave-nkf
annotate liboctave/CSparse.h @ 8968:91d53dc37f79
Add perm * sparse, perm \ sparse, sparse * perm, and sparse / perm operations.
Nothing terribly fancy in any of this. There probably is some
mechanism for using the permutation vectors and some assign or index
method in the sparse classes, but I've never understood all the
intricacies. I'm opting for a simple implementation at the cost of
possibly duplicating some functionality.
author | Jason Riedy <jason@acm.org> |
---|---|
date | Tue, 10 Mar 2009 21:54:44 -0400 |
parents | 1bba53c0a38d |
children | a5035bc7fbfb |
rev | line source |
---|---|
5164 | 1 /* |
2 | |
8920 | 3 Copyright (C) 2004, 2005, 2006, 2007, 2008 David Bateman |
7016 | 4 Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004 Andy Adler |
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 #if !defined (octave_CSparse_h) | |
25 #define octave_CSparse_h 1 | |
26 | |
27 #include "dMatrix.h" | |
28 #include "dNDArray.h" | |
29 #include "CNDArray.h" | |
30 #include "dColVector.h" | |
31 #include "CColVector.h" | |
32 #include "oct-cmplx.h" | |
33 | |
8335 | 34 #include "DET.h" |
5164 | 35 #include "MSparse.h" |
36 #include "MSparse-defs.h" | |
37 #include "Sparse-op-defs.h" | |
5785 | 38 #include "MatrixType.h" |
5164 | 39 |
8968
91d53dc37f79
Add perm * sparse, perm \ sparse, sparse * perm, and sparse / perm operations.
Jason Riedy <jason@acm.org>
parents:
8966
diff
changeset
|
40 class PermMatrix; |
8964
f4f4d65faaa0
Implement sparse * diagonal and diagonal * sparse operations, double-prec only.
Jason Riedy <jason@acm.org>
parents:
8920
diff
changeset
|
41 class DiagMatrix; |
f4f4d65faaa0
Implement sparse * diagonal and diagonal * sparse operations, double-prec only.
Jason Riedy <jason@acm.org>
parents:
8920
diff
changeset
|
42 class ComplexDiagMatrix; |
5164 | 43 class SparseMatrix; |
44 class SparseBoolMatrix; | |
45 | |
46 class | |
6108 | 47 OCTAVE_API |
5164 | 48 SparseComplexMatrix : public MSparse<Complex> |
49 { | |
50 public: | |
51 | |
52 typedef void (*solve_singularity_handler) (double rcond); | |
53 | |
54 SparseComplexMatrix (void) : MSparse<Complex> () { } | |
55 | |
5275 | 56 SparseComplexMatrix (octave_idx_type r, octave_idx_type c) : MSparse<Complex> (r, c) { } |
5164 | 57 |
6823 | 58 SparseComplexMatrix (const dim_vector& dv, octave_idx_type nz = 0) : |
59 MSparse<Complex> (dv, nz) { } | |
60 | |
5275 | 61 explicit SparseComplexMatrix (octave_idx_type r, octave_idx_type c, Complex val) |
5164 | 62 : MSparse<Complex> (r, c, val) { } |
63 | |
5275 | 64 SparseComplexMatrix (octave_idx_type r, octave_idx_type c, double val) |
5164 | 65 : MSparse<Complex> (r, c, Complex (val)) { } |
66 | |
67 SparseComplexMatrix (const SparseComplexMatrix& a) | |
68 : MSparse<Complex> (a) { } | |
69 | |
70 SparseComplexMatrix (const SparseComplexMatrix& a, const dim_vector& dv) | |
71 : MSparse<Complex> (a, dv) { } | |
72 | |
73 SparseComplexMatrix (const MSparse<Complex>& a) : MSparse<Complex> (a) { } | |
74 | |
75 explicit SparseComplexMatrix (const ComplexMatrix& a) | |
76 : MSparse<Complex> (a) { } | |
77 | |
78 explicit SparseComplexMatrix (const ComplexNDArray& a) | |
79 : MSparse<Complex> (a) { } | |
80 | |
5275 | 81 explicit SparseComplexMatrix (const Array<Complex> a, const Array<octave_idx_type>& r, |
82 const Array<octave_idx_type>& c, octave_idx_type nr = -1, | |
83 octave_idx_type nc = -1, bool sum_terms = true) | |
5164 | 84 : MSparse<Complex> (a, r, c, nr, nc, sum_terms) { } |
85 | |
86 explicit SparseComplexMatrix (const Array<Complex> a, | |
87 const Array<double>& r, | |
5275 | 88 const Array<double>& c, octave_idx_type nr = -1, |
89 octave_idx_type nc = -1, bool sum_terms = true) | |
5164 | 90 : MSparse<Complex> (a, r, c, nr, nc, sum_terms) { } |
91 | |
92 explicit SparseComplexMatrix (const SparseMatrix& a); | |
93 | |
94 explicit SparseComplexMatrix (const SparseBoolMatrix& a); | |
95 | |
8366
8b1a2555c4e2
implement diagonal matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents:
8335
diff
changeset
|
96 explicit SparseComplexMatrix (const ComplexDiagMatrix& a); |
8b1a2555c4e2
implement diagonal matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents:
8335
diff
changeset
|
97 |
5275 | 98 SparseComplexMatrix (octave_idx_type r, octave_idx_type c, octave_idx_type num_nz) |
5164 | 99 : MSparse<Complex> (r, c, num_nz) { } |
100 | |
101 SparseComplexMatrix& operator = (const SparseComplexMatrix& a) | |
102 { | |
103 MSparse<Complex>::operator = (a); | |
104 return *this; | |
105 } | |
106 | |
107 bool operator == (const SparseComplexMatrix& a) const; | |
108 bool operator != (const SparseComplexMatrix& a) const; | |
109 | |
110 bool is_hermitian (void) const; | |
111 | |
112 SparseComplexMatrix max (int dim = 0) const; | |
5275 | 113 SparseComplexMatrix max (Array2<octave_idx_type>& index, int dim = 0) const; |
5164 | 114 SparseComplexMatrix min (int dim = 0) const; |
5275 | 115 SparseComplexMatrix min (Array2<octave_idx_type>& index, int dim = 0) const; |
5164 | 116 |
5275 | 117 SparseComplexMatrix& insert (const SparseComplexMatrix& a, octave_idx_type r, octave_idx_type c); |
118 SparseComplexMatrix& insert (const SparseMatrix& a, octave_idx_type r, octave_idx_type c); | |
6823 | 119 SparseComplexMatrix& insert (const SparseComplexMatrix& a, const Array<octave_idx_type>& indx); |
120 SparseComplexMatrix& insert (const SparseMatrix& a, const Array<octave_idx_type>& indx); | |
5164 | 121 |
122 SparseComplexMatrix concat (const SparseComplexMatrix& rb, | |
5275 | 123 const Array<octave_idx_type>& ra_idx); |
5164 | 124 SparseComplexMatrix concat (const SparseMatrix& rb, |
5275 | 125 const Array<octave_idx_type>& ra_idx); |
5164 | 126 |
127 ComplexMatrix matrix_value (void) const; | |
128 | |
129 SparseComplexMatrix hermitian (void) const; // complex conjugate transpose | |
130 SparseComplexMatrix transpose (void) const | |
131 { return MSparse<Complex>::transpose (); } | |
132 | |
133 friend SparseComplexMatrix conj (const SparseComplexMatrix& a); | |
134 | |
8303
b11c31849b44
improve norm computation capabilities
Jaroslav Hajek <highegg@gmail.com>
parents:
7922
diff
changeset
|
135 // extract row or column i. |
b11c31849b44
improve norm computation capabilities
Jaroslav Hajek <highegg@gmail.com>
parents:
7922
diff
changeset
|
136 |
b11c31849b44
improve norm computation capabilities
Jaroslav Hajek <highegg@gmail.com>
parents:
7922
diff
changeset
|
137 ComplexRowVector row (octave_idx_type i) const; |
b11c31849b44
improve norm computation capabilities
Jaroslav Hajek <highegg@gmail.com>
parents:
7922
diff
changeset
|
138 |
b11c31849b44
improve norm computation capabilities
Jaroslav Hajek <highegg@gmail.com>
parents:
7922
diff
changeset
|
139 ComplexColumnVector column (octave_idx_type i) const; |
b11c31849b44
improve norm computation capabilities
Jaroslav Hajek <highegg@gmail.com>
parents:
7922
diff
changeset
|
140 |
5506 | 141 private: |
5785 | 142 SparseComplexMatrix dinverse (MatrixType &mattyp, octave_idx_type& info, |
5506 | 143 double& rcond, const bool force = false, |
144 const bool calccond = true) const; | |
145 | |
5785 | 146 SparseComplexMatrix tinverse (MatrixType &mattyp, octave_idx_type& info, |
5506 | 147 double& rcond, const bool force = false, |
148 const bool calccond = true) const; | |
149 | |
150 public: | |
5164 | 151 SparseComplexMatrix inverse (void) const; |
5785 | 152 SparseComplexMatrix inverse (MatrixType& mattype) const; |
153 SparseComplexMatrix inverse (MatrixType& mattype, | |
5506 | 154 octave_idx_type& info) const; |
5785 | 155 SparseComplexMatrix inverse (MatrixType& mattype, octave_idx_type& info, |
5506 | 156 double& rcond, int force = 0, |
5164 | 157 int calc_cond = 1) const; |
158 | |
159 ComplexDET determinant (void) const; | |
5275 | 160 ComplexDET determinant (octave_idx_type& info) const; |
161 ComplexDET determinant (octave_idx_type& info, double& rcond, | |
5164 | 162 int calc_cond = 1) const; |
163 | |
164 private: | |
165 // Diagonal matrix solvers | |
5785 | 166 ComplexMatrix dsolve (MatrixType &typ, const Matrix& b, octave_idx_type& info, |
5681 | 167 double& rcond, solve_singularity_handler sing_handler, |
168 bool calc_cond = false) const; | |
5164 | 169 |
5785 | 170 ComplexMatrix dsolve (MatrixType &typ, const ComplexMatrix& b, |
5681 | 171 octave_idx_type& info, double& rcond, |
172 solve_singularity_handler sing_handler, | |
173 bool calc_cond = false) const; | |
5164 | 174 |
5785 | 175 SparseComplexMatrix dsolve (MatrixType &typ, const SparseMatrix& b, |
5681 | 176 octave_idx_type& info, double& rcond, |
177 solve_singularity_handler sing_handler, | |
178 bool calc_cond = false) const; | |
5164 | 179 |
5785 | 180 SparseComplexMatrix dsolve (MatrixType &typ, const SparseComplexMatrix& b, |
5275 | 181 octave_idx_type& info, double& rcond, |
5681 | 182 solve_singularity_handler sing_handler, |
183 bool calc_cond = false) const; | |
5164 | 184 |
185 // Upper triangular matrix solvers | |
5785 | 186 ComplexMatrix utsolve (MatrixType &typ, const Matrix& b, octave_idx_type& info, |
5681 | 187 double& rcond, solve_singularity_handler sing_handler, |
188 bool calc_cond = false) const; | |
5164 | 189 |
5785 | 190 ComplexMatrix utsolve (MatrixType &typ, const ComplexMatrix& b, |
5681 | 191 octave_idx_type& info, double& rcond, |
192 solve_singularity_handler sing_handler, | |
193 bool calc_cond = false) const; | |
5164 | 194 |
5785 | 195 SparseComplexMatrix utsolve (MatrixType &typ, const SparseMatrix& b, |
5681 | 196 octave_idx_type& info, double& rcond, |
197 solve_singularity_handler sing_handler, | |
198 bool calc_cond = false) const; | |
5164 | 199 |
5785 | 200 SparseComplexMatrix utsolve (MatrixType &typ, const SparseComplexMatrix& b, |
5275 | 201 octave_idx_type& info, double& rcond, |
5681 | 202 solve_singularity_handler sing_handler, |
203 bool calc_cond = false) const; | |
5164 | 204 |
205 // Lower triangular matrix solvers | |
5785 | 206 ComplexMatrix ltsolve (MatrixType &typ, const Matrix& b, |
5681 | 207 octave_idx_type& info, double& rcond, |
208 solve_singularity_handler sing_handler, | |
209 bool calc_cond = false) const; | |
5164 | 210 |
5785 | 211 ComplexMatrix ltsolve (MatrixType &typ, const ComplexMatrix& b, |
5681 | 212 octave_idx_type& info, double& rcond, |
213 solve_singularity_handler sing_handler, | |
214 bool calc_cond = false) const; | |
5164 | 215 |
5785 | 216 SparseComplexMatrix ltsolve (MatrixType &typ, const SparseMatrix& b, |
5681 | 217 octave_idx_type& info, double& rcond, |
218 solve_singularity_handler sing_handler, | |
219 bool calc_cond = false) const; | |
5164 | 220 |
5785 | 221 SparseComplexMatrix ltsolve (MatrixType &typ, const SparseComplexMatrix& b, |
5275 | 222 octave_idx_type& info, double& rcond, |
5681 | 223 solve_singularity_handler sing_handler, |
224 bool calc_cond = false) const; | |
5164 | 225 |
226 // Tridiagonal matrix solvers | |
5785 | 227 ComplexMatrix trisolve (MatrixType &typ, const Matrix& b, |
5681 | 228 octave_idx_type& info, double& rcond, |
229 solve_singularity_handler sing_handler, | |
230 bool calc_cond = false) const; | |
5164 | 231 |
5785 | 232 ComplexMatrix trisolve (MatrixType &typ, const ComplexMatrix& b, |
5681 | 233 octave_idx_type& info, double& rcond, |
234 solve_singularity_handler sing_handler, | |
235 bool calc_cond = false) const; | |
5164 | 236 |
5785 | 237 SparseComplexMatrix trisolve (MatrixType &typ, const SparseMatrix& b, |
5681 | 238 octave_idx_type& info, double& rcond, |
239 solve_singularity_handler sing_handler, | |
240 bool calc_cond = false) const; | |
5164 | 241 |
5785 | 242 SparseComplexMatrix trisolve (MatrixType &typ, const SparseComplexMatrix& b, |
5275 | 243 octave_idx_type& info, double& rcond, |
5681 | 244 solve_singularity_handler sing_handler, |
245 bool calc_cond = false) const; | |
5164 | 246 |
247 // Banded matrix solvers (umfpack/cholesky) | |
5785 | 248 ComplexMatrix bsolve (MatrixType &typ, const Matrix& b, octave_idx_type& info, |
5681 | 249 double& rcond, solve_singularity_handler sing_handler, |
250 bool calc_cond = false) const; | |
5164 | 251 |
5785 | 252 ComplexMatrix bsolve (MatrixType &typ, const ComplexMatrix& b, |
5681 | 253 octave_idx_type& info, double& rcond, |
254 solve_singularity_handler sing_handler, | |
255 bool calc_cond = false) const; | |
5164 | 256 |
5785 | 257 SparseComplexMatrix bsolve (MatrixType &typ, const SparseMatrix& b, |
5681 | 258 octave_idx_type& info, double& rcond, |
259 solve_singularity_handler sing_handler, | |
260 bool calc_cond = false) const; | |
5164 | 261 |
5785 | 262 SparseComplexMatrix bsolve (MatrixType &typ, const SparseComplexMatrix& b, |
5275 | 263 octave_idx_type& info, double& rcond, |
5681 | 264 solve_singularity_handler sing_handler, |
265 bool calc_cond = false) const; | |
5164 | 266 |
267 // Full matrix solvers (umfpack/cholesky) | |
5681 | 268 void * factorize (octave_idx_type& err, double &rcond, Matrix &Control, |
269 Matrix &Info, solve_singularity_handler sing_handler, | |
270 bool calc_cond) const; | |
5164 | 271 |
5785 | 272 ComplexMatrix fsolve (MatrixType &typ, const Matrix& b, octave_idx_type& info, |
5681 | 273 double& rcond, solve_singularity_handler sing_handler, |
274 bool calc_cond = false) const; | |
5164 | 275 |
5785 | 276 ComplexMatrix fsolve (MatrixType &typ, const ComplexMatrix& b, |
5681 | 277 octave_idx_type& info, double& rcond, |
278 solve_singularity_handler sing_handler, | |
279 bool calc_cond = false) const; | |
5164 | 280 |
5785 | 281 SparseComplexMatrix fsolve (MatrixType &typ, const SparseMatrix& b, |
5681 | 282 octave_idx_type& info, double& rcond, |
283 solve_singularity_handler sing_handler, | |
284 bool calc_cond = false) const; | |
5164 | 285 |
5785 | 286 SparseComplexMatrix fsolve (MatrixType &typ, const SparseComplexMatrix& b, |
5275 | 287 octave_idx_type& info, double& rcond, |
5681 | 288 solve_singularity_handler sing_handler, |
289 bool calc_cond = false) const; | |
5164 | 290 |
291 public: | |
292 // Generic interface to solver with no probing of type | |
5785 | 293 ComplexMatrix solve (MatrixType &typ, const Matrix& b) const; |
294 ComplexMatrix solve (MatrixType &typ, const Matrix& b, | |
5697 | 295 octave_idx_type& info) const; |
5785 | 296 ComplexMatrix solve (MatrixType &typ, const Matrix& b, octave_idx_type& info, |
5697 | 297 double& rcond) const; |
5785 | 298 ComplexMatrix solve (MatrixType &typ, const Matrix& b, octave_idx_type& info, |
5697 | 299 double& rcond, solve_singularity_handler sing_handler, |
300 bool singular_fallback = true) const; | |
5164 | 301 |
5785 | 302 ComplexMatrix solve (MatrixType &typ, const ComplexMatrix& b) const; |
303 ComplexMatrix solve (MatrixType &typ, const ComplexMatrix& b, | |
5275 | 304 octave_idx_type& info) const; |
5785 | 305 ComplexMatrix solve (MatrixType &typ, const ComplexMatrix& b, |
5697 | 306 octave_idx_type& info, double& rcond) const; |
5785 | 307 ComplexMatrix solve (MatrixType &typ, const ComplexMatrix& b, |
5697 | 308 octave_idx_type& info, double& rcond, |
309 solve_singularity_handler sing_handler, | |
310 bool singular_fallback = true) const; | |
5164 | 311 |
5785 | 312 SparseComplexMatrix solve (MatrixType &typ, const SparseMatrix& b) const; |
313 SparseComplexMatrix solve (MatrixType &typ, const SparseMatrix& b, | |
5697 | 314 octave_idx_type& info) const; |
5785 | 315 SparseComplexMatrix solve (MatrixType &typ, const SparseMatrix& b, |
5697 | 316 octave_idx_type& info, double& rcond) const; |
5785 | 317 SparseComplexMatrix solve (MatrixType &typ, const SparseMatrix& b, |
5697 | 318 octave_idx_type& info, double& rcond, |
319 solve_singularity_handler sing_handler, | |
320 bool singular_fallback = true) const; | |
5164 | 321 |
5785 | 322 SparseComplexMatrix solve (MatrixType &typ, |
5164 | 323 const SparseComplexMatrix& b) const; |
5785 | 324 SparseComplexMatrix solve (MatrixType &typ, const SparseComplexMatrix& b, |
5275 | 325 octave_idx_type& info) const; |
5785 | 326 SparseComplexMatrix solve (MatrixType &typ, const SparseComplexMatrix& b, |
5275 | 327 octave_idx_type& info, double& rcond) const; |
5785 | 328 SparseComplexMatrix solve (MatrixType &typ, const SparseComplexMatrix& b, |
5697 | 329 octave_idx_type& info, double& rcond, |
330 solve_singularity_handler sing_handler, | |
331 bool singular_fallback = true) const; | |
5164 | 332 |
5785 | 333 ComplexColumnVector solve (MatrixType &typ, const ColumnVector& b) const; |
334 ComplexColumnVector solve (MatrixType &typ, const ColumnVector& b, | |
5697 | 335 octave_idx_type& info) const; |
5785 | 336 ComplexColumnVector solve (MatrixType &typ, const ColumnVector& b, |
5697 | 337 octave_idx_type& info, double& rcond) const; |
5785 | 338 ComplexColumnVector solve (MatrixType &typ, const ColumnVector& b, |
5697 | 339 octave_idx_type& info, double& rcond, |
340 solve_singularity_handler sing_handler) const; | |
5164 | 341 |
5785 | 342 ComplexColumnVector solve (MatrixType &typ, |
5164 | 343 const ComplexColumnVector& b) const; |
5785 | 344 ComplexColumnVector solve (MatrixType &typ, const ComplexColumnVector& b, |
5697 | 345 octave_idx_type& info) const; |
5785 | 346 ComplexColumnVector solve (MatrixType &typ, const ComplexColumnVector& b, |
5275 | 347 octave_idx_type& info, double& rcond) const; |
5785 | 348 ComplexColumnVector solve (MatrixType &typ, const ComplexColumnVector& b, |
5275 | 349 octave_idx_type& info, double& rcond, |
5164 | 350 solve_singularity_handler sing_handler) const; |
351 | |
352 // Generic interface to solver with probing of type | |
353 ComplexMatrix solve (const Matrix& b) const; | |
5275 | 354 ComplexMatrix solve (const Matrix& b, octave_idx_type& info) const; |
5697 | 355 ComplexMatrix solve (const Matrix& b, octave_idx_type& info, |
356 double& rcond) const; | |
5275 | 357 ComplexMatrix solve (const Matrix& b, octave_idx_type& info, double& rcond, |
5164 | 358 solve_singularity_handler sing_handler) const; |
359 | |
360 ComplexMatrix solve (const ComplexMatrix& b) const; | |
5275 | 361 ComplexMatrix solve (const ComplexMatrix& b, octave_idx_type& info) const; |
362 ComplexMatrix solve (const ComplexMatrix& b, octave_idx_type& info, | |
5164 | 363 double& rcond) const; |
5697 | 364 ComplexMatrix solve (const ComplexMatrix& b, octave_idx_type& info, |
365 double& rcond, solve_singularity_handler sing_handler) const; | |
5164 | 366 |
367 SparseComplexMatrix solve (const SparseMatrix& b) const; | |
5275 | 368 SparseComplexMatrix solve (const SparseMatrix& b, octave_idx_type& info) const; |
369 SparseComplexMatrix solve (const SparseMatrix& b, octave_idx_type& info, | |
5164 | 370 double& rcond) const; |
5275 | 371 SparseComplexMatrix solve (const SparseMatrix& b, octave_idx_type& info, |
5164 | 372 double& rcond, |
5697 | 373 solve_singularity_handler sing_handler) const; |
5164 | 374 |
375 SparseComplexMatrix solve (const SparseComplexMatrix& b) const; | |
5697 | 376 SparseComplexMatrix solve (const SparseComplexMatrix& b, |
377 octave_idx_type& info) const; | |
378 SparseComplexMatrix solve (const SparseComplexMatrix& b, | |
379 octave_idx_type& info, double& rcond) const; | |
380 SparseComplexMatrix solve (const SparseComplexMatrix& b, | |
381 octave_idx_type& info, double& rcond, | |
5164 | 382 solve_singularity_handler sing_handler) const; |
383 | |
384 ComplexColumnVector solve (const ColumnVector& b) const; | |
5275 | 385 ComplexColumnVector solve (const ColumnVector& b, octave_idx_type& info) const; |
386 ComplexColumnVector solve (const ColumnVector& b, octave_idx_type& info, | |
5164 | 387 double& rcond) const; |
5697 | 388 ComplexColumnVector solve (const ColumnVector& b, octave_idx_type& info, |
389 double& rcond, | |
5164 | 390 solve_singularity_handler sing_handler) const; |
391 | |
392 ComplexColumnVector solve (const ComplexColumnVector& b) const; | |
5697 | 393 ComplexColumnVector solve (const ComplexColumnVector& b, |
394 octave_idx_type& info) const; | |
5275 | 395 ComplexColumnVector solve (const ComplexColumnVector& b, octave_idx_type& info, |
5164 | 396 double& rcond) const; |
5275 | 397 ComplexColumnVector solve (const ComplexColumnVector& b, octave_idx_type& info, |
5164 | 398 double& rcond, |
399 solve_singularity_handler sing_handler) const; | |
400 | |
401 SparseComplexMatrix squeeze (void) const; | |
402 | |
403 SparseComplexMatrix index (idx_vector& i, int resize_ok) const; | |
404 | |
405 SparseComplexMatrix index (idx_vector& i, idx_vector& j, int resize_ok) const; | |
406 | |
407 SparseComplexMatrix index (Array<idx_vector>& ra_idx, int resize_ok) const; | |
408 | |
409 SparseComplexMatrix reshape (const dim_vector& new_dims) const; | |
410 | |
5697 | 411 SparseComplexMatrix permute (const Array<octave_idx_type>& vec, |
412 bool inv = false) const; | |
5164 | 413 |
5275 | 414 SparseComplexMatrix ipermute (const Array<octave_idx_type>& vec) const; |
5164 | 415 |
7922
935be827eaf8
error for NaN values in & and | expressions
John W. Eaton <jwe@octave.org>
parents:
7802
diff
changeset
|
416 bool any_element_is_nan (void) const; |
5164 | 417 bool any_element_is_inf_or_nan (void) const; |
418 bool all_elements_are_real (void) const; | |
419 bool all_integers (double& max_val, double& min_val) const; | |
420 bool too_large_for_float (void) const; | |
421 | |
422 SparseBoolMatrix operator ! (void) const; | |
423 | |
424 SparseBoolMatrix all (int dim = -1) const; | |
425 SparseBoolMatrix any (int dim = -1) const; | |
426 | |
427 SparseComplexMatrix cumprod (int dim = -1) const; | |
428 SparseComplexMatrix cumsum (int dim = -1) const; | |
429 SparseComplexMatrix prod (int dim = -1) const; | |
430 SparseComplexMatrix sum (int dim = -1) const; | |
431 SparseComplexMatrix sumsq (int dim = -1) const; | |
432 SparseMatrix abs (void) const; | |
433 | |
5275 | 434 SparseComplexMatrix diag (octave_idx_type k = 0) const; |
5164 | 435 |
436 // i/o | |
6108 | 437 friend OCTAVE_API std::ostream& operator << (std::ostream& os, |
5164 | 438 const SparseComplexMatrix& a); |
6108 | 439 friend OCTAVE_API std::istream& operator >> (std::istream& is, |
5164 | 440 SparseComplexMatrix& a); |
7503
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
441 |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
442 typedef double (*dmapper) (const Complex&); |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
443 typedef Complex (*cmapper) (const Complex&); |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
444 typedef bool (*bmapper) (const Complex&); |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
445 SparseMatrix map (dmapper fcn) const; |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
446 SparseComplexMatrix map (cmapper fcn) const; |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
447 SparseBoolMatrix map (bmapper fcn) const; |
5164 | 448 }; |
449 | |
6108 | 450 extern OCTAVE_API SparseComplexMatrix operator * (const SparseMatrix&, |
5164 | 451 const SparseComplexMatrix&); |
6108 | 452 extern OCTAVE_API SparseComplexMatrix operator * (const SparseComplexMatrix&, |
5164 | 453 const SparseMatrix&); |
6108 | 454 extern OCTAVE_API SparseComplexMatrix operator * (const SparseComplexMatrix&, |
5164 | 455 const SparseComplexMatrix&); |
456 | |
6108 | 457 extern OCTAVE_API ComplexMatrix operator * (const Matrix&, |
5429 | 458 const SparseComplexMatrix&); |
6108 | 459 extern OCTAVE_API ComplexMatrix operator * (const ComplexMatrix&, |
5429 | 460 const SparseMatrix&); |
6108 | 461 extern OCTAVE_API ComplexMatrix operator * (const ComplexMatrix&, |
5429 | 462 const SparseComplexMatrix&); |
7802
1a446f28ce68
implement optimized sparse-dense transposed multiplication
Jaroslav Hajek <highegg@gmail.com>
parents:
7503
diff
changeset
|
463 extern OCTAVE_API ComplexMatrix mul_trans (const ComplexMatrix&, |
1a446f28ce68
implement optimized sparse-dense transposed multiplication
Jaroslav Hajek <highegg@gmail.com>
parents:
7503
diff
changeset
|
464 const SparseComplexMatrix&); |
1a446f28ce68
implement optimized sparse-dense transposed multiplication
Jaroslav Hajek <highegg@gmail.com>
parents:
7503
diff
changeset
|
465 extern OCTAVE_API ComplexMatrix mul_herm (const ComplexMatrix&, |
1a446f28ce68
implement optimized sparse-dense transposed multiplication
Jaroslav Hajek <highegg@gmail.com>
parents:
7503
diff
changeset
|
466 const SparseComplexMatrix&); |
5429 | 467 |
6108 | 468 extern OCTAVE_API ComplexMatrix operator * (const SparseMatrix&, |
5429 | 469 const ComplexMatrix&); |
6108 | 470 extern OCTAVE_API ComplexMatrix operator * (const SparseComplexMatrix&, |
5429 | 471 const Matrix&); |
6108 | 472 extern OCTAVE_API ComplexMatrix operator * (const SparseComplexMatrix&, |
5429 | 473 const ComplexMatrix&); |
7802
1a446f28ce68
implement optimized sparse-dense transposed multiplication
Jaroslav Hajek <highegg@gmail.com>
parents:
7503
diff
changeset
|
474 extern OCTAVE_API ComplexMatrix trans_mul (const SparseComplexMatrix&, |
1a446f28ce68
implement optimized sparse-dense transposed multiplication
Jaroslav Hajek <highegg@gmail.com>
parents:
7503
diff
changeset
|
475 const ComplexMatrix&); |
1a446f28ce68
implement optimized sparse-dense transposed multiplication
Jaroslav Hajek <highegg@gmail.com>
parents:
7503
diff
changeset
|
476 extern OCTAVE_API ComplexMatrix herm_mul (const SparseComplexMatrix&, |
1a446f28ce68
implement optimized sparse-dense transposed multiplication
Jaroslav Hajek <highegg@gmail.com>
parents:
7503
diff
changeset
|
477 const ComplexMatrix&); |
5429 | 478 |
8964
f4f4d65faaa0
Implement sparse * diagonal and diagonal * sparse operations, double-prec only.
Jason Riedy <jason@acm.org>
parents:
8920
diff
changeset
|
479 extern OCTAVE_API SparseComplexMatrix operator * (const DiagMatrix&, const SparseComplexMatrix&); |
f4f4d65faaa0
Implement sparse * diagonal and diagonal * sparse operations, double-prec only.
Jason Riedy <jason@acm.org>
parents:
8920
diff
changeset
|
480 extern OCTAVE_API SparseComplexMatrix operator * (const SparseComplexMatrix&, const DiagMatrix&); |
f4f4d65faaa0
Implement sparse * diagonal and diagonal * sparse operations, double-prec only.
Jason Riedy <jason@acm.org>
parents:
8920
diff
changeset
|
481 |
f4f4d65faaa0
Implement sparse * diagonal and diagonal * sparse operations, double-prec only.
Jason Riedy <jason@acm.org>
parents:
8920
diff
changeset
|
482 extern OCTAVE_API SparseComplexMatrix operator * (const ComplexDiagMatrix&, const SparseMatrix&); |
f4f4d65faaa0
Implement sparse * diagonal and diagonal * sparse operations, double-prec only.
Jason Riedy <jason@acm.org>
parents:
8920
diff
changeset
|
483 extern OCTAVE_API SparseComplexMatrix operator * (const SparseMatrix&, const ComplexDiagMatrix&); |
f4f4d65faaa0
Implement sparse * diagonal and diagonal * sparse operations, double-prec only.
Jason Riedy <jason@acm.org>
parents:
8920
diff
changeset
|
484 |
f4f4d65faaa0
Implement sparse * diagonal and diagonal * sparse operations, double-prec only.
Jason Riedy <jason@acm.org>
parents:
8920
diff
changeset
|
485 extern OCTAVE_API SparseComplexMatrix operator * (const ComplexDiagMatrix&, const SparseComplexMatrix&); |
f4f4d65faaa0
Implement sparse * diagonal and diagonal * sparse operations, double-prec only.
Jason Riedy <jason@acm.org>
parents:
8920
diff
changeset
|
486 extern OCTAVE_API SparseComplexMatrix operator * (const SparseComplexMatrix&, const ComplexDiagMatrix&); |
f4f4d65faaa0
Implement sparse * diagonal and diagonal * sparse operations, double-prec only.
Jason Riedy <jason@acm.org>
parents:
8920
diff
changeset
|
487 |
8966
1bba53c0a38d
Implement diag + sparse, diag - sparse, sparse + diag, sparse - diag.
Jason Riedy <jason@acm.org>
parents:
8964
diff
changeset
|
488 extern OCTAVE_API SparseComplexMatrix operator + (const ComplexDiagMatrix&, const SparseMatrix&); |
1bba53c0a38d
Implement diag + sparse, diag - sparse, sparse + diag, sparse - diag.
Jason Riedy <jason@acm.org>
parents:
8964
diff
changeset
|
489 extern OCTAVE_API SparseComplexMatrix operator + (const DiagMatrix&, const SparseComplexMatrix&); |
1bba53c0a38d
Implement diag + sparse, diag - sparse, sparse + diag, sparse - diag.
Jason Riedy <jason@acm.org>
parents:
8964
diff
changeset
|
490 extern OCTAVE_API SparseComplexMatrix operator + (const ComplexDiagMatrix&, const SparseComplexMatrix&); |
1bba53c0a38d
Implement diag + sparse, diag - sparse, sparse + diag, sparse - diag.
Jason Riedy <jason@acm.org>
parents:
8964
diff
changeset
|
491 extern OCTAVE_API SparseComplexMatrix operator + (const SparseMatrix&, const ComplexDiagMatrix&); |
1bba53c0a38d
Implement diag + sparse, diag - sparse, sparse + diag, sparse - diag.
Jason Riedy <jason@acm.org>
parents:
8964
diff
changeset
|
492 extern OCTAVE_API SparseComplexMatrix operator + (const SparseComplexMatrix&, const DiagMatrix&); |
1bba53c0a38d
Implement diag + sparse, diag - sparse, sparse + diag, sparse - diag.
Jason Riedy <jason@acm.org>
parents:
8964
diff
changeset
|
493 extern OCTAVE_API SparseComplexMatrix operator + (const SparseComplexMatrix&, const ComplexDiagMatrix&); |
1bba53c0a38d
Implement diag + sparse, diag - sparse, sparse + diag, sparse - diag.
Jason Riedy <jason@acm.org>
parents:
8964
diff
changeset
|
494 |
1bba53c0a38d
Implement diag + sparse, diag - sparse, sparse + diag, sparse - diag.
Jason Riedy <jason@acm.org>
parents:
8964
diff
changeset
|
495 extern OCTAVE_API SparseComplexMatrix operator - (const ComplexDiagMatrix&, const SparseMatrix&); |
1bba53c0a38d
Implement diag + sparse, diag - sparse, sparse + diag, sparse - diag.
Jason Riedy <jason@acm.org>
parents:
8964
diff
changeset
|
496 extern OCTAVE_API SparseComplexMatrix operator - (const DiagMatrix&, const SparseComplexMatrix&); |
1bba53c0a38d
Implement diag + sparse, diag - sparse, sparse + diag, sparse - diag.
Jason Riedy <jason@acm.org>
parents:
8964
diff
changeset
|
497 extern OCTAVE_API SparseComplexMatrix operator - (const ComplexDiagMatrix&, const SparseComplexMatrix&); |
1bba53c0a38d
Implement diag + sparse, diag - sparse, sparse + diag, sparse - diag.
Jason Riedy <jason@acm.org>
parents:
8964
diff
changeset
|
498 extern OCTAVE_API SparseComplexMatrix operator - (const SparseMatrix&, const ComplexDiagMatrix&); |
1bba53c0a38d
Implement diag + sparse, diag - sparse, sparse + diag, sparse - diag.
Jason Riedy <jason@acm.org>
parents:
8964
diff
changeset
|
499 extern OCTAVE_API SparseComplexMatrix operator - (const SparseComplexMatrix&, const DiagMatrix&); |
1bba53c0a38d
Implement diag + sparse, diag - sparse, sparse + diag, sparse - diag.
Jason Riedy <jason@acm.org>
parents:
8964
diff
changeset
|
500 extern OCTAVE_API SparseComplexMatrix operator - (const SparseComplexMatrix&, const ComplexDiagMatrix&); |
1bba53c0a38d
Implement diag + sparse, diag - sparse, sparse + diag, sparse - diag.
Jason Riedy <jason@acm.org>
parents:
8964
diff
changeset
|
501 |
8968
91d53dc37f79
Add perm * sparse, perm \ sparse, sparse * perm, and sparse / perm operations.
Jason Riedy <jason@acm.org>
parents:
8966
diff
changeset
|
502 extern OCTAVE_API SparseComplexMatrix operator * (const PermMatrix&, |
91d53dc37f79
Add perm * sparse, perm \ sparse, sparse * perm, and sparse / perm operations.
Jason Riedy <jason@acm.org>
parents:
8966
diff
changeset
|
503 const SparseComplexMatrix&); |
91d53dc37f79
Add perm * sparse, perm \ sparse, sparse * perm, and sparse / perm operations.
Jason Riedy <jason@acm.org>
parents:
8966
diff
changeset
|
504 extern OCTAVE_API SparseComplexMatrix operator * (const SparseComplexMatrix&, |
91d53dc37f79
Add perm * sparse, perm \ sparse, sparse * perm, and sparse / perm operations.
Jason Riedy <jason@acm.org>
parents:
8966
diff
changeset
|
505 const PermMatrix&); |
91d53dc37f79
Add perm * sparse, perm \ sparse, sparse * perm, and sparse / perm operations.
Jason Riedy <jason@acm.org>
parents:
8966
diff
changeset
|
506 |
6108 | 507 extern OCTAVE_API SparseComplexMatrix min (const Complex& c, |
5164 | 508 const SparseComplexMatrix& m); |
6108 | 509 extern OCTAVE_API SparseComplexMatrix min (const SparseComplexMatrix& m, |
5164 | 510 const Complex& c); |
6108 | 511 extern OCTAVE_API SparseComplexMatrix min (const SparseComplexMatrix& a, |
5164 | 512 const SparseComplexMatrix& b); |
513 | |
6108 | 514 extern OCTAVE_API SparseComplexMatrix max (const Complex& c, |
5164 | 515 const SparseComplexMatrix& m); |
6108 | 516 extern OCTAVE_API SparseComplexMatrix max (const SparseComplexMatrix& m, |
5164 | 517 const Complex& c); |
6108 | 518 extern OCTAVE_API SparseComplexMatrix max (const SparseComplexMatrix& a, |
5164 | 519 const SparseComplexMatrix& b); |
520 | |
6708 | 521 SPARSE_SMS_CMP_OP_DECLS (SparseComplexMatrix, Complex, OCTAVE_API) |
522 SPARSE_SMS_BOOL_OP_DECLS (SparseComplexMatrix, Complex, OCTAVE_API) | |
5164 | 523 |
6708 | 524 SPARSE_SSM_CMP_OP_DECLS (Complex, SparseComplexMatrix, OCTAVE_API) |
525 SPARSE_SSM_BOOL_OP_DECLS (Complex, SparseComplexMatrix, OCTAVE_API) | |
5164 | 526 |
6708 | 527 SPARSE_SMSM_CMP_OP_DECLS (SparseComplexMatrix, SparseComplexMatrix, OCTAVE_API) |
528 SPARSE_SMSM_BOOL_OP_DECLS (SparseComplexMatrix, SparseComplexMatrix, OCTAVE_API) | |
5164 | 529 |
530 SPARSE_FORWARD_DEFS (MSparse, SparseComplexMatrix, ComplexMatrix, Complex) | |
531 | |
5351 | 532 #ifdef IDX_TYPE_LONG |
5322 | 533 #define UMFPACK_ZNAME(name) umfpack_zl_ ## name |
534 #else | |
535 #define UMFPACK_ZNAME(name) umfpack_zi_ ## name | |
536 #endif | |
537 | |
5164 | 538 #endif |
539 | |
540 /* | |
541 ;;; Local Variables: *** | |
542 ;;; mode: C++ *** | |
543 ;;; End: *** | |
544 */ |