5 #include "up_tri_mat.h"
22 typedef typename vec<T>::value_type value_type;
23 typedef typename vec<T>::reference reference;
24 typedef typename vec<T>::const_reference const_reference;
25 typedef typename vec<T>::pointer pointer;
26 typedef typename vec<T>::const_pointer const_pointer;
28 typedef typename vec<T>::iterator iterator;
29 typedef typename vec<T>::const_iterator const_iterator;
30 typedef typename vec<T>::reverse_iterator reverse_iterator;
31 typedef typename vec<T>::const_reverse_iterator const_reverse_iterator;
33 typedef iterator diag_iterator;
34 typedef const diag_iterator const_diag_iterator;
35 typedef std::reverse_iterator<diag_iterator> reverse_diag_iterator;
36 typedef std::reverse_iterator<const_diag_iterator> const_reverse_diag_iterator;
38 iterator begin(){
return _data.begin();}
39 iterator end(){
return _data.end();}
40 const_iterator begin()
const{
return _data.begin();}
41 const_iterator end()
const{
return _data.end();}
42 reverse_iterator rbegin(){
return _data.rbegin();}
43 reverse_iterator rend(){
return _data.rend();}
44 const_reverse_iterator rbegin()
const{
return _data.rbegin();}
45 const_reverse_iterator rend()
const {
return _data.rend();}
47 diag_iterator diag_begin(){
return _data.begin();}
48 diag_iterator diag_end(){
return _data.end();}
49 const_diag_iterator diag_begin()
const{
return _data.begin();}
50 const_diag_iterator diag_end()
const{
return _data.end();}
51 reverse_diag_iterator diag_rbegin(){
return _data.rbegin();}
52 reverse_diag_iterator diag_rend(){
return _data.rend();}
53 const_reverse_diag_iterator diag_rbegin()
const{
return _data.rbegin();}
54 const_reverse_diag_iterator diag_rend()
const {
return _data.rend();}
104 int n = std::min(m.ncols(),m.nrows());
106 for(
int i =0; i < n; i++)
130 operator const T*()
const
132 return (
const T*)
_data;
139 for (
unsigned int i=0; i<
size; ++i)
140 D(i) = (*this)(i+top_left);
149 for(
unsigned i =0; i <
size();i++)
157 void resize(
unsigned n)
171 for(
unsigned i=0;i <
size();i++)
219 template <
typename S>
223 for(
unsigned i = 0; i <
size(); i++)
230 template <
typename S>
250 for(
int i =0; i <
size();i++)
253 return (T)sqrt((
double)n);
263 for(
unsigned i = 0; i <
size();++i)
325 assert(v.dim() ==
ncols());
327 for(
unsigned i = 0; i <
size();i++)
328 r(i) =
_data[i]*v(i);
335 assert(m.nrows() ==
size());
337 up_tri_mat<T> r(
size());
339 for(
unsigned i = 0; i <
size(); i++)
340 for(
unsigned j = 0; j < m.ncols();j++)
350 for(
unsigned i = 0; i <
size();i++)
360 template <
typename T,
typename S>
361 const mat<T> operator*(
const mat<T>& m,
const diag_mat<S>& s)
363 assert(m.ncols() == s.size());
364 mat<T> r(m.nrows(),s.size());
365 for(
unsigned i = 0; i < m.nrows(); i++)
366 for(
unsigned j = 0; j < s.size();j++)
367 r(i,j) = s(j)*m(i,j);
373 template <
typename T>
380 template <
typename T,
typename S>
383 assert(m.size() == s.
size());
387 for(
unsigned i = 0; i < s.
size(); i++)
409 template <
typename T>
412 assert(m.nrows() == s.
size());
416 for(
unsigned i = 0; i < s.
size(); i++)
417 for(
unsigned j = 0; j < m.ncols();j++)
418 r(i,j) = s(i)*m(i,j);
424 template <
typename T>
425 const up_tri_mat<T> operator*(
const up_tri_mat<T>& m,
const diag_mat<T>& s)
427 assert(m.ncols() == s.
size());
428 up_tri_mat<T> r(s.
size());
429 for(
unsigned i = 0; i < m.nrows(); i++)
430 for(
unsigned j = i; j < s.
size();j++)
431 r(i,j) = s(j)*m(i,j);
441 template <
typename T>
445 for (
int i=0;i<(int)m.size();++i)
452 template <
typename T>
455 assert(m.size() > 0);
456 for (
int i=0;i<(int)m.size();++i)
unsigned size() const
size of storage
Definition: diag_mat.h:57
diag_mat()
standard constructor
Definition: diag_mat.h:75
T frobenius_norm() const
returns the frobenius norm of matrix m
Definition: diag_mat.h:247
vec< T > operator*(const vec< T > &v) const
multiplication with vector
Definition: diag_mat.h:323
Definition: perm_mat.h:13
diag_mat(const vec< T > &dv)
creates a diagonal matrix and set the diagonal vector to dv
Definition: diag_mat.h:97
void identity(unsigned dim)
set dim x dim identity matrix
Definition: diag_mat.h:260
vec< T > _data
pointer to data storage
Definition: diag_mat.h:20
diag_mat< T > & operator*=(const T &s)
in place multiplication with scalar s
Definition: diag_mat.h:290
A column vector class.
Definition: fvec.h:13
virtual ~diag_mat()
destructor
Definition: diag_mat.h:119
const up_tri_mat< T > operator*(const up_tri_mat< T > &m)
matrix multiplication of matrix m by a diagonal matrix s
Definition: diag_mat.h:333
diag_mat(unsigned n)
creates nxn diagonal matrix
Definition: diag_mat.h:80
std::ostream & operator<<(std::ostream &out, const diag_mat< T > &m)
output of a diagonal matrix onto an ostream
Definition: diag_mat.h:442
diag_mat< T > & operator+=(const diag_mat< T > &d)
in place addition of diagonal matrix
Definition: diag_mat.h:274
Definition: diag_mat.h:16
const T & operator()(unsigned i) const
const access to the ith diagonal element
Definition: diag_mat.h:189
diag_mat< T > & operator=(const diag_mat< T > &m)
assignment of a matrix with the same element type
Definition: diag_mat.h:212
unsigned ncols() const
number of columns
Definition: diag_mat.h:69
std::istream & operator>>(std::istream &in, diag_mat< T > &m)
input of a diagonal matrix from an istream
Definition: diag_mat.h:453
unsigned nrows() const
number of rows
Definition: diag_mat.h:63
diag_mat(const diag_mat< T > &m)
copy constructor
Definition: diag_mat.h:111
diag_mat< T > sub_mat(unsigned top_left, unsigned size) const
create sub diagonal matrix d(top_left)...d(top_left+size)
Definition: diag_mat.h:136
void zeros()
fills all diagonal entries with zero
Definition: diag_mat.h:177
diag_mat< T > & operator-=(const diag_mat< T > &d)
in place subtraction of diagonal matrix
Definition: diag_mat.h:282
diag_mat(const mat< T > &m)
creates a diagonal matrix and set the diagonal vector to diagonal entries of m
Definition: diag_mat.h:102
diag_mat< T > operator+(const diag_mat< T > &d) const
addition of diagonal matrix
Definition: diag_mat.h:305
void fill(const T &c)
fills all diagonal entries with c
Definition: diag_mat.h:169
void zero()
set zero matrix
Definition: diag_mat.h:268
diag_mat(unsigned n, const T &c)
creates nxn diagonal matrix and set all diagonal elements to c
Definition: diag_mat.h:85
the cgv namespace
Definition: vr_calib.cxx:9
bool is_square()
returns true because diagonal matrices are always square
Definition: diag_mat.h:202
void exchange_diagonal_elements(unsigned i, unsigned j)
exchange diagonal elements i and j
Definition: diag_mat.h:183
diag_mat< T > operator-(const diag_mat< T > &d) const
subtraction of diagonal matrix
Definition: diag_mat.h:313
void identity()
set diagonal matrix to identity
Definition: diag_mat.h:163
diag_mat< T > operator*(const T &s) const
multiplication with scalar s
Definition: diag_mat.h:297