Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   Related Pages  

FloatVector.hpp

00001 #ifndef __FloatVector_H__
00002 #define __FloatVector_H__
00003 
00004 
00005 
00024 #include <stdio.h>
00025 
00026 class FloatVectorT;
00027 class AFSymMatrix;
00028 
00029 class FloatVector
00030 {
00031 private:
00032         
00033 int             dataSize;
00034 float*  data;
00035 
00036 float*  data1;
00037 
00038 public:
00039         
00040 FloatVector(int size);
00041 FloatVector(int size, float adata);
00042 FloatVector(const FloatVector& v);
00043 FloatVector operator=(const FloatVector& v);
00044 
00045 ~FloatVector(){ data=0; delete[] data1; }
00046 
00047 FloatVectorT t();
00048 
00049 FloatVector* sub(int start, int step, int end);
00050 FloatVector* copy();
00051 
00052 inline int size(){ return dataSize; }
00053 
00054 void load(FloatVector* v);
00055 void load(float coeff, FloatVector* v);
00056 
00057 float* getData(){return data;}
00058 
00059 // base 0
00060 inline void set0(int index, float value){ data[index]= value; }
00061 inline float get0(int index){ return data[index]; }
00062 
00063 // base 1
00064 inline void set(int index, float value){ data1[index]= value; }
00065 inline float get(int index){ return data1[index]; }
00066 
00067 void setAll(float value);
00068 void setAt(int p0, int n, float value);
00069 
00070 // computations
00071 int indexArgMin();
00072 int indexArgMax();
00073 float argMin();
00074 float argMax();
00075 
00076 float vT_v();
00077 float norme1();
00078 float norme2();
00079 float normeInf(){ return argMax(); }
00080 float sum();
00081 
00082 float minimum();
00083 float maximum();
00084 float maxAbs();
00085 float mean(){ return sum()/dataSize; }
00086 float sigma();
00087 
00088 void random(float minval=0.0, float maxval=1.0);
00089 
00090 // differences
00091 float undividedDiff(int cellj, int order);
00092 float dividedDiff(int cellj, int order, float dx=1.0);
00093 
00094 // math vectorial op
00095 FloatVector sqrt();
00096 FloatVector pow(float pow);
00097 FloatVector sqr();
00098 FloatVector exp();
00099 FloatVector log();
00100 FloatVector log(float base);
00101 
00102 FloatVector sin();
00103 FloatVector cos();
00104 FloatVector tan();
00105 
00106 // scalar single operations
00107 void operator+=(float value);
00108 void operator-=(float value);
00109 void operator*=(float value);
00110 void operator/=(float value);
00111 
00112 // vector single operations
00113 void operator+=(FloatVector& v);
00114 void operator-=(FloatVector& v);
00115 void operator*=(FloatVector& v);
00116 void operator/=(FloatVector& v);
00117 
00118 void subst(float a);                                                                    // x -= a
00119 void mult(float a);                                                                     // x *= a
00120 void div(float a);                                                                      // x /= a
00121 
00122 
00123 void delta(FloatVector* v1, FloatVector* v);                                    // x = v1-v
00124 void subst(FloatVector* v);                                                             // x -= v
00125 void add(float a);                                                                      // x += a
00126 void add(FloatVector* v);                                                               // x += v
00127 void add(FloatVector* v, FloatVector* v1);                                      // x = v + v1
00128 void add(FloatVector* v, FloatVector* v1, FloatVector* v2);                     // x = v + v1 + v2
00129 void add(float a, FloatVector* v);                                                      // x = x + a*v
00130 void add(float a, FloatVector* v, float b, FloatVector* w);                     // x = x + a*v + b*w
00131 void add(float a, FloatVector* v, float b, FloatVector* w,                      // x = x + a*v + b*w + c*z
00132                                                 float c, FloatVector* z);
00133 void add(float a, float b, FloatVector* v);                                     // x = a*x + b*v
00134 void add(float a, float b, FloatVector* v, float c, FloatVector* w);    // x = a*x + b*v + c*w
00135 
00136 void saxpy(float a, FloatVector* v);                                            // x = a*x + v
00137 
00138 void gaxpy(AFSymMatrix* A, FloatVector* v);                                     // x = x + A*v
00139 void gaxpy(float a, AFSymMatrix* A, FloatVector* v);                            // x = a*x + A*v
00140 void gaxpy(float a, float b, AFSymMatrix* A, FloatVector* v);           // x = a*x + b*A*v
00141 void gaxpy(float a, float b, AFSymMatrix* A, FloatVector* v, 
00142                                                 float c, FloatVector* w);               // x = a*x + b*A*v + c*w
00143 void gaxpy(float a, float b, AFSymMatrix* A, FloatVector* v, 
00144                                 float c, AFSymMatrix* B, FloatVector* w);               // x = a*x + b*A*v + c*B*w
00145 
00146 float prodScalar(FloatVector* v);
00147 
00148 // friends
00149 friend float operator*(FloatVectorT& vt, FloatVector& u);                       // scalar product
00150 
00151 friend FloatVector operator+(FloatVector& v, float a);                  // v<op>a
00152 friend FloatVector operator+(float a, FloatVector& v);                  // a<op>v
00153 friend FloatVector operator-(FloatVector& v, float a);                  // v<op>a
00154 friend FloatVector operator-(float a, FloatVector& v);                  // a<op>v
00155 friend FloatVector operator*(FloatVector& v, float a);                  // v<op>a
00156 friend FloatVector operator*(float a, FloatVector& v);                  // a<op>v
00157 friend FloatVector operator/(FloatVector& v, float a);                  // v<op>a
00158 
00159 friend FloatVector operator+(FloatVector& v1, FloatVector& v2);                 // v1<op>v2
00160 friend FloatVector operator-(FloatVector& v1, FloatVector& v2);                 // v1<op>v2
00161         
00162 void output();
00163 void output(FILE* file);
00164 };
00165 
00166 #endif
00167 
00168 
00169          
SourceForge.net Logo
Restoreinpaint sourceforge project `C++/Java Image Processing, Restoration, Inpainting Project'.

Bernard De Cuyper: Open Project Leader: Concept, design and development.
Bernard De Cuyper & Eddy Fraiha 2002, 2003. Bernard De Cuyper 2004. Open and free, for friendly usage only.
Modifications on Belgium ground of this piece of artistic work, by governement institutions or companies, must be notified to Bernard De Cuyper.
bern_bdc@hotmail.com