// // $Source: /cvsroot/gambit/gambit/sources/libgambit/matrix.h,v $ // $Date: 2006/01/07 05:21:40 $ // $Revision: 1.3 $ // // DESCRIPTION: // Interface to a matrix class // // This file is part of Gambit // Copyright (c) 2002, The Gambit Project // // 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 of the License, 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; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // #ifndef LIBGAMBIT_MATRIX_H #define LIBGAMBIT_MATRIX_H #include "recarray.h" #include "vector.h" namespace Gambit { template Vector operator*(const Vector &, const Matrix &); template class Matrix : public RectArray { friend Vector operator*<>(const Vector &, const Matrix &); public: /// @name Lifecycle //@{ Matrix(void); Matrix(unsigned int rows, unsigned int cols); Matrix(unsigned int rows, unsigned int cols, int minrows); Matrix(int rl, int rh, int cl, int ch); Matrix(const Matrix &); virtual ~Matrix(); Matrix &operator=(const Matrix &); Matrix &operator=(const T &); //@} /// @name Extracting rows and columns //@{ Vector Row(int) const; Vector Column(int) const; //@} /// @name Comparison operators //@{ bool operator==(const Matrix &) const; bool operator!=(const Matrix &) const; bool operator==(const T &) const; bool operator!=(const T &) const; //@} /// @name Additive operators //@{ Matrix operator+(const Matrix &) const; Matrix operator-(const Matrix &) const; Matrix &operator+=(const Matrix &); Matrix &operator-=(const Matrix &); Matrix operator-(void); //@} /// @name Multiplicative operators //@{ /// "in-place" column multiply void CMultiply(const Vector &, Vector &) const; /// "in-place" row (transposed) multiply void RMultiply(const Vector &, Vector &) const; Matrix operator*(const Matrix &) const; Vector operator*(const Vector &) const; Matrix operator*(const T &) const; Matrix &operator*=(const Matrix &); Matrix &operator*=(const T &); Matrix operator/(const T &) const; Matrix &operator/=(const T &); /// Kronecker product Matrix operator&(const Matrix &) const; //@ /// @name Other operations //@{ Matrix Transpose(void) const; /// Set matrix to identity matrix void MakeIdent(void); void Pivot(int, int); //@} }; template Vector operator*(const Vector &, const Matrix &); } // end namespace Gambit #endif // LIBGAMBIT_MATRIX_H