00001 #ifndef __CVector_H__
00002 #define __CVector_H__
00003
00004
00023 #include <stdio.h>
00024 #include "RComplex.hpp"
00025
00026 class CVectorT;
00027
00028 class CVector
00029 {
00030 private:
00031
00032 int dataSize;
00033 RComplex* data;
00034
00035 RComplex* data1;
00036
00037 public:
00038
00039 CVector(int size);
00040 CVector(int size, const RComplex& adata);
00041 CVector(const CVector& v);
00042 CVector operator=(const CVector& v);
00043
00044 ~CVector(){ data=0; delete[] data1; }
00045
00046 CVectorT t();
00047
00048 CVector* sub(int start, int step, int end);
00049
00050 inline int size()const { return dataSize; }
00051
00052 void load(CVector* v);
00053 RComplex* getData(){return data;}
00054
00055
00056 inline void set0(int index, double value){ data[index]= RComplex(value); }
00057 inline void set0(int index, const RComplex& value){ data[index]= value; }
00058 inline RComplex get0(int index)const { return data[index]; }
00059
00060
00061 inline void set(int index, double value){ data1[index]= RComplex(value); }
00062 inline void set(int index, const RComplex& value){ data1[index]= value; }
00063 inline RComplex get(int index)const { return data1[index]; }
00064
00065
00066 void setAll(double value);
00067 void setAll(const RComplex& value);
00068
00069
00070 RComplex vT_v();
00071 RComplex norme2();
00072 RComplex sum();
00073
00074 RComplex mean(){ return sum()/dataSize; }
00075 RComplex sigma();
00076
00077
00078 CVector sqrt();
00079 CVector sqr();
00080
00081
00082
00083 void operator+=(double value);
00084 void operator-=(double value);
00085 void operator*=(double value);
00086 void operator/=(double value);
00087
00088 void operator+=(const RComplex& value);
00089 void operator-=(const RComplex& value);
00090 void operator*=(const RComplex& value);
00091 void operator/=(const RComplex& value);
00092
00093
00094 void operator+=(const CVector& v);
00095 void operator-=(const CVector& v);
00096 void operator*=(const CVector& v);
00097 void operator/=(const CVector& v);
00098
00099
00100 friend RComplex operator*(const CVectorT& vt,const CVector& u);
00101
00102 friend CVector operator+(const CVector& v, double a);
00103 friend CVector operator+(double a, const CVector& v);
00104 friend CVector operator-(const CVector& v, double a);
00105 friend CVector operator-(double a, const CVector& v);
00106 friend CVector operator*(const CVector& v, double a);
00107 friend CVector operator*(double a,const CVector& v);
00108 friend CVector operator/(const CVector& v, double a);
00109
00110 friend CVector operator+(const CVector& v, const RComplex& a);
00111 friend CVector operator+(const RComplex& a, const CVector& v);
00112 friend CVector operator-(const CVector& v, const RComplex& a);
00113 friend CVector operator-(const RComplex& a, const CVector& v);
00114 friend CVector operator*( const CVector& v, const RComplex& a);
00115 friend CVector operator*(const RComplex& a,const CVector& v);
00116 friend CVector operator/(const CVector& v, const RComplex& a);
00117
00118 friend CVector operator+(const CVector& v1, const CVector& v2);
00119 friend CVector operator-(const CVector& v1, const CVector& v2);
00120
00121 void output();
00122 void output(FILE* file);
00123 };
00124
00125 #endif
00126
00127
00128
00129