Mercurial > forge
diff main/fixed/src/fixedCMatrix.h @ 2383:d1930f8af7ca octave-forge
Changed the directory structure of fixed to match the package system
author | hauberg |
---|---|
date | Sun, 20 Aug 2006 14:43:38 +0000 |
parents | |
children | 1728eb2120ef |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main/fixed/src/fixedCMatrix.h Sun Aug 20 14:43:38 2006 +0000 @@ -0,0 +1,431 @@ +/* + +Copyright (C) 2003 Motorola Inc +Copyright (C) 2003 David Bateman + +This program is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation; either version 2, or (at your option) any +later version. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with this program; see the file COPYING. If not, write to the Free +Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +In addition to the terms of the GPL, you are permitted to link +this program with any Open Source program, as defined by the +Open Source Initiative (www.opensource.org) + +*/ + +#if !defined (octave_FixedCMatrix_h) +#define octave_FixedCMatrix_h 1 + +#if defined (__GNUG__) && defined (USE_PRAGMA_INTERFACE_IMPLEMENTATION) +#pragma interface +#endif + +#include <octave/MArray2.h> + +#include <octave/mx-defs.h> +#include <octave/mx-op-defs.h> +#include <octave/data-conv.h> +#include <octave/mach-info.h> +#include <octave/boolMatrix.h> +#include <octave/dMatrix.h> +#include <octave/CMatrix.h> + +#include "int/fixed.h" +#include "fixedMatrix.h" +#include "fixedComplex.h" + +#if !defined(octave_FixedCColVector_h) +class FixedComplexColumnVector; +#endif +#if !defined(octave_FixedCRowVector_h) +class FixedComplexRowVector; +#endif + +typedef FixedPointComplex (*fc_fc_Mapper)(FixedPointComplex); + +class +FixedComplexMatrix : public MArray2<FixedPointComplex> +{ +public: + + FixedComplexMatrix (void) : MArray2<FixedPointComplex> () { } + + FixedComplexMatrix (int r, int c) : MArray2<FixedPointComplex> (r, c) { } + + FixedComplexMatrix (int r, int c, const FixedPointComplex val) : + MArray2<FixedPointComplex> (r, c, val) { } + + FixedComplexMatrix (const MArray2<int> &is, const MArray2<int> &ds); + + FixedComplexMatrix (const Matrix &is, const Matrix &ds); + + FixedComplexMatrix (const ComplexMatrix &is, const ComplexMatrix &ds); + + FixedComplexMatrix (unsigned int is, unsigned int ds, + const FixedComplexMatrix& a); + + FixedComplexMatrix (Complex is, Complex ds, const FixedComplexMatrix& a); + + FixedComplexMatrix (const MArray2<int> &is, const MArray2<int> &ds, + const FixedComplexMatrix& a); + + FixedComplexMatrix (const Matrix &is, const Matrix &ds, + const FixedComplexMatrix& a); + + FixedComplexMatrix (const ComplexMatrix &is, const ComplexMatrix &ds, + const FixedComplexMatrix& a); + + FixedComplexMatrix (unsigned int is, unsigned int ds, const FixedMatrix& a); + + FixedComplexMatrix (Complex is, Complex ds, const FixedMatrix& a); + + FixedComplexMatrix (const MArray2<int> &is, const MArray2<int> &ds, + const FixedMatrix& a); + + FixedComplexMatrix (const Matrix &is, const Matrix &ds, + const FixedMatrix& a); + + FixedComplexMatrix (const ComplexMatrix &is, const ComplexMatrix &ds, + const FixedMatrix& a); + + FixedComplexMatrix (unsigned int is, unsigned int ds, + const ComplexMatrix& a); + + FixedComplexMatrix (Complex is, Complex ds, const ComplexMatrix& a); + + FixedComplexMatrix (const MArray2<int> &is, const MArray2<int> & ds, + const ComplexMatrix& a); + + FixedComplexMatrix (const Matrix &is, const Matrix & ds, + const ComplexMatrix& a); + + FixedComplexMatrix (const ComplexMatrix &is, const ComplexMatrix & ds, + const ComplexMatrix& a); + + FixedComplexMatrix (unsigned int is, unsigned int ds, const Matrix& a); + + FixedComplexMatrix (Complex is, Complex ds, const Matrix& a); + + FixedComplexMatrix (const MArray2<int> &is, const MArray2<int> & ds, + const Matrix& a); + + FixedComplexMatrix (const Matrix &is, const Matrix & ds, const Matrix& a); + + FixedComplexMatrix (const ComplexMatrix &is, const ComplexMatrix & ds, + const Matrix& a); + + FixedComplexMatrix (unsigned int is, unsigned int ds, + const ComplexMatrix &a, const ComplexMatrix &b); + + FixedComplexMatrix (Complex is, Complex ds, const ComplexMatrix &a, + const ComplexMatrix &b); + + FixedComplexMatrix (const MArray2<int> &is, const MArray2<int> &ds, + const ComplexMatrix &a, const ComplexMatrix &b); + + FixedComplexMatrix (const Matrix &is, const Matrix &ds, + const ComplexMatrix &a, const ComplexMatrix &b); + + FixedComplexMatrix (const ComplexMatrix &is, const ComplexMatrix &ds, + const ComplexMatrix &a, const ComplexMatrix &b); + + FixedComplexMatrix (const FixedMatrix& a); + + FixedComplexMatrix (const FixedMatrix& a, const FixedMatrix& b); + + FixedComplexMatrix (const FixedComplexMatrix& a) : + MArray2<FixedPointComplex> (a) { } + + FixedComplexMatrix (const MArray2<FixedPointComplex>& a) : + MArray2<FixedPointComplex> (a) { } + + explicit FixedComplexMatrix (const FixedComplexRowVector& rv); + + FixedComplexMatrix (const FixedRowVector& rv); + + explicit FixedComplexMatrix (const FixedComplexColumnVector& cv); + + FixedComplexMatrix (const FixedColumnVector& cv); + + ComplexMatrix sign (void) const; + ComplexMatrix getdecsize (void) const; + ComplexMatrix getintsize (void) const; + ComplexMatrix getnumber (void) const; + ComplexMatrix fixedpoint (void) const; + FixedComplexMatrix chdecsize (const Complex n); + FixedComplexMatrix chdecsize (const ComplexMatrix &n); + FixedComplexMatrix chintsize (const Complex n); + FixedComplexMatrix chintsize (const ComplexMatrix &n); + FixedComplexMatrix incdecsize (const Complex n); + FixedComplexMatrix incdecsize (const ComplexMatrix &n); + FixedComplexMatrix incdecsize (); + FixedComplexMatrix incintsize (const Complex n); + FixedComplexMatrix incintsize (const ComplexMatrix &n); + FixedComplexMatrix incintsize (); + + FixedComplexMatrix& operator = (const FixedComplexMatrix& a) + { + MArray2<FixedPointComplex>::operator = (a); + return *this; + } + + bool operator == (const FixedComplexMatrix& a) const; + bool operator != (const FixedComplexMatrix& a) const; + + bool is_hermitian (void) const; + bool is_symmetric (void) const; + +#ifdef HAVE_OLD_OCTAVE_CONCAT + friend FixedComplexMatrix concat (const FixedComplexMatrix& ra, + const FixedComplexMatrix& rb, + const Array<int>& ra_idx); + + friend FixedComplexMatrix concat (const FixedComplexMatrix& ra, + const FixedMatrix& rb, + const Array<int>& ra_idx); + + friend FixedComplexMatrix concat (const FixedMatrix& ra, + const FixedComplexMatrix& rb, + const Array<int>& ra_idx); +#endif + +#ifdef HAVE_OCTAVE_CONCAT + FixedComplexMatrix concat (const FixedComplexMatrix& rb, + const Array<int>& ra_idx); + + FixedComplexMatrix concat (const FixedMatrix& rb, + const Array<int>& ra_idx); +#endif + + // destructive insert/delete/reorder operations + + FixedComplexMatrix& insert (const FixedComplexMatrix& a, int r, int c); + FixedComplexMatrix& insert (const FixedComplexRowVector& a, int r, int c); + FixedComplexMatrix& insert (const FixedComplexColumnVector& a, int r, int c); + + FixedComplexMatrix& fill (FixedPointComplex val); + FixedComplexMatrix& fill (FixedPointComplex val, int r1, int c1, int r2, int c2); + + FixedComplexMatrix append (const FixedComplexMatrix& a) const; + FixedComplexMatrix append (const FixedComplexRowVector& a) const; + FixedComplexMatrix append (const FixedComplexColumnVector& a) const; + + FixedComplexMatrix stack (const FixedComplexMatrix& a) const; + FixedComplexMatrix stack (const FixedComplexRowVector& a) const; + FixedComplexMatrix stack (const FixedComplexColumnVector& a) const; + + FixedComplexMatrix hermitian (void) const; + FixedComplexMatrix transpose (void) const { return MArray2<FixedPointComplex>::transpose (); } + + // resize is the destructive equivalent for this one + + FixedComplexMatrix extract (int r1, int c1, int r2, int c2) const; + + FixedComplexMatrix extract_n (int r1, int c1, int nr, int nc) const; + + // extract row or column i. + + FixedComplexRowVector row (int i) const; + FixedComplexRowVector row (char *s) const; + + FixedComplexColumnVector column (int i) const; + FixedComplexColumnVector column (char *s) const; + + // unary operations + + FixedComplexMatrix operator ! (void) const; + + // other operations + + FixedComplexMatrix map (fc_fc_Mapper f) const; + FixedComplexMatrix& apply (fc_fc_Mapper f); + + bool all_elements_are_real (void) const; + + boolMatrix all (int dim = -1) const; + boolMatrix any (int dim = -1) const; + + FixedComplexMatrix cumprod (int dim = -1) const; + FixedComplexMatrix cumsum (int dim = -1) const; + FixedComplexMatrix prod (int dim = -1) const; + FixedComplexMatrix sum (int dim = -1) const; + FixedComplexMatrix sumsq (int dim = -1) const; + FixedComplexMatrix abs (void) const; + + FixedComplexColumnVector diag (void) const; + FixedComplexColumnVector diag (int k) const; + + FixedComplexColumnVector row_min (void) const; + FixedComplexColumnVector row_max (void) const; + + FixedComplexColumnVector row_min (Array<int>& index) const; + FixedComplexColumnVector row_max (Array<int>& index) const; + + FixedComplexRowVector column_min (void) const; + FixedComplexRowVector column_max (void) const; + + FixedComplexRowVector column_min (Array<int>& index) const; + FixedComplexRowVector column_max (Array<int>& index) const; + + friend FixedComplexMatrix operator * (const FixedComplexColumnVector& a, + const FixedComplexRowVector& b); + friend FixedComplexMatrix operator * (const FixedComplexMatrix& a, + const FixedComplexMatrix& b); + + friend FixedMatrix real (const FixedComplexMatrix &x); + friend FixedMatrix imag (const FixedComplexMatrix &x); + friend FixedComplexMatrix conj (const FixedComplexMatrix &x); + + friend FixedMatrix abs (const FixedComplexMatrix &x); + friend FixedMatrix norm (const FixedComplexMatrix &x); + friend FixedMatrix arg (const FixedComplexMatrix &x); + friend FixedComplexMatrix polar (const FixedMatrix &r, const FixedMatrix &p); + + friend FixedComplexMatrix cos (const FixedComplexMatrix &x); + friend FixedComplexMatrix cosh (const FixedComplexMatrix &x); + friend FixedComplexMatrix sin (const FixedComplexMatrix &x); + friend FixedComplexMatrix sinh (const FixedComplexMatrix &x); + friend FixedComplexMatrix tan (const FixedComplexMatrix &x); + friend FixedComplexMatrix tanh (const FixedComplexMatrix &x); + + friend FixedComplexMatrix sqrt (const FixedComplexMatrix &x); + friend FixedComplexMatrix pow (const FixedComplexMatrix &a, const int b); + friend FixedComplexMatrix pow (const FixedComplexMatrix &a, const double b); + friend FixedComplexMatrix pow (const FixedComplexMatrix &a, + const FixedPointComplex &b); + friend FixedComplexMatrix pow (const FixedComplexMatrix &a, + const FixedComplexMatrix &b); + friend FixedComplexMatrix exp (const FixedComplexMatrix &x); + friend FixedComplexMatrix log (const FixedComplexMatrix &x); + friend FixedComplexMatrix log10 (const FixedComplexMatrix &x); + + friend FixedComplexMatrix round (const FixedComplexMatrix &x); + friend FixedComplexMatrix rint (const FixedComplexMatrix &x); + friend FixedComplexMatrix floor (const FixedComplexMatrix &x); + friend FixedComplexMatrix ceil (const FixedComplexMatrix &x); + + friend ComplexMatrix fixedpoint (const FixedComplexMatrix& x); + friend ComplexMatrix sign (const FixedComplexMatrix& x); + friend ComplexMatrix getintsize (const FixedComplexMatrix& x); + friend ComplexMatrix getdecsize (const FixedComplexMatrix& x); + friend ComplexMatrix getnumber (const FixedComplexMatrix& x); + + // i/o + + friend std::ostream& operator << (std::ostream& os, + const FixedComplexMatrix& a); + friend std::istream& operator >> (std::istream& is, FixedComplexMatrix& a); + + + static FixedPointComplex resize_fill_value (void) + { return FixedPointComplex(); } + +private: + + FixedComplexMatrix (FixedPointComplex *d, int r, int c) : + MArray2<FixedPointComplex> (d, r, c) { } +}; + +FixedComplexMatrix operator * (const FixedComplexColumnVector& a, + const FixedComplexRowVector& b); +FixedComplexMatrix operator * (const FixedComplexMatrix& a, + const FixedComplexMatrix& b); + +FixedMatrix real (const FixedComplexMatrix &x); +FixedMatrix imag (const FixedComplexMatrix &x); +FixedComplexMatrix conj (const FixedComplexMatrix &x); + +FixedMatrix abs (const FixedComplexMatrix &x); +FixedMatrix norm (const FixedComplexMatrix &x); +FixedMatrix arg (const FixedComplexMatrix &x); +FixedComplexMatrix polar (const FixedMatrix &r, const FixedMatrix &p); + +FixedComplexMatrix cos (const FixedComplexMatrix &x); +FixedComplexMatrix cosh (const FixedComplexMatrix &x); +FixedComplexMatrix sin (const FixedComplexMatrix &x); +FixedComplexMatrix sinh (const FixedComplexMatrix &x); +FixedComplexMatrix tan (const FixedComplexMatrix &x); +FixedComplexMatrix tanh (const FixedComplexMatrix &x); + +FixedComplexMatrix sqrt (const FixedComplexMatrix &x); +FixedComplexMatrix pow (const FixedComplexMatrix &a, const int b); +FixedComplexMatrix pow (const FixedComplexMatrix &a, const double b); +FixedComplexMatrix pow (const FixedComplexMatrix &a, + const FixedPointComplex &b); +FixedComplexMatrix pow (const FixedComplexMatrix &a, + const FixedComplexMatrix &b); +FixedComplexMatrix exp (const FixedComplexMatrix &x); +FixedComplexMatrix log (const FixedComplexMatrix &x); +FixedComplexMatrix log10 (const FixedComplexMatrix &x); + +FixedComplexMatrix round (const FixedComplexMatrix &x); +FixedComplexMatrix rint (const FixedComplexMatrix &x); +FixedComplexMatrix floor (const FixedComplexMatrix &x); +FixedComplexMatrix ceil (const FixedComplexMatrix &x); + +inline ComplexMatrix fixedpoint (const FixedComplexMatrix& x) + { return x.fixedpoint(); } +inline ComplexMatrix sign (const FixedComplexMatrix& x) + { return x.sign(); } +inline ComplexMatrix getintsize (const FixedComplexMatrix& x) + { return x.getintsize(); } +inline ComplexMatrix getdecsize (const FixedComplexMatrix& x) + { return x.getdecsize(); } +inline ComplexMatrix getnumber (const FixedComplexMatrix& x) + { return x.getnumber(); } + +std::ostream& operator << (std::ostream& os, + const FixedComplexMatrix& a); +std::istream& operator >> (std::istream& is, FixedComplexMatrix& a); + + +FixedComplexMatrix min (FixedPointComplex d, + const FixedComplexMatrix& m); +FixedComplexMatrix min (const FixedComplexMatrix& m, + FixedPointComplex d); +FixedComplexMatrix min (const FixedComplexMatrix& a, + const FixedComplexMatrix& b); + +FixedComplexMatrix max (FixedPointComplex d, + const FixedComplexMatrix& m); +FixedComplexMatrix max (const FixedComplexMatrix& m, + FixedPointComplex d); +FixedComplexMatrix max (const FixedComplexMatrix& a, + const FixedComplexMatrix& b); + +FixedComplexMatrix elem_pow (const FixedComplexMatrix &a, + const FixedComplexMatrix &b); +FixedComplexMatrix elem_pow (const FixedComplexMatrix &a, + const FixedPointComplex &b); +FixedComplexMatrix elem_pow (const FixedPointComplex &a, + const FixedComplexMatrix &b); + + +MS_CMP_OP_DECLS (FixedComplexMatrix, FixedPointComplex) +MS_BOOL_OP_DECLS (FixedComplexMatrix, FixedPointComplex) + +SM_CMP_OP_DECLS (FixedPointComplex, FixedComplexMatrix) +SM_BOOL_OP_DECLS (FixedPointComplex, FixedComplexMatrix) + +MM_CMP_OP_DECLS (FixedComplexMatrix, FixedComplexMatrix) +MM_BOOL_OP_DECLS (FixedComplexMatrix, FixedComplexMatrix) + +MARRAY_FORWARD_DEFS (MArray2, FixedComplexMatrix, FixedPointComplex) + +#endif + +/* +;;; Local Variables: *** +;;; mode: C++ *** +;;; End: *** +*/