48 |
|
|
49 |
|
#ifndef MATH_RECTMATRIX_HPP |
50 |
|
#define MATH_RECTMATRIX_HPP |
51 |
< |
|
51 |
> |
#include <math.h> |
52 |
|
#include <cmath> |
53 |
|
#include "Vector.hpp" |
54 |
|
|
68 |
|
RectMatrix() { |
69 |
|
for (unsigned int i = 0; i < Row; i++) |
70 |
|
for (unsigned int j = 0; j < Col; j++) |
71 |
< |
data_[i][j] = 0.0; |
71 |
> |
this->data_[i][j] = 0.0; |
72 |
|
} |
73 |
|
|
74 |
|
/** Constructs and initializes every element of this matrix to a scalar */ |
75 |
|
RectMatrix(Real s) { |
76 |
|
for (unsigned int i = 0; i < Row; i++) |
77 |
|
for (unsigned int j = 0; j < Col; j++) |
78 |
< |
data_[i][j] = s; |
78 |
> |
this->data_[i][j] = s; |
79 |
|
} |
80 |
|
|
81 |
|
RectMatrix(Real* array) { |
82 |
|
for (unsigned int i = 0; i < Row; i++) |
83 |
|
for (unsigned int j = 0; j < Col; j++) |
84 |
< |
data_[i][j] = array[i * Row + j]; |
84 |
> |
this->data_[i][j] = array[i * Row + j]; |
85 |
|
} |
86 |
|
|
87 |
|
/** copy constructor */ |
99 |
|
|
100 |
|
for (unsigned int i = 0; i < Row; i++) |
101 |
|
for (unsigned int j = 0; j < Col; j++) |
102 |
< |
data_[i][j] = m.data_[i][j]; |
102 |
> |
this->data_[i][j] = m.data_[i][j]; |
103 |
|
return *this; |
104 |
|
} |
105 |
|
|
111 |
|
*/ |
112 |
|
Real& operator()(unsigned int i, unsigned int j) { |
113 |
|
//assert( i < Row && j < Col); |
114 |
< |
return data_[i][j]; |
114 |
> |
return this->data_[i][j]; |
115 |
|
} |
116 |
|
|
117 |
|
/** |
122 |
|
*/ |
123 |
|
Real operator()(unsigned int i, unsigned int j) const { |
124 |
|
|
125 |
< |
return data_[i][j]; |
125 |
> |
return this->data_[i][j]; |
126 |
|
} |
127 |
|
|
128 |
|
/** |
132 |
|
void getArray(Real* array) { |
133 |
|
for (unsigned int i = 0; i < Row; i++) { |
134 |
|
for (unsigned int j = 0; j < Col; j++) { |
135 |
< |
array[i * Row + j] = data_[i][j]; |
135 |
> |
array[i * Row + j] = this->data_[i][j]; |
136 |
|
} |
137 |
|
} |
138 |
|
} |
140 |
|
|
141 |
|
/** Returns the pointer of internal array */ |
142 |
|
Real* getArrayPointer() { |
143 |
< |
return &data_[0][0]; |
143 |
> |
return &this->data_[0][0]; |
144 |
|
} |
145 |
|
|
146 |
|
/** |
152 |
|
Vector<Real, Row> v; |
153 |
|
|
154 |
|
for (unsigned int i = 0; i < Row; i++) |
155 |
< |
v[i] = data_[row][i]; |
155 |
> |
v[i] = this->data_[row][i]; |
156 |
|
|
157 |
|
return v; |
158 |
|
} |
165 |
|
void setRow(unsigned int row, const Vector<Real, Row>& v) { |
166 |
|
|
167 |
|
for (unsigned int i = 0; i < Row; i++) |
168 |
< |
data_[row][i] = v[i]; |
168 |
> |
this->data_[row][i] = v[i]; |
169 |
|
} |
170 |
|
|
171 |
|
/** |
177 |
|
Vector<Real, Col> v; |
178 |
|
|
179 |
|
for (unsigned int j = 0; j < Col; j++) |
180 |
< |
v[j] = data_[j][col]; |
180 |
> |
v[j] = this->data_[j][col]; |
181 |
|
|
182 |
|
return v; |
183 |
|
} |
190 |
|
void setColumn(unsigned int col, const Vector<Real, Col>& v){ |
191 |
|
|
192 |
|
for (unsigned int j = 0; j < Col; j++) |
193 |
< |
data_[j][col] = v[j]; |
193 |
> |
this->data_[j][col] = v[j]; |
194 |
|
} |
195 |
|
|
196 |
|
/** |
202 |
|
assert(i < Row && j < Row); |
203 |
|
|
204 |
|
for (unsigned int k = 0; k < Col; k++) |
205 |
< |
std::swap(data_[i][k], data_[j][k]); |
205 |
> |
std::swap(this->data_[i][k], this->data_[j][k]); |
206 |
|
} |
207 |
|
|
208 |
|
/** |
214 |
|
assert(i < Col && j < Col); |
215 |
|
|
216 |
|
for (unsigned int k = 0; k < Row; k++) |
217 |
< |
std::swap(data_[k][i], data_[k][j]); |
217 |
> |
std::swap(this->data_[k][i], this->data_[k][j]); |
218 |
|
} |
219 |
|
|
220 |
|
/** |
227 |
|
bool operator ==(const RectMatrix<Real, Row, Col>& m) { |
228 |
|
for (unsigned int i = 0; i < Row; i++) |
229 |
|
for (unsigned int j = 0; j < Col; j++) |
230 |
< |
if (!equal(data_[i][j], m.data_[i][j])) |
230 |
> |
if (!equal(this->data_[i][j], m.data_[i][j])) |
231 |
|
return false; |
232 |
|
|
233 |
|
return true; |
246 |
|
inline void negate() { |
247 |
|
for (unsigned int i = 0; i < Row; i++) |
248 |
|
for (unsigned int j = 0; j < Col; j++) |
249 |
< |
data_[i][j] = -data_[i][j]; |
249 |
> |
this->data_[i][j] = -this->data_[i][j]; |
250 |
|
} |
251 |
|
|
252 |
|
/** |
256 |
|
inline void negate(const RectMatrix<Real, Row, Col>& m) { |
257 |
|
for (unsigned int i = 0; i < Row; i++) |
258 |
|
for (unsigned int j = 0; j < Col; j++) |
259 |
< |
data_[i][j] = -m.data_[i][j]; |
259 |
> |
this->data_[i][j] = -m.data_[i][j]; |
260 |
|
} |
261 |
|
|
262 |
|
/** |
266 |
|
inline void add( const RectMatrix<Real, Row, Col>& m ) { |
267 |
|
for (unsigned int i = 0; i < Row; i++) |
268 |
|
for (unsigned int j = 0; j < Col; j++) |
269 |
< |
data_[i][j] += m.data_[i][j]; |
269 |
> |
this->data_[i][j] += m.data_[i][j]; |
270 |
|
} |
271 |
|
|
272 |
|
/** |
277 |
|
inline void add( const RectMatrix<Real, Row, Col>& m1, const RectMatrix<Real, Row, Col>& m2 ) { |
278 |
|
for (unsigned int i = 0; i < Row; i++) |
279 |
|
for (unsigned int j = 0; j < Col; j++) |
280 |
< |
data_[i][j] = m1.data_[i][j] + m2.data_[i][j]; |
280 |
> |
this->data_[i][j] = m1.data_[i][j] + m2.data_[i][j]; |
281 |
|
} |
282 |
|
|
283 |
|
/** |
287 |
|
inline void sub( const RectMatrix<Real, Row, Col>& m ) { |
288 |
|
for (unsigned int i = 0; i < Row; i++) |
289 |
|
for (unsigned int j = 0; j < Col; j++) |
290 |
< |
data_[i][j] -= m.data_[i][j]; |
290 |
> |
this->data_[i][j] -= m.data_[i][j]; |
291 |
|
} |
292 |
|
|
293 |
|
/** |
298 |
|
inline void sub( const RectMatrix<Real, Row, Col>& m1, const RectMatrix<Real, Row, Col>& m2){ |
299 |
|
for (unsigned int i = 0; i < Row; i++) |
300 |
|
for (unsigned int j = 0; j < Col; j++) |
301 |
< |
data_[i][j] = m1.data_[i][j] - m2.data_[i][j]; |
301 |
> |
this->data_[i][j] = m1.data_[i][j] - m2.data_[i][j]; |
302 |
|
} |
303 |
|
|
304 |
|
/** |
308 |
|
inline void mul( Real s ) { |
309 |
|
for (unsigned int i = 0; i < Row; i++) |
310 |
|
for (unsigned int j = 0; j < Col; j++) |
311 |
< |
data_[i][j] *= s; |
311 |
> |
this->data_[i][j] *= s; |
312 |
|
} |
313 |
|
|
314 |
|
/** |
319 |
|
inline void mul( Real s, const RectMatrix<Real, Row, Col>& m ) { |
320 |
|
for (unsigned int i = 0; i < Row; i++) |
321 |
|
for (unsigned int j = 0; j < Col; j++) |
322 |
< |
data_[i][j] = s * m.data_[i][j]; |
322 |
> |
this->data_[i][j] = s * m.data_[i][j]; |
323 |
|
} |
324 |
|
|
325 |
|
/** |
329 |
|
inline void div( Real s) { |
330 |
|
for (unsigned int i = 0; i < Row; i++) |
331 |
|
for (unsigned int j = 0; j < Col; j++) |
332 |
< |
data_[i][j] /= s; |
332 |
> |
this->data_[i][j] /= s; |
333 |
|
} |
334 |
|
|
335 |
|
/** |
340 |
|
inline void div( Real s, const RectMatrix<Real, Row, Col>& m ) { |
341 |
|
for (unsigned int i = 0; i < Row; i++) |
342 |
|
for (unsigned int j = 0; j < Col; j++) |
343 |
< |
data_[i][j] = m.data_[i][j] / s; |
343 |
> |
this->data_[i][j] = m.data_[i][j] / s; |
344 |
|
} |
345 |
|
|
346 |
|
/** |
385 |
|
|
386 |
|
for (unsigned int i = 0; i < Row; i++) |
387 |
|
for (unsigned int j = 0; j < Col; j++) |
388 |
< |
result(j, i) = data_[i][j]; |
388 |
> |
result(j, i) = this->data_[i][j]; |
389 |
|
|
390 |
|
return result; |
391 |
|
} |