source: Sophya/trunk/SophyaLib/NTools/cvector.h@ 552

Last change on this file since 552 was 552, checked in by ansari, 26 years ago

namespace changed to SOPHYA cmv 5/11/99

File size: 2.7 KB
RevLine 
[220]1// This may look like C code, but it is really -*- C++ -*-
2
3#ifndef VECTOR_SEEN
4#define VECTOR_SEEN
5#include "matrix.h"
6
[552]7namespace SOPHYA {
[307]8 class GeneralFit;
9 template <class T> class TVector;
10}
[220]11
12// <summary> Vecteur colonne pour operations matricielles </summary>
13// Vecteur colonne, en fait une matrice avec une seule colonne, pour faire
14// des operations matricielles.
[508]15class OVector : public OMatrix {
[303]16 friend class TVector<r_8>;
[220]17public:
18 // Constructeur, n = nombre d'elements.
[508]19 EXPLICIT OVector(int n=1);
[220]20 // Constructeur, a partir des valeurs. Pas d'allocation.
[508]21 OVector(int n, double* values);
[220]22 // Constructeur par copie
[508]23 OVector(const OVector& v);
[220]24 // Constructeur par "copie" a partir d'une matrice, qui doit avoir une colonne
25 // <thrown> sizeMismatchErr </thrown>
[508]26 OVector(const OMatrix& a);
[303]27 // Constructeur par copie a partir d'un TVector<r_8>
[508]28 OVector(const TVector<r_8>& v);
[220]29
30 // Construction automatique pour PPF
31 // <group>
32 enum {classId = ClassId_Vector};
33 int_4 ClassId() const { return classId; }
[508]34 static PPersist* Create() {return new OVector(1);}
[220]35 // </group>
36
37 // Change la taille du vecteur. Reallocation physique seulement si
38 // pas assez de place, ou forcee si force=true
39 void Realloc(int n, bool force=false);
40
[508]41 OVector& operator = (const OVector& v);
42 OVector& operator = (double x);
[220]43
44 // Acces aux elements
45 // <group>
46 double& operator()(int n);
47 double const& operator()(int n) const;
48 // </group>
49
50 // produit scalaire
51 // <group>
[508]52 friend double operator* (const OVector& v1, const OVector& v2);
53 friend OVector operator* (const OVector& v, double b)
54 {return OVector(((OMatrix const&)v) * b);}
[220]55 // </group>
56 // produit matrice*vecteur
[508]57 friend OVector operator* (const OMatrix& a, const OVector& b)
58 {return OVector(a * ((OMatrix const&) (b)));}
[220]59
60 // Nombre de lignes du vecteur
61 int NElts() const {return nr;}
62
63 // Resolution du systeme A*C = B
[508]64 friend double LinSolve(const OMatrix& a, const OVector& b, OVector& c);
[220]65
66 // Resolution du systeme A*C = B, avec C retourne dans B
[508]67 friend double LinSolveInPlace(OMatrix& a, OVector& b);
[220]68
69 // Residus et fonction fittees.
[508]70 OVector FitResidus(GeneralFit& gfit,double xorg=0.,double dx=1.);
71 OVector FitFunction(GeneralFit& gfit,double xorg=0.,double dx=1.);
[220]72
73};
74
75
[508]76inline OVector& OVector::operator = (const OVector& v)
77{ OMatrix::operator =(v); return *this; }
[220]78
79
[508]80inline double const& OVector::operator()(int n) const
[220]81{
82#ifdef RGCHECK
83 if (n<0 || n>=ndata) THROW(rangeCheckErr);
84#endif
85 return data[n];
86}
87
88
[508]89inline double& OVector::operator()(int n)
[220]90{
91#ifdef RGCHECK
92 if (n<0 || n>=ndata) THROW(rangeCheckErr);
93#endif
94 return data[n];
95}
96
[508]97inline void OVector::Realloc(int n, bool force)
98{ OMatrix::Realloc(n,1,force);}
[220]99
100
101#endif /* VECTOR_SEEN */
Note: See TracBrowser for help on using the repository browser.