00001 #ifndef MATRIXFD_H
00002 #define MATRIXFD_H
00003 00004 00005 00006 00007 00008 00009 00010 00011 00012 00013 00014 00015 00016 00017 00018 00019 00020 00021 00022 00023 00024 00025 00026 00027 00028 00029 00030 00031 00032 00033
00034
00035
00036 #include "matrix.h"
00037 #include "vectorD.h"
00038
00039
00040 #ifdef USE_NAMESPACE_LINAL
00041 namespace LinAl {
00042 #endif
00043
00054 class MatrixFD:public MatrixC<double>
00055 {
00056 public:
00058
00059
00060 explicit MatrixFD() : MatrixC<double>() {}
00062 explicit MatrixFD(const int nr, const int nc=1, const double value=0.0) :
00063 MatrixC<double>(nr,nc,value) {}
00065 MatrixFD(const MatrixC<double>& B) : MatrixC<double>(B) {}
00067 ~MatrixFD() {}
00069 MatrixFD& operator= (const double value) {this->MatrixC<double>::operator=(value);return *this;}
00071
00075
00076 VectorD column(const int j) const ;
00078 VectorD row(const int i) const ;
00080
00085
00086 MatrixFD transpose() const ;
00088 void multiply(const MatrixFD& A, const MatrixFD& B,
00089 const char TRANSA='N', const char TRANSB='N',
00090 const double ALPHA=1.0, const double BETA=0.0);
00092 void multiply(const double value);
00094 void multiply(const MatrixSD& A, const MatrixFD& B,
00095 const double ALPHA=1.0, const double BETA=0.0);
00097 void multiply(const MatrixBD& A, const MatrixFD& B,
00098 const double ALPHA=1.0, const double BETA=0.0);
00100 void multiply(const VectorD& x, VectorD& y, const char TRANS='N',
00101 const double ALPHA=1.0, const double BETA=0.0) const;
00108 void LUdecompose(int* IPIV) ;
00117 void LUsubstitute(MatrixC<double>& B, int* IPIV) ;
00119 void LUsolve(MatrixC<double>& B) ;
00121 void LUinvert() ;
00123 void CHdecompose() ;
00125 void CHsubstitute(MatrixC<double>& B) ;
00127 void CHsolve(MatrixC<double>& B) ;
00129 void CHinvert() ;
00131 };
00132 #ifdef USE_NAMESPACE_LINAL
00133 }
00134 #endif
00135 #endif // #ifndef MATRIXFD_H