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

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

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