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

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

Creation module DPC/NTools Reza 09/04/99

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