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