QVector.hh
Go to the documentation of this file.00001
00015 #ifndef __QVECTOR_HH_
00016 #define __QVECTOR_HH_
00017
00018 #include <gsl/gsl_vector.h>
00019 #include <iostream>
00020 #include <string>
00021 #include "QObject.hh"
00022
00023 Q_BEGIN_NAMESPACE
00024
00025 class QMatrix;
00026
00027 class QVector : public QObject {
00028 public:
00032 QVector();
00037 QVector(size_t size);
00042 QVector(const QVector& orig);
00049 QVector(const QVector& orig, size_t size, size_t ioff = 0);
00056 QVector(const QMatrix& mat);
00060 virtual ~QVector();
00065 inline size_t Size() const {return fMathVec ? fMathVec->size : 0;}
00070 void Initialize(double val = 0);
00076 double& operator[](size_t i);
00077 inline double& operator()(size_t i){return operator[](i);}
00085 double operator[] (size_t i) const;
00086 inline double operator() (size_t i) const { return operator[](i);}
00091 const QVector& operator = (const QVector& orig);
00092
00096 QVector operator-() const;
00104 const QVector& Mult(const QVector& other);
00112 const QVector& Div(const QVector& other);
00118 const QVector& operator*=(double t);
00124 const QVector & operator/=(double v);
00130 const QVector & operator+=(const QVector&v);
00136 const QVector & operator-=(const QVector&v);
00142 double operator*(const QVector& other) const;
00148 QVector operator+(const QVector& other) const;
00154 QVector operator-(const QVector& other) const;
00160 QVector operator*(double t) const;
00166 QVector operator/(double t) const;
00173 QMatrix T();
00179 const QVector& Shift(int nstep);
00187 const QVector& ShiftReal(double fstep);
00191 const QVector& Differentiate();
00192
00194 QVector Derivative2P(const double delta = 1.) const;
00196 QVector Derivative2PF(const double delta = 1.) const;
00197
00199 QVector Derivative3P(const double delta = 1.) const;
00200
00202 QVector Derivative3PB(const double delta = 1.) const;
00204 QVector Derivative3PF(const double delta = 1.) const;
00205
00207 QVector Derivative5P(const double delta = 1.) const;
00208
00210 QVector Derivative5PB(const double delta = 1.) const;
00211
00213 QVector DerivativeEulero(const double delta = 1.) const;
00218 const QVector& Sort(bool asc=true);
00223 const QVector& Integrate(double constTerm = 0);
00228 void Resize(size_t newsize);
00235 void Append(double val);
00241 double Norma() const;
00245 double Sum(size_t nelem, size_t first = 0) const;
00251 double GetRMS(size_t nelem, size_t first = 0) const;
00255 double GetMedian() const;
00259 double GetMedianAbsoluteDeviation() const;
00263 inline double GetMax() const {return gsl_vector_max(fMathVec);}
00267 inline double GetMin() const {return gsl_vector_min(fMathVec);}
00271 int GetMaxIndex(size_t nelem, size_t first) const;
00275 int GetMinIndex(size_t nelem, size_t first) const;
00279 inline size_t GetMaxIndex() const {return gsl_vector_max_index(fMathVec);}
00283 inline size_t GetMinIndex() const {return gsl_vector_min_index(fMathVec);}
00287 double* GetArray() const;
00294 const double* GetConstArray() const {return fMathVec ? fMathVec->data : NULL;}
00306 void SetArray(const double *orig, size_t size);
00310 void Clear() {Resize(0);}
00314 void Consolidate();
00318 std::string sqlString() const;
00319
00320 protected:
00325 QVector (const gsl_vector* vec);
00326 QVector(const QVector& orig, bool dataOwner);
00332 void SetMathRange(size_t start, size_t size);
00333
00335 gsl_vector* fVec;
00337 gsl_vector* fMathVec;
00339 bool fDataOwner;
00340
00341 private:
00342 void InitCopy(const QVector& orig, bool copyData);
00343
00344 friend class QVectorView;
00345 friend class QVectorConstView;
00346 friend class QMatrix;
00347 };
00348
00349
00350 QVector operator*(double t, const QVector&v);
00351
00352 std::ostream& operator<<(std::ostream&s,const QVector&v);
00353
00354 Q_END_NAMESPACE
00355
00356 #endif