00001 #ifndef __Sp1FloatSMatrix_H__
00002 #define __Sp1FloatSMatrix_H__
00003
00004
00024 #include <stdio.h>
00025 #include "FloatVector.hpp"
00026
00027 #include "AFSymMatrix.hpp"
00028
00029 class Sp1FloatSMatrix : 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 Sp1FloatSMatrix(int w, int nmax);
00042 Sp1FloatSMatrix(const Sp1FloatSMatrix& m);
00043 Sp1FloatSMatrix operator=(const Sp1FloatSMatrix& m);
00044
00045 virtual ~Sp1FloatSMatrix()
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
00056 virtual AFSymMatrix* copyL0();
00057 virtual AFSymMatrix* copyU0();
00058
00059 virtual AFSymMatrix* copyL();
00060 virtual AFSymMatrix* copyU();
00061
00062 virtual AFSymMatrix* copyL1();
00063 virtual AFSymMatrix* copyU1();
00064
00065 virtual int numberOfItems(){return nItems;}
00066 virtual int getMaxItems(){return maxItems;}
00067
00068 virtual void addItem(int x,int y, float value=0);
00069
00070 virtual bool getItem(int index, int* x,int* y, float* value);
00071 virtual bool setItem(int index, float value);
00072
00073
00074 virtual void set0(int i, int j, float value);
00075 virtual float get0(int i, int j);
00076
00077
00078 virtual void set(int i, int j, float value){ set0(i-1,j-1, value); }
00079 virtual float get(int i, int j){ return get0(i-1,j-1); }
00080
00081
00082 virtual void setAll(float value=0.0);
00083
00084 virtual float det();
00085 virtual float trace();
00086
00087 virtual float norme2();
00088 virtual float sum();
00089 virtual float sum2();
00090 virtual float sigma(){return 0.0;}
00091
00092 virtual float minimum();
00093 virtual float maximum();
00094
00095
00096 void operator+=(float value);
00097 void operator-=(float value);
00098 void operator*=(float value);
00099 void operator/=(float value);
00100
00101 virtual void add(float value);
00102 virtual void subst(float value);
00103 virtual void mult(float value);
00104 virtual void div(float value);
00105
00106 virtual void add(AFloatMatrix& m){}
00107 virtual void subst(AFloatMatrix& m){}
00108
00109
00110 virtual FloatVector* mult_Av(FloatVector* v, FloatVector* result=0);
00111 virtual FloatVector* mult_ATv(FloatVector* v, FloatVector* result=0);
00112
00113 virtual FloatVector* mult_vA(FloatVector* v, FloatVector* result=0) { return mult_ATv(v, result); }
00114 virtual FloatVector* mult_vAT(FloatVector* vt, FloatVector* result=0){ return mult_Av(vt, result); }
00115
00116
00117
00118 FloatVector* mult_Av(FloatVector* v, int col0, int row0, bool incremental=false, FloatVector* result=0);
00119 FloatVector* mult_ATv(FloatVector* v, int col0, int row0, bool incremental=false, FloatVector* result=0);
00120
00121 FloatVector* mult_vA(FloatVector* v, int row0, int col0, bool incremental=false, FloatVector* result=0)
00122 { return mult_ATv(v, col0, row0, incremental, result); }
00123 FloatVector* mult_vAT(FloatVector* vt, int row0, int col0, bool incremental=false, FloatVector* result=0)
00124 { return mult_Av(vt, col0, row0, incremental, result); }
00125
00126 virtual void output();
00127 };
00128
00129 #endif
00130
00131
00132
00133