00001 #ifndef __AFloatMatrix_H__
00002 #define __AFloatMatrix_H__
00003
00025 #include <stdio.h>
00026 #include "FloatVector.hpp"
00027
00028 #include "Simple1DIndexList.hpp"
00029
00030 class AFloatMatrix
00031 {
00032 public:
00033 virtual ~AFloatMatrix(){}
00034
00035 virtual AFloatMatrix* copy()=0;
00036 virtual AFloatMatrix* t(AFloatMatrix* result=0)=0;
00037
00038 virtual int size() const{ return getWidth()*getHeight(); }
00039
00040 virtual int getWidth() const=0;
00041 virtual int getHeight() const=0;
00042
00043
00044 virtual void set0(int i, int j, float value)=0;
00045 virtual float get0(int i, int j)=0;
00046
00047 virtual Simple1DIndexList* indexesInRow0(int k, Simple1DIndexList* oldRow=0){ return 0; }
00048 virtual Simple1DIndexList* indexesInCol0(int k, Simple1DIndexList* oldCol=0){ return 0; }
00049
00050
00051 virtual void set(int i, int j, float value)=0;
00052 virtual float get(int i, int j)=0;
00053
00054 virtual Simple1DIndexList* indexesInRow(int k, Simple1DIndexList* oldRow=0){ return 0; }
00055 virtual Simple1DIndexList* indexesInCol(int k, Simple1DIndexList* oldCol=0){ return 0; }
00056
00057
00058
00059 virtual void setAll(AFloatMatrix* from, bool t=false)=0;
00060 virtual void setAll(float value=0.0)=0;
00061
00062 virtual float det()=0;
00063 virtual float trace()=0;
00064
00065 virtual float norme2()=0;
00066 virtual float sum()=0;
00067
00068 virtual float minimum()=0;
00069 virtual float maximum()=0;
00070 virtual float mean(){return sum()/size();}
00071 virtual float sigma()=0;
00072
00073
00074 virtual void add(float value)=0;
00075 virtual void subst(float value)=0;
00076 virtual void mult(float value)=0;
00077 virtual void div(float value)=0;
00078
00079
00080 virtual void add(AFloatMatrix& m)=0;
00081 virtual void subst(AFloatMatrix& m)=0;
00082
00083
00084
00085
00086
00087 virtual FloatVector* mult_Av(FloatVector* v, FloatVector* result=0)=0;
00088 virtual FloatVector* mult_ATv(FloatVector* v, FloatVector* result=0)=0;
00089
00090 virtual FloatVector* mult_vA(FloatVector* v, FloatVector* result=0)=0;
00091 virtual FloatVector* mult_vAT(FloatVector* vt, FloatVector* result=0)=0;
00092
00093
00094
00095 virtual FloatVector* mult_Av(FloatVector* v, int col0, int row0, bool incremental=false, FloatVector* result=0)=0;
00096 virtual FloatVector* mult_ATv(FloatVector* v, int col0, int row0, bool incremental=false, FloatVector* result=0)=0;
00097
00098 virtual FloatVector* mult_vA(FloatVector* v, int row0, int col0, bool incremental=false, FloatVector* result=0)=0;
00099 virtual FloatVector* mult_vAT(FloatVector* vt, int row0, int col0, bool incremental=false, FloatVector* result=0)=0;
00100
00101
00102
00103 virtual AFloatMatrix* gadd_A_B(AFloatMatrix* B, bool aT=false, bool bT=false, AFloatMatrix* result=0);
00104 virtual AFloatMatrix* gadd_B_A(AFloatMatrix* B, bool aT=false, bool bT=false, AFloatMatrix* result=0)
00105 { return B->gadd_A_B(this, bT, aT, result); }
00106
00107 virtual AFloatMatrix* gsubst_A_B(AFloatMatrix* B, bool aT=false, bool bT=false, AFloatMatrix* result=0);
00108 virtual AFloatMatrix* gsubst_B_A(AFloatMatrix* B, bool aT=false, bool bT=false, AFloatMatrix* result=0);
00109
00110 virtual AFloatMatrix* gmult_A_B(AFloatMatrix* B, bool aT=false, bool bT=false, AFloatMatrix* result=0)
00111 {printf("%s() %s: not Implemented\n",__FUNCTION__, __FILE__); return 0;}
00112 virtual AFloatMatrix* gmult_B_A(AFloatMatrix* B, bool aT=false, bool bT=false, AFloatMatrix* result=0)
00113 {printf("%s() %s: not Implemented\n",__FUNCTION__, __FILE__); return 0;}
00114
00115 virtual void output(){}
00116 virtual void output(FILE* file){}
00117 };
00118
00119 #endif
00120