00001 #ifndef __Sp3FloatSMatrix_H__
00002 #define __Sp3FloatSMatrix_H__
00003
00004
00024 #include <stdio.h>
00025 #include "FloatVector.hpp"
00026
00027 #include "AFSymMatrix.hpp"
00028
00029 class Sp3FloatSMatrix : public AFSymMatrix
00030 {
00031 protected:
00032
00033 int nItems, maxItems;
00034
00035 int* ia;
00036 int* ja;
00037 float* data;
00038
00039 public:
00040
00041 Sp3FloatSMatrix(int w, int nmax);
00042 Sp3FloatSMatrix(const Sp3FloatSMatrix& m);
00043 Sp3FloatSMatrix operator=(const Sp3FloatSMatrix& m);
00044
00045 virtual ~Sp3FloatSMatrix()
00046 {
00047 delete[] ia;
00048 delete[] ja;
00049 delete[] data;
00050 }
00051
00052 virtual AFloatMatrix* copy();
00053 virtual AFloatMatrix* t(AFloatMatrix* result=0){return 0;}
00054
00055 virtual int numberOfItems(){return nItems;}
00056 virtual int getMaxItems(){return maxItems;}
00057
00058 virtual void addItem(int x,int y, float value=0);
00059
00060 virtual bool getItem(int index, int* x,int* y, float* value);
00061 virtual bool setItem(int index, float value);
00062
00063
00064 virtual void set0(int i, int j, float value);
00065 virtual float get0(int i, int j);
00066
00067
00068 virtual void set(int i, int j, float value){ set0(i-1,j-1, value); }
00069 virtual float get(int i, int j){ return get0(i-1,j-1); }
00070
00071
00072 virtual void setAll(float value=0.0);
00073
00074 virtual float det();
00075 virtual float trace();
00076
00077 virtual float norme2();
00078 virtual float sum();
00079 virtual float sum2();
00080 virtual float sigma(){return 0.0;}
00081
00082 virtual float minimum();
00083 virtual float maximum();
00084
00085
00086 void operator+=(float value);
00087 void operator-=(float value);
00088 void operator*=(float value);
00089 void operator/=(float value);
00090
00091 virtual void add(float value);
00092 virtual void subst(float value);
00093 virtual void mult(float value);
00094 virtual void div(float value);
00095
00096 virtual void add(AFloatMatrix& m){}
00097 virtual void subst(AFloatMatrix& m){}
00098
00099
00100 virtual FloatVector* mult_Av(FloatVector* v, FloatVector* result=0);
00101 virtual FloatVector* mult_ATv(FloatVector* v, FloatVector* result=0);
00102
00103 virtual FloatVector* mult_vA(FloatVector* v, FloatVector* result=0) { return mult_ATv(v, result); }
00104 virtual FloatVector* mult_vAT(FloatVector* vt, FloatVector* result=0){ return mult_Av(vt, result); }
00105
00106
00107
00108 FloatVector* mult_Av(FloatVector* v, int col0, int row0, bool incremental=false, FloatVector* result=0);
00109 FloatVector* mult_ATv(FloatVector* v, int col0, int row0, bool incremental=false, FloatVector* result=0);
00110
00111 FloatVector* mult_vA(FloatVector* v, int row0, int col0, bool incremental=false, FloatVector* result=0)
00112 { return mult_ATv(v, col0, row0, incremental, result); }
00113 FloatVector* mult_vAT(FloatVector* vt, int row0, int col0, bool incremental=false, FloatVector* result=0)
00114 { return mult_Av(vt, col0, row0, incremental, result); }
00115
00116
00117 virtual AFloatMatrix* ilu0();
00118 virtual AFloatMatrix* iluth(double threshold=0.001);
00119
00120 virtual void output();
00121 };
00122
00123 #endif
00124
00125
00126