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();}
106 for(
int i =0; i < n; i++)
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++)
231 template <
typename S>
235 for(
unsigned i = 0; i <
size(); i++)
242 template <
typename S>
259 for(
int i =0; i <
size();i++)
262 return (T)sqrt((
double)n);
272 for(
unsigned i = 0; i <
size();++i)
336 for(
unsigned i = 0; i <
size();i++)
337 r(i) =
_data[i]*v(i);
344 assert(m.nrows() ==
size());
348 for(
unsigned i = 0; i <
size(); i++)
349 for(
unsigned j = 0; j < m.ncols();j++)
359 for(
unsigned i = 0; i <
size();i++)
369template <
typename T,
typename S>
370const mat<T> operator*(
const mat<T>& m,
const diag_mat<S>& s)
372 assert(m.ncols() == s.size());
373 mat<T> r(m.nrows(),s.size());
374 for(
unsigned i = 0; i < m.nrows(); i++)
375 for(
unsigned j = 0; j < s.size();j++)
376 r(i,j) = s(j)*m(i,j);
383const diag_mat<T> operator*(
const T& s,
const diag_mat<T>& m)
389template <
typename T,
typename S>
390const diag_mat<T> operator*(
const diag_mat<S>& s,
const diag_mat<T>& m)
392 assert(m.size() == s.size());
394 diag_mat<T> r(s.size());
396 for(
unsigned i = 0; i < s.size(); i++)
403mat<T> operator*(
const perm_mat& p,
const diag_mat<T>& m)
411mat<T> operator*(
const diag_mat<T>& m,
const perm_mat& p)
419const mat<T> operator*(
const diag_mat<T>& s,
const mat<T>& m)
421 assert(m.nrows() == s.size());
423 mat<T> r(s.size(),m.ncols());
425 for(
unsigned i = 0; i < s.size(); i++)
426 for(
unsigned j = 0; j < m.ncols();j++)
427 r(i,j) = s(i)*m(i,j);
434const up_tri_mat<T> operator*(
const up_tri_mat<T>& m,
const diag_mat<T>& s)
436 assert(m.ncols() == s.size());
437 up_tri_mat<T> r(s.size());
438 for(
unsigned i = 0; i < m.nrows(); i++)
439 for(
unsigned j = i; j < s.size();j++)
440 r(i,j) = s(j)*m(i,j);
451std::ostream&
operator<<(std::ostream& out,
const diag_mat<T>& m)
454 for (
int i=0;i<(int)m.size();++i)
462std::istream& operator>>(std::istream& in, diag_mat<T>& m)
464 assert(m.size() > 0);
465 for (
int i=0;i<(int)m.size();++i)
A matrix type (full column major storage) The matrix can be loaded directly into OpenGL without need ...
unsigned ncols() const
number of columns
void resize(unsigned rows, unsigned cols)
resize the matrix, the content of the matrix will be destroyed
void zeros()
set zero matrix
unsigned nrows() const
number of rows
unsigned dim() const
number of elements
std::ostream & operator<<(std::ostream &os, const vr_device_info &di)
stream out operator for device infos
A diagonal matrix type which internally stores the elements on the main diagonal in a vector.
diag_mat(unsigned n, const T &c)
creates nxn diagonal matrix and set all diagonal elements to c
diag_mat< T > operator+(const diag_mat< T > &d) const
addition of diagonal matrix
bool is_square()
returns true because diagonal matrices are always square
diag_mat< T > operator*(const T &s) const
multiplication with scalar s
unsigned ncols() const
number of columns
diag_mat< T > sub_mat(unsigned top_left, unsigned size) const
create sub diagonal matrix d(top_left)...d(top_left+size)
void zero()
set zero matrix
const T & operator()(unsigned i) const
const access to the ith diagonal element
diag_mat(const diag_mat< T > &m)
copy constructor
T * data()
cast into array of element type
T frobenius_norm() const
returns the frobenius norm of matrix m
diag_mat< T > & operator+=(const diag_mat< T > &d)
in place addition of diagonal matrix
diag_mat< T > & operator-=(const diag_mat< T > &d)
in place subtraction of diagonal matrix
unsigned size() const
size of storage
diag_mat< T > operator-(const diag_mat< T > &d) const
subtraction of diagonal matrix
diag_mat(const mat< T > &m)
creates a diagonal matrix and set the diagonal vector to diagonal entries of m
const T & operator[](unsigned i) const
const access to the ith diagonal element
void identity(unsigned dim)
set dim x dim identity matrix
const T * data() const
cast into array of const element type
virtual ~diag_mat()
destructor
diag_mat()
standard constructor
diag_mat(const vec< T > &dv)
creates a diagonal matrix and set the diagonal vector to dv
diag_mat< T > & operator*=(const T &s)
in place multiplication with scalar s
diag_mat(unsigned n)
creates nxn diagonal matrix
void identity()
set diagonal matrix to identity
void exchange_diagonal_elements(unsigned i, unsigned j)
exchange diagonal elements i and j
vec< T > _data
pointer to data storage
diag_mat< T > & operator=(const diag_mat< T > &m)
assignment of a matrix with the same element type
vec< T > operator*(const vec< T > &v) const
multiplication with vector
const up_tri_mat< T > operator*(const up_tri_mat< T > &m)
matrix multiplication of matrix m by a diagonal matrix s
void zeros()
fills all diagonal entries with zero
void fill(const T &c)
fills all diagonal entries with c
unsigned nrows() const
number of rows