00001 #ifndef __FIdentity_H__
00002 #define __FIdentity_H__
00003
00004
00024 #include <stdio.h>
00025 #include <math.h>
00026
00027 #include "FloatVector.hpp"
00028
00029 #include "AFSymMatrix.hpp"
00030
00031
00032 class FIdentity : public AFSymMatrix
00033 {
00034 public:
00035
00036 FIdentity(int n):AFSymMatrix(n){}
00037 FIdentity(const FIdentity& m):AFSymMatrix(m){}
00038 FIdentity operator=(const FIdentity& m){ if(this!=NULL)width= m.width; return *this; }
00039
00040 virtual ~FIdentity(){}
00041
00042 virtual AFloatMatrix* copy(){ return new FIdentity(*this); }
00043 virtual AFloatMatrix* t(AFloatMatrix* result=0);
00044
00045
00046 virtual void set0(int i, int j, float value){}
00047 virtual float get0(int i, int j){ return (i==j ? 1.0 : 0.0); }
00048
00049
00050 virtual void set(int i, int j, float value){}
00051 virtual float get(int i, int j){ return (i==j ? 1.0 : 0.0); }
00052
00053
00054 virtual void setAll(float value=0.0){}
00055
00056 virtual float det(){return 1.0;}
00057 virtual float trace(){return getWidth();}
00058
00059 virtual float norme2(){return getWidth();}
00060 virtual float sum(){return getWidth();}
00061 virtual float sum2(){return getWidth();}
00062
00063 virtual float minimum(){return 0.0;}
00064 virtual float maximum(){return 1.0;}
00065 virtual float sigma();
00066
00067
00068
00069 void operator+=(float value){}
00070 void operator-=(float value){}
00071 void operator*=(float value){}
00072 void operator/=(float value){}
00073
00074 virtual void add(float value){}
00075 virtual void subst(float value){}
00076 virtual void mult(float value){}
00077 virtual void div(float value){}
00078
00079
00080 void operator+=(FIdentity& m){}
00081 void operator-=(FIdentity& m){}
00082
00083 virtual void add(AFloatMatrix& m){}
00084 virtual void subst(AFloatMatrix& m){}
00085
00086
00087
00088 virtual FloatVector* mult_Av(FloatVector* v, FloatVector* result=0);
00089 virtual FloatVector* mult_ATv(FloatVector* v, FloatVector* result=0){ return mult_Av(v, result); }
00090
00091 virtual FloatVector* mult_vA(FloatVector* v, FloatVector* result=0){ return mult_ATv(v, result); }
00092 virtual FloatVector* mult_vAT(FloatVector* vt, FloatVector* result=0){ return mult_Av(vt, result); }
00093
00094
00095
00096 virtual FloatVector* mult_Av(FloatVector* v, int col0, int row0, bool incremental=false, FloatVector* result=0);
00097 virtual FloatVector* mult_ATv(FloatVector* v, int col0, int row0, bool incremental=false, FloatVector* result=0)
00098 { return mult_Av(v, col0, row0, incremental, result); }
00099
00100
00101 virtual FloatVector* mult_vA(FloatVector* v, int row0, int col0, bool incremental=false, FloatVector* result=0)
00102 { return mult_ATv(v, col0, row0, incremental, result); }
00103 virtual FloatVector* mult_vAT(FloatVector* vt, int row0, int col0, bool incremental=false, FloatVector* result=0)
00104 { return mult_Av(vt, col0, row0, incremental, result); }
00105
00106 virtual void output(){ printf("I(%d,%d)\n", getWidth(), getHeight()); }
00107 virtual void output(FILE* file){ fprintf(file, "I(%d,%d)\n", getWidth(), getHeight()); }
00108 };
00109
00110 #endif
00111
00112