home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / octave-1.1.1p1-bin.lha / include / octave / CDiagMatrix.h < prev    next >
C/C++ Source or Header  |  1996-10-12  |  6KB  |  181 lines

  1. //                                  -*- C++ -*-
  2. /*
  3.  
  4. Copyright (C) 1992, 1993, 1994, 1995 John W. Eaton
  5.  
  6. This file is part of Octave.
  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
  10. Free Software Foundation; either version 2, or (at your option) any
  11. later version.
  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
  19. along with Octave; see the file COPYING.  If not, write to the Free
  20. Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  21.  
  22. */
  23.  
  24. #if !defined (octave_ComplexDiagMatrix_h)
  25. #define octave_ComplexDiagMatrix_h 1
  26.  
  27. #include "Array.h"
  28.  
  29. #include "dRowVector.h"
  30. #include "CRowVector.h"
  31. #include "dColVector.h"
  32. #include "CColVector.h"
  33.  
  34. #include "mx-defs.h"
  35.  
  36. extern "C++" {
  37.  
  38. class ComplexDiagMatrix : public DiagArray<Complex>
  39. {
  40. public:
  41.  
  42.   ComplexDiagMatrix (void) : DiagArray<Complex> () { }
  43.   ComplexDiagMatrix (int n) : DiagArray<Complex> (n) { }
  44.   ComplexDiagMatrix (int n, const Complex& val)
  45.     : DiagArray<Complex> (n, val) { }
  46.   ComplexDiagMatrix (int r, int c) : DiagArray<Complex> (r, c) { }
  47.   ComplexDiagMatrix (int r, int c, const Complex& val)
  48.     : DiagArray<Complex> (r, c, val) { }
  49.   ComplexDiagMatrix (const RowVector& a);
  50.   ComplexDiagMatrix (const ComplexRowVector& a) : DiagArray<Complex> (a) { }
  51.   ComplexDiagMatrix (const ColumnVector& a);
  52.   ComplexDiagMatrix (const ComplexColumnVector& a)
  53.     : DiagArray<Complex> (a) { }
  54.   ComplexDiagMatrix (const DiagMatrix& a);
  55.   ComplexDiagMatrix (const DiagArray<Complex>& a)
  56.     : DiagArray<Complex> (a) { }
  57.   ComplexDiagMatrix (const ComplexDiagMatrix& a) : DiagArray<Complex> (a) { }
  58.  
  59.   ComplexDiagMatrix& operator = (const ComplexDiagMatrix& a)
  60.     {
  61.       DiagArray<Complex>::operator = (a);
  62.       return *this;
  63.     }
  64.  
  65.   int operator == (const ComplexDiagMatrix& a) const;
  66.   int operator != (const ComplexDiagMatrix& a) const;
  67.  
  68.   ComplexDiagMatrix& fill (double val);
  69.   ComplexDiagMatrix& fill (const Complex& val);
  70.   ComplexDiagMatrix& fill (double val, int beg, int end);
  71.   ComplexDiagMatrix& fill (const Complex& val, int beg, int end);
  72.   ComplexDiagMatrix& fill (const ColumnVector& a);
  73.   ComplexDiagMatrix& fill (const ComplexColumnVector& a);
  74.   ComplexDiagMatrix& fill (const RowVector& a);
  75.   ComplexDiagMatrix& fill (const ComplexRowVector& a);
  76.   ComplexDiagMatrix& fill (const ColumnVector& a, int beg);
  77.   ComplexDiagMatrix& fill (const ComplexColumnVector& a, int beg);
  78.   ComplexDiagMatrix& fill (const RowVector& a, int beg);
  79.   ComplexDiagMatrix& fill (const ComplexRowVector& a, int beg);
  80.  
  81.   ComplexDiagMatrix hermitian (void) const;  // complex conjugate transpose
  82.   ComplexDiagMatrix transpose (void) const;
  83.  
  84.   friend ComplexDiagMatrix conj (const ComplexDiagMatrix& a);
  85.  
  86. // resize is the destructive analog for this one
  87.  
  88.   ComplexMatrix extract (int r1, int c1, int r2, int c2) const;
  89.  
  90. // extract row or column i.
  91.  
  92.   ComplexRowVector row (int i) const;
  93.   ComplexRowVector row (char *s) const;
  94.  
  95.   ComplexColumnVector column (int i) const;
  96.   ComplexColumnVector column (char *s) const;
  97.  
  98.   ComplexDiagMatrix inverse (int& info) const;
  99.   ComplexDiagMatrix inverse (void) const;
  100.  
  101. // diagonal matrix by diagonal matrix -> diagonal matrix operations
  102.  
  103.   ComplexDiagMatrix& operator += (const DiagMatrix& a);
  104.   ComplexDiagMatrix& operator -= (const DiagMatrix& a);
  105.  
  106.   ComplexDiagMatrix& operator += (const ComplexDiagMatrix& a);
  107.   ComplexDiagMatrix& operator -= (const ComplexDiagMatrix& a);
  108.  
  109. // diagonal matrix by scalar -> diagonal matrix operations
  110.  
  111.   friend ComplexDiagMatrix operator * (const ComplexDiagMatrix& a, double s);
  112.   friend ComplexDiagMatrix operator / (const ComplexDiagMatrix& a, double s);
  113.  
  114.   friend ComplexDiagMatrix operator * (const DiagMatrix& a, const Complex& s);
  115.   friend ComplexDiagMatrix operator / (const DiagMatrix& a, const Complex& s);
  116.  
  117. // scalar by diagonal matrix -> diagonal matrix operations
  118.  
  119.   friend ComplexDiagMatrix operator * (double s, const ComplexDiagMatrix& a);
  120.  
  121.   friend ComplexDiagMatrix operator * (const Complex& s, const DiagMatrix& a);
  122.  
  123. // diagonal matrix by diagonal matrix -> diagonal matrix operations
  124.  
  125.   friend ComplexDiagMatrix operator * (const ComplexDiagMatrix& a,
  126.                        const ComplexDiagMatrix& b);
  127.  
  128.   friend ComplexDiagMatrix operator + (const ComplexDiagMatrix& a,
  129.                        const DiagMatrix& b);
  130.   friend ComplexDiagMatrix operator - (const ComplexDiagMatrix& a,
  131.                        const DiagMatrix& b);
  132.   friend ComplexDiagMatrix operator * (const ComplexDiagMatrix& a,
  133.                        const DiagMatrix& b);
  134.  
  135.   friend ComplexDiagMatrix operator + (const DiagMatrix& a,
  136.                        const ComplexDiagMatrix& b);
  137.   friend ComplexDiagMatrix operator - (const DiagMatrix& a,
  138.                        const ComplexDiagMatrix& b);
  139.   friend ComplexDiagMatrix operator * (const DiagMatrix& a,
  140.                        const ComplexDiagMatrix& b);
  141.  
  142.   friend ComplexDiagMatrix product (const ComplexDiagMatrix& a,
  143.                     const DiagMatrix& b); 
  144.  
  145.   friend ComplexDiagMatrix product (const DiagMatrix& a,
  146.                     const ComplexDiagMatrix& b);
  147.  
  148. // other operations
  149.  
  150.   ComplexColumnVector diag (void) const;
  151.   ComplexColumnVector diag (int k) const;
  152.  
  153. // i/o
  154.  
  155.   friend ostream& operator << (ostream& os, const ComplexDiagMatrix& a);
  156.  
  157. #define KLUDGE_DIAG_MATRICES
  158. #define TYPE Complex
  159. #define KL_DMAT_TYPE ComplexDiagMatrix
  160. #include "mx-kludge.h"
  161. #undef KLUDGE_DIAG_MATRICES
  162. #undef TYPE
  163. #undef KL_DMAT_TYPE
  164.  
  165. private:
  166.  
  167.   ComplexDiagMatrix (Complex *d, int nr, int nc)
  168.     : DiagArray<Complex> (d, nr, nc) { }
  169. };
  170.  
  171. } // extern "C++"
  172.  
  173. #endif
  174.  
  175. /*
  176. ;;; Local Variables: ***
  177. ;;; mode: C++ ***
  178. ;;; page-delimiter: "^/\\*" ***
  179. ;;; End: ***
  180. */
  181.