Main Page   Class Hierarchy   Compound List   File List   Compound Members   File Members  

SparseMat.h

Go to the documentation of this file.
00001 /*
00002     File:           SparseMat.h
00003 
00004     Function:       Defines a sparse matrix.
00005                     
00006     Author(s):      Andrew Willmott
00007 
00008     Copyright:      (c) 1995-2000, Andrew Willmott
00009  */
00010 
00011 #ifndef __SparseMat__
00012 #define __SparseMat__
00013 
00014 #include "vl/VL.h"
00015 #include "vl/Mat.h"
00016 #include "vl/SparseVec.h"
00017 #include "vl/SubSMat.h"
00018 #include <iostream.h>
00019 
00020 
00021 // --- SparseMat Class --------------------------------------------------------
00022 
00023 
00024 class TSparseMat
00025 {
00026 public:
00027     
00028     // Constructors
00029     
00030     TSparseMat();                           // Null matrix: no space allocated
00031     TSparseMat(Int rows, Int cols);         // Ordinary uninitialised matrix
00032     TSparseMat(Int rows, Int cols, ZeroOrOne k); // I * k
00033     TSparseMat(Int rows, Int cols, Block k);// block matrix (m[i][j] = k)
00034     TSparseMat(const TSparseMat &m);        // Copy constructor 
00035     TSparseMat(const TSubSMat &m);          // Conversion constructors...   
00036     TSparseMat(const TMat &m);          
00037 
00038     ~TSparseMat();          
00039     
00040     // Accessor functions
00041     
00042     inline Int          Rows() const { return rows; };
00043     inline Int          Cols() const { return cols; };
00044 
00045     inline TMSparseVec  &operator [] (Int i);       // Indexing by row
00046     inline const TMSparseVec
00047                         &operator [] (Int i) const; // no checking    
00048 
00049     inline TMSparseVec  *Ref() const;               // Return pointer to data
00050 
00051     // Assignment operators
00052     
00053     TSparseMat          &operator =  (const TSparseMat &m);     
00054     TSparseMat          &operator =  (const TSubSMat &m);   
00055     TSparseMat          &operator =  (const TMat &m);   
00056     inline TSparseMat   &operator =  (ZeroOrOne k);
00057     inline TSparseMat   &operator =  (Block k);
00058 
00059     Void                SetSize(Int m, Int n);
00060     Bool                IsSquare() const { return(rows == cols); };
00061 
00062     //  Matrix initialisers
00063     
00064     Void                MakeZero();
00065     Void                MakeDiag(TMReal k = vl_one);
00066     Void                MakeBlock(TMReal k = vl_one);
00067 
00068 protected:
00069     //  Private ...
00070     TMSparseVec *row;
00071     Int         rows;
00072     Int         cols;
00073 };
00074 
00075 
00076 // --- SparseMat In-Place Operators -------------------------------------------
00077 
00078 TSparseMat  &operator += (TSparseMat &m, const TSparseMat &n);
00079 TSparseMat  &operator -= (TSparseMat &m, const TSparseMat &n);
00080 TSparseMat  &operator *= (TSparseMat &m, const TSparseMat &n);
00081 TSparseMat  &operator *= (TSparseMat &m, TMReal s);
00082 TSparseMat  &operator /= (TSparseMat &m, TMReal s);
00083 
00084 // --- SparseMat Comparison Operators -----------------------------------------
00085 
00086 Bool        operator == (const TSparseMat &m, const TSparseMat &n);
00087 Bool        operator != (const TSparseMat &m, const TSparseMat &n);
00088 
00089 // --- SparseMat Arithmetic Operators -----------------------------------------
00090 
00091 TSparseMat  operator + (const TSparseMat &m, const TSparseMat &n);
00092 TSparseMat  operator - (const TSparseMat &m, const TSparseMat &n);
00093 TSparseMat  operator - (const TSparseMat &m);
00094 TSparseMat  operator * (const TSparseMat &m, const TSparseMat &n);
00095 TSparseMat  operator * (const TSparseMat &m, TMReal s);
00096 TSparseMat  operator / (const TSparseMat &m, TMReal s);
00097 
00098 TSparseVec  &operator *= (TSparseVec &v, const TSparseMat &m);
00099 TMSparseVec operator * (const TSparseVec &v, const TSparseMat &m);
00100 TSparseVec  operator * (const TSparseMat &m, const TSparseVec &v);
00101 TMVec       &operator *= (TMVec &v, const TSparseMat &m);
00102 TMVec       operator * (const TMVec &v, const TSparseMat &m);
00103 TMVec       operator * (const TSparseMat &m, const TMVec &v);
00104 
00105 TSparseMat  trans(const TSparseMat &m);
00106 TMReal      trace(const TSparseMat &m);
00107 TSparseMat  oprod(const TSparseVec &a, const TSparseVec &b);
00108 TSparseMat  oprods(const TVec &a, const TVec &b);
00109 TSparseMat  inv(const TSparseMat &m, TMReal *determinant = 0, TMReal pEps = 1e-20);
00110 
00111 // --- Mat Input & Output -----------------------------------------------------
00112 
00113 ostream     &operator << (ostream &s, const TSparseMat &m);
00114 istream     &operator >> (istream &s, TSparseMat &m);
00115 
00116 // --- SparseMat Inlines ------------------------------------------------------
00117 
00118 
00119 inline TMSparseVec &TSparseMat::operator [] (Int i)
00120 {
00121     CheckRange(i, 0, Rows(), "(SparseMat::[i]) i index out of range");
00122     
00123     return(row[i]);
00124 }
00125 
00126 inline const TMSparseVec &TSparseMat::operator [] (Int i) const
00127 {
00128     CheckRange(i, 0, Rows(), "(SparseMat::[i]) i index out of range");
00129     
00130     return(row[i]);
00131 }
00132 
00133 inline TMSparseVec *TSparseMat::Ref() const
00134 {
00135     return(row);
00136 }
00137 
00138 inline TSparseMat &TSparseMat::operator = (ZeroOrOne k)
00139 {
00140     MakeDiag(k);
00141     return(SELF);
00142 };
00143 
00144 inline TSparseMat &TSparseMat::operator = (Block k)
00145 {
00146     MakeBlock((ZeroOrOne) k);
00147     return(SELF);
00148 };
00149 
00150 #endif
00151 

Generated at Sat Aug 5 00:16:47 2000 for Class Library by doxygen 1.1.0 written by Dimitri van Heesch, © 1997-2000