comparison liboctave/CSparse.h @ 8964:f4f4d65faaa0

Implement sparse * diagonal and diagonal * sparse operations, double-prec only. Date: Sun, 8 Mar 2009 16:28:18 -0400 These preserve sparsity, so eye(5) * sprand (5, 5, .2) is *sparse* and not dense. This may affect people who use multiplication by eye() rather than full(). The liboctave routines do *not* check if arguments are scalars in disguise. There is a type problem with checking at that level. I suspect we want diag * "sparse scalar" to stay diagonal, but we have to return a sparse matrix at the liboctave. Rather than worrying about that in liboctave, we cope with it when binding to Octave and return the correct higher-level type. The implementation is in Sparse-diag-op-defs.h rather than Sparse-op-defs.h to limit recompilation. And the implementations are templates rather than macros to produce better compiler errors and debugging information.
author Jason Riedy <jason@acm.org>
date Mon, 09 Mar 2009 17:49:13 -0400
parents eb63fbe60fab
children 1bba53c0a38d
comparison
equal deleted inserted replaced
8963:d1eab3ddb02d 8964:f4f4d65faaa0
35 #include "MSparse.h" 35 #include "MSparse.h"
36 #include "MSparse-defs.h" 36 #include "MSparse-defs.h"
37 #include "Sparse-op-defs.h" 37 #include "Sparse-op-defs.h"
38 #include "MatrixType.h" 38 #include "MatrixType.h"
39 39
40 class DiagMatrix;
41 class ComplexDiagMatrix;
40 class SparseMatrix; 42 class SparseMatrix;
41 class SparseBoolMatrix; 43 class SparseBoolMatrix;
42 44
43 class 45 class
44 OCTAVE_API 46 OCTAVE_API
471 extern OCTAVE_API ComplexMatrix trans_mul (const SparseComplexMatrix&, 473 extern OCTAVE_API ComplexMatrix trans_mul (const SparseComplexMatrix&,
472 const ComplexMatrix&); 474 const ComplexMatrix&);
473 extern OCTAVE_API ComplexMatrix herm_mul (const SparseComplexMatrix&, 475 extern OCTAVE_API ComplexMatrix herm_mul (const SparseComplexMatrix&,
474 const ComplexMatrix&); 476 const ComplexMatrix&);
475 477
478 extern OCTAVE_API SparseComplexMatrix operator * (const DiagMatrix&, const SparseComplexMatrix&);
479 extern OCTAVE_API SparseComplexMatrix operator * (const SparseComplexMatrix&, const DiagMatrix&);
480
481 extern OCTAVE_API SparseComplexMatrix operator * (const ComplexDiagMatrix&, const SparseMatrix&);
482 extern OCTAVE_API SparseComplexMatrix operator * (const SparseMatrix&, const ComplexDiagMatrix&);
483
484 extern OCTAVE_API SparseComplexMatrix operator * (const ComplexDiagMatrix&, const SparseComplexMatrix&);
485 extern OCTAVE_API SparseComplexMatrix operator * (const SparseComplexMatrix&, const ComplexDiagMatrix&);
486
476 extern OCTAVE_API SparseComplexMatrix min (const Complex& c, 487 extern OCTAVE_API SparseComplexMatrix min (const Complex& c,
477 const SparseComplexMatrix& m); 488 const SparseComplexMatrix& m);
478 extern OCTAVE_API SparseComplexMatrix min (const SparseComplexMatrix& m, 489 extern OCTAVE_API SparseComplexMatrix min (const SparseComplexMatrix& m,
479 const Complex& c); 490 const Complex& c);
480 extern OCTAVE_API SparseComplexMatrix min (const SparseComplexMatrix& a, 491 extern OCTAVE_API SparseComplexMatrix min (const SparseComplexMatrix& a,