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

AltStyle によって変換されたページ (->オリジナル) /