Templates -- Meow  1.2.9
A C++ template contains kinds of interesting classes and functions
Vector.h
Go to the documentation of this file.
1 #ifndef math_Vector_H__
2 #define math_Vector_H__
3 
4 #include "../Self.h"
5 #include "Matrix.h"
6 
7 #include <vector>
8 
9 #include <cmath>
10 
11 namespace meow {
12 
18 template<class Scalar>
19 class Vector {
20 public:
23 private:
24  Matrix<Scalar> matrix_;
25 public:
31  Vector() {
32  }
33 
41  Vector(Vector const& v): matrix_(v.matrix_) {
42  }
43 
51  Vector(Matrix<Scalar> const& m): matrix_(m.col(0)) {
52  }
53 
61  Vector(std::vector<Scalar> const& v): matrix_(v.size(), 1, Scalar(0)) {
62  for (size_t i = 0, I = v.size(); i < I; i++) {
63  matrix_.entry(i, 0, v[i]);
64  }
65  }
66 
75  Vector(size_t d, Scalar const& e): matrix_(d, 1, e) {
76  }
77 
79  ~Vector() {
80  }
81 
83  Vector& copyFrom(Vector const& v) {
84  matrix_.copyFrom(v.matrix_);
85  return *this;
86  }
87 
90  matrix_.referenceFrom(v.matrix_);
91  return *this;
92  }
93 
96  return matrix_;
97  }
98 
100  size_t dimension() const {
101  return matrix_.rows();
102  }
103 
111  size_t dimension(size_t d, Scalar const& s) {
112  matrix_.rows(d, s);
113  return dimension();
114  }
115 
120  bool valid() const {
121  return (dimension() > 0);
122  }
123 
125  Scalar scalar(size_t i) const {
126  return matrix_.entry(i, 0);
127  }
128 
135  Scalar scalar(size_t i, Scalar const& s) {
136  matrix_.entry(i, 0, s);
137  return scalar(i);
138  }
139 
141  ScalarRef scalarGet(size_t i) {
142  return matrix_.entryGet(i);
143  }
144 
152  void scalars(size_t i, size_t j, Scalar const& s) {
153  for (size_t it = i; it <= j; ++it) {
154  matrix_.entry(it, 0, s);
155  }
156  }
157 
159  Vector subVector(size_t i, size_t j) {
160  return Vector(matrix_.subMatrix(i, 0, j, 0));
161  }
162 
164  Vector positive() const {
165  return *this;
166  }
167 
169  Vector negative() const {
170  return Vector(matrix_.negative());
171  }
172 
174  Vector add(Vector const& v) const {
175  return Vector(matrix_.add(v.matrix_));
176  }
177 
179  Vector sub(Vector const& v) const {
180  return Vector(matrix_.sub(v.matrix_));
181  }
182 
184  Vector mul(Scalar const& s) const {
185  return Vector(matrix_.mul(s));
186  }
187 
189  Vector div(Scalar const& s) const {
190  return Vector(matrix_.div(s));
191  }
192 
194  Scalar dot(Vector const& v) const {
195  return matrix_.transpose().mul(v.matrix_).entry(0, 0);
196  }
197 
199  Scalar length() const {
200  return Scalar(sqrt((double)length2()));
201  }
202 
204  Scalar length2() const {
205  return dot(*this);
206  }
207 
209  Vector normalize() const {
210  return div(length());
211  }
212 
215  copyFrom(normalize());
216  return *this;
217  }
218 
220  Vector& operator=(Vector const& v) {
221  return copyFrom(v);
222  }
223 
225  Scalar operator()(size_t i) const {
226  return scalar(i);
227  }
228 
230  Vector operator+() const {
231  return positive();
232  }
233 
235  Vector operator-() const {
236  return negative();
237  }
238 
240  Vector operator+(Vector const& v) const {
241  return add(v);
242  }
243 
245  Vector operator-(Vector const& v) const {
246  return sub(v);
247  }
248 
250  Scalar operator*(Vector const& v) const {
251  return dot(v);
252  }
253 
255  Vector operator*(Scalar const& s) const {
256  return mul(s);
257  }
258 
260  Vector operator/(Scalar const& s) const {
261  return div(s);
262  }
263 };
264 
265 } // meow
266 
267 #endif // math_Vector_H__
Vector operator+() const
same as positive()
Definition: Vector.h:230
size_t dimension() const
return dimension
Definition: Vector.h:100
Matrix & referenceFrom(Matrix const &m)
reference
Definition: Matrix.h:109
size_t rows() const
Return number of rows.
Definition: Matrix.h:128
Scalar length() const
sqrt of length2
Definition: Vector.h:199
ScalarRef scalarGet(size_t i)
return i -th scalar with non-constant type
Definition: Vector.h:141
Scalar length2() const
same as (*this).dot(*this)
Definition: Vector.h:204
Vector mul(Scalar const &s) const
return (*this)*s , where s is a scalar
Definition: Vector.h:184
Matrix div(Entry const &s) const
return (*this) / s. s is a scalar
Definition: Matrix.h:346
Vector operator-() const
same as negative()
Definition: Vector.h:235
Vector(Vector const &v)
constructor
Definition: Vector.h:41
~Vector()
destructor
Definition: Vector.h:79
Vector sub(Vector const &v) const
return (*this)-v
Definition: Vector.h:179
size_t dimension(size_t d, Scalar const &s)
resize the dimension
Definition: Vector.h:111
Matrix subMatrix(size_t rFirst, size_t rLast, size_t cFirst, size_t cLast) const
Return a rLast-rFirst+1 x cLast-cFirst+1 matrix.
Definition: Matrix.h:257
Matrix< Scalar >::EntryRefK ScalarRefK
Definition: Vector.h:21
Vector & copyFrom(Vector const &v)
copy from ...
Definition: Vector.h:83
Matrix & copyFrom(Matrix const &m)
copy
Definition: Matrix.h:96
vector
Definition: Vector.h:19
Vector & operator=(Vector const &v)
same as copyFrom
Definition: Vector.h:220
Vector subVector(size_t i, size_t j)
subvector form i-th to j-th
Definition: Vector.h:159
Scalar operator*(Vector const &v) const
same as dot(v)
Definition: Vector.h:250
Vector(std::vector< Scalar > const &v)
constructor
Definition: Vector.h:61
Vector(size_t d, Scalar const &e)
constructor
Definition: Vector.h:75
Matrix transpose() const
return itself's transpose matrix
Definition: Matrix.h:434
Vector operator+(Vector const &v) const
same as add(v)
Definition: Vector.h:240
Vector positive() const
return +(*this)
Definition: Vector.h:164
Scalar scalar(size_t i) const
return i -th scalar
Definition: Vector.h:125
Matrix mul(Matrix const &m) const
return (*this) times m.
Definition: Matrix.h:326
EntryRef entryGet(size_t r, size_t c)
Get the entry at r x c.
Definition: Matrix.h:222
Scalar operator()(size_t i) const
same as entry(i)
Definition: Vector.h:225
Matrix sub(Matrix const &m) const
return (*this) - m.
Definition: Matrix.h:313
matrix
Definition: Matrix.h:18
Vector(Matrix< Scalar > const &m)
constructor
Definition: Vector.h:51
Entry entry(size_t r, size_t c) const
Access the entry at r x c.
Definition: Matrix.h:211
Matrix negative() const
return -(*this)
Definition: Matrix.h:288
Vector negative() const
return -(*this)
Definition: Vector.h:169
Vector operator-(Vector const &v) const
same as sub(v)
Definition: Vector.h:245
Vector div(Scalar const &s) const
return (*this)/s , where s is a scalar
Definition: Vector.h:189
Vector add(Vector const &v) const
return (*this)+v
Definition: Vector.h:174
Vector operator*(Scalar const &s) const
same as mul(s)
Definition: Vector.h:255
Vector & normalized()
Let itself be normalize form.
Definition: Vector.h:214
Matrix< Scalar >::EntryRef ScalarRef
Definition: Vector.h:22
bool valid() const
Return whether dimension>0 is true or not.
Definition: Vector.h:120
Vector operator/(Scalar const &s) const
same as div(s)
Definition: Vector.h:260
Matrix< Scalar > matrix() const
Return a dimension x 1 matrix form of it.
Definition: Vector.h:95
Vector & referenceFrom(Vector const &v)
reference from ...
Definition: Vector.h:89
void scalars(size_t i, size_t j, Scalar const &s)
change i -th to j -th scalars
Definition: Vector.h:152
Scalar dot(Vector const &v) const
dot
Definition: Vector.h:194
Vector()
constructor
Definition: Vector.h:31
Matrix add(Matrix const &m) const
return (*this) + m.
Definition: Matrix.h:300
Scalar scalar(size_t i, Scalar const &s)
change i -th scalar
Definition: Vector.h:135
Vector normalize() const
return a normalize form of itself
Definition: Vector.h:209