home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 9 / FreshFishVol9-CD2.bin / bbs / gnu / octave-1.1.1-src.lha / octave-1.1.1 / liboctave / CDiagMatrix.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-01-04  |  7.0 KB  |  217 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.   friend DiagMatrix;
  41.  
  42. public:
  43.  
  44.   ComplexDiagMatrix (void) : DiagArray<Complex> () { }
  45.   ComplexDiagMatrix (int n) : DiagArray<Complex> (n) { }
  46.   ComplexDiagMatrix (int n, const Complex& val)
  47.     : DiagArray<Complex> (n, val) { }
  48.   ComplexDiagMatrix (int r, int c) : DiagArray<Complex> (r, c) { }
  49.   ComplexDiagMatrix (int r, int c, const Complex& val)
  50.     : DiagArray<Complex> (r, c, val) { }
  51.   ComplexDiagMatrix (const RowVector& a);
  52.   ComplexDiagMatrix (const ComplexRowVector& a) : DiagArray<Complex> (a) { }
  53.   ComplexDiagMatrix (const ColumnVector& a);
  54.   ComplexDiagMatrix (const ComplexColumnVector& a)
  55.     : DiagArray<Complex> (a) { }
  56.   ComplexDiagMatrix (const DiagMatrix& a);
  57.   ComplexDiagMatrix (const DiagArray<Complex>& a)
  58.     : DiagArray<Complex> (a) { }
  59.   ComplexDiagMatrix (const ComplexDiagMatrix& a) : DiagArray<Complex> (a) { }
  60. //  ComplexDiagMatrix (const Complex& a) : DiagArray<Complex> (1, a) { }
  61.  
  62.   ComplexDiagMatrix& operator = (const ComplexDiagMatrix& a)
  63.     {
  64.       DiagArray<Complex>::operator = (a);
  65.       return *this;
  66.     }
  67.  
  68. //  operator DiagArray<Complex>& () const { return *this; }
  69.  
  70.   int operator == (const ComplexDiagMatrix& a) const;
  71.   int operator != (const ComplexDiagMatrix& a) const;
  72.  
  73.   ComplexDiagMatrix& fill (double val);
  74.   ComplexDiagMatrix& fill (const Complex& val);
  75.   ComplexDiagMatrix& fill (double val, int beg, int end);
  76.   ComplexDiagMatrix& fill (const Complex& val, int beg, int end);
  77.   ComplexDiagMatrix& fill (const ColumnVector& a);
  78.   ComplexDiagMatrix& fill (const ComplexColumnVector& a);
  79.   ComplexDiagMatrix& fill (const RowVector& a);
  80.   ComplexDiagMatrix& fill (const ComplexRowVector& a);
  81.   ComplexDiagMatrix& fill (const ColumnVector& a, int beg);
  82.   ComplexDiagMatrix& fill (const ComplexColumnVector& a, int beg);
  83.   ComplexDiagMatrix& fill (const RowVector& a, int beg);
  84.   ComplexDiagMatrix& fill (const ComplexRowVector& a, int beg);
  85.  
  86.   ComplexDiagMatrix hermitian (void) const;  // complex conjugate transpose
  87.   ComplexDiagMatrix transpose (void) const;
  88.  
  89.   friend DiagMatrix real (const ComplexDiagMatrix& a);
  90.   friend DiagMatrix imag (const ComplexDiagMatrix& a);
  91.   friend ComplexDiagMatrix conj (const ComplexDiagMatrix& a);
  92.  
  93. // resize is the destructive analog for this one
  94.  
  95.   ComplexMatrix extract (int r1, int c1, int r2, int c2) const;
  96.  
  97. // extract row or column i.
  98.  
  99.   ComplexRowVector row (int i) const;
  100.   ComplexRowVector row (char *s) const;
  101.  
  102.   ComplexColumnVector column (int i) const;
  103.   ComplexColumnVector column (char *s) const;
  104.  
  105.   ComplexDiagMatrix inverse (int& info) const;
  106.   ComplexDiagMatrix inverse (void) const;
  107.  
  108. // diagonal matrix by diagonal matrix -> diagonal matrix operations
  109.  
  110.   ComplexDiagMatrix& operator += (const DiagMatrix& a);
  111.   ComplexDiagMatrix& operator -= (const DiagMatrix& a);
  112.  
  113.   ComplexDiagMatrix& operator += (const ComplexDiagMatrix& a);
  114.   ComplexDiagMatrix& operator -= (const ComplexDiagMatrix& a);
  115.  
  116. // diagonal matrix by scalar -> matrix operations
  117.  
  118.   friend ComplexMatrix operator + (const ComplexDiagMatrix& a, double s);
  119.   friend ComplexMatrix operator - (const ComplexDiagMatrix& a, double s);
  120.  
  121.   friend ComplexMatrix operator + (const ComplexDiagMatrix& a,
  122.                    const Complex& s);
  123.   friend ComplexMatrix operator - (const ComplexDiagMatrix& a,
  124.                    const Complex& s);
  125.  
  126. // diagonal matrix by scalar -> diagonal matrix operations
  127.  
  128.   friend ComplexDiagMatrix operator * (const ComplexDiagMatrix& a, double s);
  129.   friend ComplexDiagMatrix operator / (const ComplexDiagMatrix& a, double s);
  130.  
  131. // scalar by diagonal matrix -> matrix operations
  132.  
  133.   friend ComplexMatrix operator + (double s, const ComplexDiagMatrix& a);
  134.   friend ComplexMatrix operator - (double s, const ComplexDiagMatrix& a);
  135.  
  136.   friend ComplexMatrix operator + (const Complex& s,
  137.                    const ComplexDiagMatrix& a);
  138.   friend ComplexMatrix operator - (const Complex& s,
  139.                    const ComplexDiagMatrix& a);
  140.  
  141. // scalar by diagonal matrix -> diagonal matrix operations
  142.  
  143.   friend ComplexDiagMatrix operator * (double s, const ComplexDiagMatrix& a);
  144.  
  145. // diagonal matrix by column vector -> column vector operations
  146.  
  147.   friend ComplexColumnVector operator * (const ComplexDiagMatrix& a,
  148.                      const ColumnVector& b);
  149.  
  150.   friend ComplexColumnVector operator * (const ComplexDiagMatrix& a,
  151.                      const ComplexColumnVector& b);
  152.  
  153. // diagonal matrix by diagonal matrix -> diagonal matrix operations
  154.  
  155.   friend ComplexDiagMatrix operator * (const ComplexDiagMatrix& a,
  156.                        const ComplexDiagMatrix& b);
  157.  
  158.   friend ComplexDiagMatrix operator + (const ComplexDiagMatrix& a,
  159.                        const DiagMatrix& b);
  160.   friend ComplexDiagMatrix operator - (const ComplexDiagMatrix& a,
  161.                        const DiagMatrix& b);
  162.   friend ComplexDiagMatrix operator * (const ComplexDiagMatrix& a,
  163.                        const DiagMatrix& b);
  164.  
  165.   friend ComplexDiagMatrix product (const ComplexDiagMatrix& a,
  166.                     const DiagMatrix& b); 
  167.  
  168. // diagonal matrix by matrix -> matrix operations
  169.  
  170.   friend ComplexMatrix operator + (const ComplexDiagMatrix& a,
  171.                    const Matrix& b); 
  172.   friend ComplexMatrix operator - (const ComplexDiagMatrix& a,
  173.                    const Matrix& b);
  174.   friend ComplexMatrix operator * (const ComplexDiagMatrix& a,
  175.                    const Matrix& b);
  176.  
  177.   friend ComplexMatrix operator + (const ComplexDiagMatrix& a,
  178.                    const ComplexMatrix& b);
  179.   friend ComplexMatrix operator - (const ComplexDiagMatrix& a,
  180.                    const ComplexMatrix& b);
  181.   friend ComplexMatrix operator * (const ComplexDiagMatrix& a,
  182.                    const ComplexMatrix& b);
  183.  
  184. // other operations
  185.  
  186.   ComplexColumnVector diag (void) const;
  187.   ComplexColumnVector diag (int k) const;
  188.  
  189. // i/o
  190.  
  191.   friend ostream& operator << (ostream& os, const ComplexDiagMatrix& a);
  192.  
  193. #define KLUDGE_DIAG_MATRICES
  194. #define TYPE Complex
  195. #define KL_DMAT_TYPE ComplexDiagMatrix
  196. #include "mx-kludge.h"
  197. #undef KLUDGE_DIAG_MATRICES
  198. #undef TYPE
  199. #undef KL_DMAT_TYPE
  200.  
  201. private:
  202.  
  203.   ComplexDiagMatrix (Complex *d, int nr, int nc)
  204.     : DiagArray<Complex> (d, nr, nc) { }
  205. };
  206.  
  207. } // extern "C++"
  208.  
  209. #endif
  210.  
  211. /*
  212. ;;; Local Variables: ***
  213. ;;; mode: C++ ***
  214. ;;; page-delimiter: "^/\\*" ***
  215. ;;; End: ***
  216. */
  217.