CPPLapack
 All Classes Files Functions Variables Friends Pages
Public Member Functions | Public Attributes | Friends | List of all members
dgematrix Class Reference

Real Double-precision General Dence Matrix Class. More...

#include <dgematrix.hpp>

Public Member Functions

 dgematrix ()
 
 dgematrix (const dgematrix &)
 
 dgematrix (const _dgematrix &)
 
 dgematrix (const CPPL_INT &, const CPPL_INT &)
 
 dgematrix (const char *)
 
 ~dgematrix ()
 
_zgematrix to_zgematrix () const
 
double & operator() (const CPPL_INT &, const CPPL_INT &)
 
double operator() (const CPPL_INT &, const CPPL_INT &) const
 
dgematrixset (const CPPL_INT &, const CPPL_INT &, const double &)
 
void write (const char *) const
 
void read (const char *)
 
void clear ()
 
dgematrixzero ()
 
dgematrixidentity ()
 
void chsign ()
 
void copy (const dgematrix &)
 
void shallow_copy (const _dgematrix &)
 
dgematrixresize (const CPPL_INT &, const CPPL_INT &)
 
_drovector row (const CPPL_INT &) const
 
_dcovector col (const CPPL_INT &) const
 
CPPL_INT dgesv (dgematrix &)
 
CPPL_INT dgesv (dcovector &)
 
CPPL_INT dgels (dgematrix &)
 
CPPL_INT dgels (dcovector &)
 
CPPL_INT dgels (dgematrix &, drovector &)
 
CPPL_INT dgels (dcovector &, double &)
 
CPPL_INT dgelss (dcovector &, dcovector &, CPPL_INT &, const double)
 
CPPL_INT dgelss (dgematrix &, dcovector &, CPPL_INT &, const double)
 
CPPL_INT dgelsd (dcovector &, dcovector &, CPPL_INT &, const double)
 
CPPL_INT dgeev (std::vector< double > &, std::vector< double > &)
 
CPPL_INT dgeev (zcovector &)
 
CPPL_INT dgeev (std::vector< double > &, std::vector< double > &, std::vector< dcovector > &, std::vector< dcovector > &)
 
CPPL_INT dgeev (std::vector< double > &, std::vector< double > &, std::vector< drovector > &, std::vector< drovector > &)
 
CPPL_INT dggev (dgematrix &, std::vector< double > &, std::vector< double > &)
 
CPPL_INT dggev (dgematrix &, std::vector< double > &, std::vector< double > &, std::vector< dcovector > &, std::vector< dcovector > &)
 
CPPL_INT dggev (dgematrix &, std::vector< double > &, std::vector< double > &, std::vector< drovector > &, std::vector< drovector > &)
 
CPPL_INT dgesvd (dgbmatrix &)
 
CPPL_INT dgesvd (dcovector &, dgematrix &, dgematrix &)
 
CPPL_INT dgglse (dgematrix &, dcovector &, dcovector &, dcovector &)
 
dgematrixoperator= (const dgematrix &)
 
dgematrixoperator= (const _dgematrix &)
 
dgematrixoperator+= (const dgematrix &)
 
dgematrixoperator+= (const _dgematrix &)
 
dgematrixoperator+= (const dsymatrix &)
 
dgematrixoperator+= (const _dsymatrix &)
 
dgematrixoperator+= (const dgbmatrix &)
 
dgematrixoperator+= (const _dgbmatrix &)
 
dgematrixoperator+= (const dgsmatrix &)
 
dgematrixoperator+= (const _dgsmatrix &)
 
dgematrixoperator+= (const dssmatrix &)
 
dgematrixoperator+= (const _dssmatrix &)
 
dgematrixoperator-= (const dgematrix &)
 
dgematrixoperator-= (const _dgematrix &)
 
dgematrixoperator-= (const dsymatrix &)
 
dgematrixoperator-= (const _dsymatrix &)
 
dgematrixoperator-= (const dgbmatrix &)
 
dgematrixoperator-= (const _dgbmatrix &)
 
dgematrixoperator-= (const dgsmatrix &)
 
dgematrixoperator-= (const _dgsmatrix &)
 
dgematrixoperator-= (const dssmatrix &)
 
dgematrixoperator-= (const _dssmatrix &)
 
dgematrixoperator*= (const dgematrix &)
 
dgematrixoperator*= (const _dgematrix &)
 
dgematrixoperator*= (const dsymatrix &)
 
dgematrixoperator*= (const _dsymatrix &)
 
dgematrixoperator*= (const dgbmatrix &)
 
dgematrixoperator*= (const _dgbmatrix &)
 
dgematrixoperator*= (const dgsmatrix &)
 
dgematrixoperator*= (const _dgsmatrix &)
 
dgematrixoperator*= (const dssmatrix &)
 
dgematrixoperator*= (const _dssmatrix &)
 
dgematrixoperator*= (const double &)
 
dgematrixoperator/= (const double &)
 

Public Attributes

CPPL_INT m
 matrix row size More...
 
CPPL_INT n
 matrix column size More...
 
double * array
 1D array to store matrix data More...
 
double ** darray
 array of pointers of column head addresses More...
 

Friends

std::ostream & operator<< (std::ostream &, const dgematrix &)
 
void swap (dgematrix &, dgematrix &)
 
_dgematrix _ (dgematrix &)
 
_dgematrix t (const dgematrix &)
 
_dgematrix i (const dgematrix &)
 
void idamax (CPPL_INT &, CPPL_INT &, const dgematrix &)
 
double damax (const dgematrix &)
 
const dgematrixoperator+ (const dgematrix &)
 
_dgematrix operator- (const dgematrix &)
 
_dgematrix operator+ (const dgematrix &, const dgematrix &)
 
_dgematrix operator+ (const dgematrix &, const _dgematrix &)
 
_dgematrix operator+ (const dgematrix &, const dsymatrix &)
 
_dgematrix operator+ (const dgematrix &, const _dsymatrix &)
 
_dgematrix operator+ (const dgematrix &, const dgbmatrix &)
 
_dgematrix operator+ (const dgematrix &, const _dgbmatrix &)
 
_dgematrix operator+ (const dgematrix &, const dgsmatrix &)
 
_dgematrix operator+ (const dgematrix &, const _dgsmatrix &)
 
_dgematrix operator+ (const dgematrix &, const dssmatrix &)
 
_dgematrix operator+ (const dgematrix &, const _dssmatrix &)
 
_dgematrix operator- (const dgematrix &, const dgematrix &)
 
_dgematrix operator- (const dgematrix &, const _dgematrix &)
 
_dgematrix operator- (const dgematrix &, const dsymatrix &)
 
_dgematrix operator- (const dgematrix &, const _dsymatrix &)
 
_dgematrix operator- (const dgematrix &, const dgbmatrix &)
 
_dgematrix operator- (const dgematrix &, const _dgbmatrix &)
 
_dgematrix operator- (const dgematrix &, const dgsmatrix &)
 
_dgematrix operator- (const dgematrix &, const _dgsmatrix &)
 
_dgematrix operator- (const dgematrix &, const dssmatrix &)
 
_dgematrix operator- (const dgematrix &, const _dssmatrix &)
 
_dcovector operator* (const dgematrix &, const dcovector &)
 
_dcovector operator* (const dgematrix &, const _dcovector &)
 
_dgematrix operator* (const dgematrix &, const dgematrix &)
 
_dgematrix operator* (const dgematrix &, const _dgematrix &)
 
_dgematrix operator* (const dgematrix &, const dsymatrix &)
 
_dgematrix operator* (const dgematrix &, const _dsymatrix &)
 
_dgematrix operator* (const dgematrix &, const dgbmatrix &)
 
_dgematrix operator* (const dgematrix &, const _dgbmatrix &)
 
_dgematrix operator* (const dgematrix &, const dgsmatrix &)
 
_dgematrix operator* (const dgematrix &, const _dgsmatrix &)
 
_dgematrix operator* (const dgematrix &, const dssmatrix &)
 
_dgematrix operator* (const dgematrix &, const _dssmatrix &)
 
_dgematrix operator* (const dgematrix &, const double &)
 
_dgematrix operator/ (const dgematrix &, const double &)
 
_drovector operator% (const dgematrix &, const dgematrix &)
 
_dgematrix operator* (const double &, const dgematrix &)
 
_dgematrix hadamard (const dgematrix &, const dgematrix &)
 

Detailed Description

Real Double-precision General Dence Matrix Class.

Definition at line 3 of file dgematrix.hpp.

Constructor & Destructor Documentation

dgematrix::dgematrix ( )
inline

dgematrix constructor without arguments

Definition at line 3 of file dgematrix-constructor.hpp.

References array, darray, m, and n.

4 {CPPL_VERBOSE_REPORT;
5  //////// initialize ////////
6  m =0;
7  n =0;
8  array =NULL;
9  darray =NULL;
10 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double ** darray
array of pointers of column head addresses
Definition: dgematrix.hpp:12
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
dgematrix::dgematrix ( const dgematrix mat)
inline

dgematrix copy constructor

Definition at line 18 of file dgematrix-constructor.hpp.

References array, darray, i, m, and n.

19 {CPPL_VERBOSE_REPORT;
20  //////// initialize ////////
21  m =mat.m;
22  n =mat.n;
23  array =new double[m*n];
24  darray =new double*[n];
25  for(int i=0; i<n; i++){
26  darray[i] =&array[i*m];
27  }
28 
29  //////// copy ////////
30  CPPL_INT mn =m*n;
31  CPPL_INT inc =1;
32  dcopy_(&mn, mat.array, &inc, array, &inc);
33 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double ** darray
array of pointers of column head addresses
Definition: dgematrix.hpp:12
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
friend _dgematrix i(const dgematrix &)
dgematrix::dgematrix ( const _dgematrix mat)
inline

dgematrix constructor to cast _dgematrix

Definition at line 37 of file dgematrix-constructor.hpp.

References array, _dgematrix::array, _dgematrix::darray, darray, m, _dgematrix::m, _dgematrix::n, n, and _dgematrix::nullify().

38 {CPPL_VERBOSE_REPORT;
39  m =mat.m;
40  n =mat.n;
41  array =mat.array;
42  darray =mat.darray;
43 
44  mat.nullify();
45 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double ** darray
array of pointers of column head addresses
Definition: dgematrix.hpp:12
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
double ** darray
array of pointers of column head addresses
Definition: _dgematrix.hpp:12
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
CPPL_INT m
matrix row size
Definition: _dgematrix.hpp:9
double * array
1D array to store matrix data
Definition: _dgematrix.hpp:11
void nullify() const
CPPL_INT n
matrix column size
Definition: _dgematrix.hpp:10
dgematrix::dgematrix ( const CPPL_INT &  _m,
const CPPL_INT &  _n 
)
inline

dgematrix constructor with size specification

Definition at line 53 of file dgematrix-constructor.hpp.

References array, darray, i, m, and n.

54 {CPPL_VERBOSE_REPORT;
55 #ifdef CPPL_DEBUG
56  if( _m<0 || _n<0 ){
57  ERROR_REPORT;
58  std::cerr << "Matrix sizes must be positive integers. " << std::endl
59  << "Your input was (" << _m << "," << _n << ")." << std::endl;
60  exit(1);
61  }
62 #endif//CPPL_DEBUG
63 
64  //////// initialize ////////
65  m =_m;
66  n =_n;
67  array =new double[m*n];
68  darray =new double*[n];
69  for(int i=0; i<n; i++){
70  darray[i] =&array[i*m];
71  }
72 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double ** darray
array of pointers of column head addresses
Definition: dgematrix.hpp:12
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
friend _dgematrix i(const dgematrix &)
dgematrix::dgematrix ( const char *  filename)
inline

dgematrix constructor with filename

Definition at line 76 of file dgematrix-constructor.hpp.

References array, darray, and read().

77 {CPPL_VERBOSE_REPORT;
78  array =NULL;
79  darray =NULL;
80 
81  //// read ////
82  read(filename);
83 }
double ** darray
array of pointers of column head addresses
Definition: dgematrix.hpp:12
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
void read(const char *)
dgematrix::~dgematrix ( )
inline

dgematrix destructor

Definition at line 91 of file dgematrix-constructor.hpp.

References array, and darray.

92 {CPPL_VERBOSE_REPORT;
93  delete [] darray;
94  delete [] array;
95 }
double ** darray
array of pointers of column head addresses
Definition: dgematrix.hpp:12
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11

Member Function Documentation

_zgematrix dgematrix::to_zgematrix ( ) const
inline

cast to _zgematrix

Definition at line 3 of file dgematrix-cast.hpp.

References _, array, zgematrix::array, i, m, and n.

4 {CPPL_VERBOSE_REPORT;
5  zgematrix newmat(m,n);
6  for(CPPL_INT i=0; i<m*n; i++){
7  newmat.array[i] =comple(array[i],0.0);
8  }
9 
10  return _(newmat);
11 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
Complex Double-precision General Dence Matrix Class.
Definition: zgematrix.hpp:3
friend _dgematrix i(const dgematrix &)
friend _dgematrix _(dgematrix &)
double & dgematrix::operator() ( const CPPL_INT &  i,
const CPPL_INT &  j 
)
inline

operator() for non-const object

Definition at line 3 of file dgematrix-io.hpp.

References darray, i, m, and n.

Referenced by identity(), operator*=(), operator+=(), operator-=(), read(), and write().

4 {CPPL_VERBOSE_REPORT;
5 #ifdef CPPL_DEBUG
6  if( i<0 || j<0 || m<=i || n<=j ){
7  ERROR_REPORT;
8  std::cerr << "The required component is out of the matrix size." << std::endl
9  << "Your input is (" << i << "," << j << "), whereas the matrix size is " << m << "x" << n << "." << std::endl;
10  exit(1);
11  }
12 #endif//CPPL_DEBUG
13 
14  //return array[i+m*j];
15  return darray[j][i];
16 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double ** darray
array of pointers of column head addresses
Definition: dgematrix.hpp:12
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
friend _dgematrix i(const dgematrix &)
double dgematrix::operator() ( const CPPL_INT &  i,
const CPPL_INT &  j 
) const
inline

operator() for const object

Definition at line 20 of file dgematrix-io.hpp.

References darray, i, m, and n.

21 {CPPL_VERBOSE_REPORT;
22 #ifdef CPPL_DEBUG
23  if( i<0 || j<0 || m<=i || n<=j ){
24  ERROR_REPORT;
25  std::cerr << "The required component is out of the matrix size." << std::endl
26  << "Your input is (" << i << "," << j << "), whereas the matrix size is " << m << "x" << n << "." << std::endl;
27  exit(1);
28  }
29 #endif//CPPL_DEBUG
30 
31  //return array[i+m*j];
32  return darray[j][i];
33 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double ** darray
array of pointers of column head addresses
Definition: dgematrix.hpp:12
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
friend _dgematrix i(const dgematrix &)
dgematrix & dgematrix::set ( const CPPL_INT &  i,
const CPPL_INT &  j,
const double &  v 
)
inline

set value for const object

Definition at line 41 of file dgematrix-io.hpp.

References darray, i, m, and n.

42 {CPPL_VERBOSE_REPORT;
43 #ifdef CPPL_DEBUG
44  if( i<0 || j<0 || m<=i || n<=j ){
45  ERROR_REPORT;
46  std::cerr << "The required component is out of the matrix size." << std::endl
47  << "Your input is (" << i << "," << j << "), whereas the matrix size is " << m << "x" << n << "." << std::endl;
48  exit(1);
49  }
50 #endif//CPPL_DEBUG
51 
52  //array[i+m*j] =v;
53  darray[j][i] =v;
54 
55  return *this;
56 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double ** darray
array of pointers of column head addresses
Definition: dgematrix.hpp:12
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
friend _dgematrix i(const dgematrix &)
void dgematrix::write ( const char *  filename) const
inline

Definition at line 79 of file dgematrix-io.hpp.

References i, m, n, and operator()().

80 {CPPL_VERBOSE_REPORT;
81  std::ofstream ofs(filename, std::ios::trunc);
82  ofs.setf(std::cout.flags());
83  ofs.precision(std::cout.precision());
84  ofs.width(std::cout.width());
85  ofs.fill(std::cout.fill());
86 
87  ofs << "#dgematrix" << " " << m << " " << n << std::endl;
88  for(CPPL_INT i=0; i<m; i++){
89  for(CPPL_INT j=0; j<n; j++ ){
90  ofs << operator()(i,j) << " ";
91  }
92  ofs << std::endl;
93  }
94 
95  ofs.close();
96 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double & operator()(const CPPL_INT &, const CPPL_INT &)
Definition: dgematrix-io.hpp:3
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
friend _dgematrix i(const dgematrix &)
void dgematrix::read ( const char *  filename)
inline

Definition at line 99 of file dgematrix-io.hpp.

References i, m, n, operator()(), and resize().

Referenced by dgematrix().

100 {CPPL_VERBOSE_REPORT;
101  std::ifstream s( filename );
102  if(!s){
103  ERROR_REPORT;
104  std::cerr << "The file \"" << filename << "\" can not be opened." << std::endl;
105  exit(1);
106  }
107 
108  std::string id;
109  s >> id;
110  if( id != "dgematrix" && id != "#dgematrix" ){
111  ERROR_REPORT;
112  std::cerr << "The type name of the file \"" << filename << "\" is not dgematrix." << std::endl
113  << "Its type name was " << id << " ." << std::endl;
114  exit(1);
115  }
116 
117  s >> m >> n;
118  resize(m, n);
119  for(CPPL_INT i=0; i<m; i++){
120  for(CPPL_INT j=0; j<n; j++ ){
121  s >> operator()(i,j);
122  }
123  }
124  if(s.eof()){
125  ERROR_REPORT;
126  std::cerr << "There is something is wrong with the file \"" << filename << "\"." << std::endl
127  << "Most likely, there is a lack of data components, or a linefeed code or space code is missing at the end of the last line." << std::endl;
128  exit(1);
129  }
130 
131  s >> id;
132  if(!s.eof()){
133  ERROR_REPORT;
134  std::cerr << "There is something is wrong with the file \"" << filename << "\"." << std::endl
135  << "Most likely, there are extra data components." << std::endl;
136  exit(1);
137  }
138 
139 
140  s.close();
141 }
dgematrix & resize(const CPPL_INT &, const CPPL_INT &)
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double & operator()(const CPPL_INT &, const CPPL_INT &)
Definition: dgematrix-io.hpp:3
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
friend _dgematrix i(const dgematrix &)
void dgematrix::clear ( )
inline

clear all the matrix data and set the sizes 0

Definition at line 3 of file dgematrix-misc.hpp.

References array, darray, m, and n.

Referenced by dgels(), and dgelss().

4 {CPPL_VERBOSE_REPORT;
5  m =0;
6  n =0;
7  delete [] array;
8  delete [] darray;
9  array =NULL;
10  darray =NULL;
11 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double ** darray
array of pointers of column head addresses
Definition: dgematrix.hpp:12
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
dgematrix & dgematrix::zero ( )
inline

change the matrix into a zero matrix

Definition at line 15 of file dgematrix-misc.hpp.

References array, i, m, and n.

Referenced by operator*(), operator*=(), _dgsmatrix::to_dgematrix(), _dssmatrix::to_dgematrix(), dssmatrix::to_dgematrix(), dgrmatrix::to_dgematrix(), and dgsmatrix::to_dgematrix().

16 {CPPL_VERBOSE_REPORT;
17  for(CPPL_INT i=0; i<m*n; i++){
18  array[i] =0.0;
19  }
20  return *this;
21 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
friend _dgematrix i(const dgematrix &)
dgematrix & dgematrix::identity ( )
inline

change the matrix into an identity matrix

Definition at line 25 of file dgematrix-misc.hpp.

References array, i, m, n, and operator()().

Referenced by i().

26 {CPPL_VERBOSE_REPORT;
27 #ifdef CPPL_DEBUG
28  if(m!=n){
29  ERROR_REPORT;
30  std::cerr << "Only square matrix can be a identity matrix." << std::endl
31  << "The matrix size was " << m << "x" << n << "." << std::endl;
32  exit(1);
33  }
34 #endif//CPPL_DEBUG
35 
36  for(CPPL_INT i=0; i<m*n; i++){
37  array[i] =0.0;
38  }
39  for(CPPL_INT i=0; i<m; i++){
40  operator()(i,i) =1.0;
41  }
42  return *this;
43 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
double & operator()(const CPPL_INT &, const CPPL_INT &)
Definition: dgematrix-io.hpp:3
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
friend _dgematrix i(const dgematrix &)
void dgematrix::chsign ( )
inline

change sign(+/-) of the matrix

Definition at line 47 of file dgematrix-misc.hpp.

References array, i, m, and n.

48 {CPPL_VERBOSE_REPORT;
49  for(CPPL_INT i=0; i<m*n; i++){
50  array[i] =-array[i];
51  }
52 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
friend _dgematrix i(const dgematrix &)
void dgematrix::copy ( const dgematrix mat)
inline

make a deep copy of the matrix

Definition at line 56 of file dgematrix-misc.hpp.

References array, darray, i, m, and n.

Referenced by operator=().

57 {CPPL_VERBOSE_REPORT;
58  m =mat.m;
59  n =mat.n;
60  delete [] array;
61  array =new double[mat.m*mat.n];
62  delete [] darray;
63  darray =new double*[n];
64  for(int i=0; i<n; i++){
65  darray[i] =&array[i*m];
66  }
67 
68  CPPL_INT mn =mat.m*mat.n;
69  CPPL_INT inc =1;
70  dcopy_(&mn, mat.array, &inc, array, &inc);
71 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double ** darray
array of pointers of column head addresses
Definition: dgematrix.hpp:12
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
friend _dgematrix i(const dgematrix &)
void dgematrix::shallow_copy ( const _dgematrix mat)
inline

make a shallow copy of the matrix
This function is not designed to be used in project codes.

Definition at line 76 of file dgematrix-misc.hpp.

References array, _dgematrix::array, _dgematrix::darray, darray, m, _dgematrix::m, _dgematrix::n, n, and _dgematrix::nullify().

Referenced by operator=().

77 {CPPL_VERBOSE_REPORT;
78  m =mat.m;
79  n =mat.n;
80  delete [] array;
81  array =mat.array;
82  delete [] darray;
83  darray =mat.darray;
84 
85  mat.nullify();
86 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double ** darray
array of pointers of column head addresses
Definition: dgematrix.hpp:12
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
double ** darray
array of pointers of column head addresses
Definition: _dgematrix.hpp:12
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
CPPL_INT m
matrix row size
Definition: _dgematrix.hpp:9
double * array
1D array to store matrix data
Definition: _dgematrix.hpp:11
void nullify() const
CPPL_INT n
matrix column size
Definition: _dgematrix.hpp:10
dgematrix & dgematrix::resize ( const CPPL_INT &  _m,
const CPPL_INT &  _n 
)
inline

resize the matrix

Definition at line 90 of file dgematrix-misc.hpp.

References array, darray, i, m, and n.

Referenced by dgesvd(), and read().

91 {CPPL_VERBOSE_REPORT;
92 #ifdef CPPL_DEBUG
93  if( _m<0 || _n<0 ){
94  ERROR_REPORT;
95  std::cerr << "Matrix sizes must be positive integers." << std::endl
96  << "Your input was (" << _m << "," << _n << ")." << std::endl;
97  exit(1);
98  }
99 #endif//CPPL_DEBUG
100 
101  m =_m;
102  n =_n;
103  delete [] array;
104  array =new double[m*n];
105  delete [] darray;
106  darray =new double*[n];
107  for(int i=0; i<n; i++){
108  darray[i] =&array[i*m];
109  }
110 
111  return *this;
112 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double ** darray
array of pointers of column head addresses
Definition: dgematrix.hpp:12
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
friend _dgematrix i(const dgematrix &)
_drovector dgematrix::row ( const CPPL_INT &  _m) const
inline

get row of the matrix

Definition at line 120 of file dgematrix-misc.hpp.

References _, m, and n.

121 {CPPL_VERBOSE_REPORT;
122 #ifdef CPPL_DEBUG
123  if( _m<0 || _m>m ){
124  ERROR_REPORT;
125  std::cerr << "Input row number must be between 0 and " << m << "." << std::endl
126  << "Your input was " << _m << "." << std::endl;
127  exit(1);
128  }
129 #endif//CPPL_DEBUG
130 
131  drovector v(n);
132  for(CPPL_INT j=0; j<n; j++){
133  v(j)=(*this)(_m,j);
134  }
135  return _(v);
136 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
Real Double-precision Row Vector Class.
Definition: drovector.hpp:3
friend _dgematrix _(dgematrix &)
_dcovector dgematrix::col ( const CPPL_INT &  _n) const
inline

get column of the matrix

Definition at line 140 of file dgematrix-misc.hpp.

References _, i, m, and n.

141 {CPPL_VERBOSE_REPORT;
142 #ifdef CPPL_DEBUG
143  if( _n<0 || _n>n ){
144  ERROR_REPORT;
145  std::cerr << "Input row number must be between 0 and " << n << "." << std::endl
146  << "Your input was " << _n << "." << std::endl;
147  exit(1);
148  }
149 #endif//CPPL_DEBUG
150 
151  dcovector v(m);
152  for(CPPL_INT i=0; i<m; i++){
153  v(i)=(*this)(i,_n);
154  }
155  return _(v);
156 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
Real Double-precision Column Vector Class.
Definition: dcovector.hpp:3
friend _dgematrix i(const dgematrix &)
friend _dgematrix _(dgematrix &)
CPPL_INT dgematrix::dgesv ( dgematrix mat)
inline

solve A*X=Y using dgesv
The argument is dgematrix Y. Y is overwritten and become the solution X. A is also overwritten and become P*l*U.

Definition at line 6 of file dgematrix-lapack.hpp.

References array, m, and n.

Referenced by i().

7 {CPPL_VERBOSE_REPORT;
8 #ifdef CPPL_DEBUG
9  if(m!=n || m!=mat.m){
10  ERROR_REPORT;
11  std::cerr << "These two matrices cannot be solved." << std::endl
12  << "Your input was (" << m << "x" << n << ") and (" << mat.m << "x" << mat.n << ")." << std::endl;
13  exit(1);
14  }
15 #endif//CPPL_DEBUG
16 
17  CPPL_INT NRHS(mat.n), LDA(n), *IPIV(new CPPL_INT[n]), LDB(mat.m), INFO(1);
18  dgesv_(&n, &NRHS, array, &LDA, IPIV, mat.array, &LDB, &INFO);
19  delete [] IPIV;
20 
21  if(INFO!=0){
22  WARNING_REPORT;
23  std::cerr << "Serious trouble happend. INFO = " << INFO << "." << std::endl;
24  }
25  return INFO;
26 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
CPPL_INT dgematrix::dgesv ( dcovector vec)
inline

solve A*x=y using dgesv
The argument is dcovector y. y is overwritten and become the solution x. A is also overwritten and become P*l*U.

Definition at line 33 of file dgematrix-lapack.hpp.

References array, dcovector::array, dcovector::l, m, and n.

34 {CPPL_VERBOSE_REPORT;
35 #ifdef CPPL_DEBUG
36  if(m!=n || m!=vec.l){
37  ERROR_REPORT;
38  std::cerr << "These matrix and vector cannot be solved." << std::endl
39  << "Your input was (" << m << "x" << n << ") and (" << vec.l << ")." << std::endl;
40  exit(1);
41  }
42 #endif//CPPL_DEBUG
43 
44  CPPL_INT NRHS(1), LDA(n), *IPIV(new CPPL_INT[n]), LDB(vec.l), INFO(1);
45  dgesv_(&n, &NRHS, array, &LDA, IPIV, vec.array, &LDB, &INFO);
46  delete [] IPIV;
47 
48  if(INFO!=0){
49  WARNING_REPORT;
50  std::cerr << "Serious trouble happend. INFO = " << INFO << "." << std::endl;
51  }
52  return INFO;
53 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
CPPL_INT l
vector size
Definition: dcovector.hpp:9
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
double * array
1D array to store vector data
Definition: dcovector.hpp:11
CPPL_INT dgematrix::dgels ( dgematrix mat)
inline

solve overdetermined or underdetermined A*X=Y using dgels

Definition at line 62 of file dgematrix-lapack.hpp.

References array, clear(), i, m, n, and swap.

63 {CPPL_VERBOSE_REPORT;
64 #ifdef CPPL_DEBUG
65  if(m!=mat.m){
66  ERROR_REPORT;
67  std::cerr << "These two matrices cannot be solved." << std::endl
68  << "Your input was (" << m << "x" << n << ") and (" << mat.m << "x" << mat.n << ")." << std::endl;
69  exit(1);
70  }
71 #endif//CPPL_DEBUG
72 
73  if(m<n){ //underdetermined
74  dgematrix tmp(n,mat.n);
75  for(CPPL_INT i=0; i<mat.m; i++){
76  for(CPPL_INT j=0; j<mat.n; j++){
77  tmp(i,j) =mat(i,j);
78  }
79  }
80  mat.clear();
81  swap(mat,tmp);
82  }
83 
84  char TRANS('n');
85  CPPL_INT NRHS(mat.n), LDA(m), LDB(mat.m), LWORK(std::min(m,n)+std::max(std::min(m,n),NRHS)), INFO(1);
86  double *WORK(new double[LWORK]);
87  dgels_(&TRANS, &m, &n, &NRHS, array, &LDA, mat.array, &LDB, WORK, &LWORK, &INFO);
88  delete [] WORK;
89 
90  if(m>n){ //overdetermined
91  dgematrix tmp(n,mat.n);
92  for(CPPL_INT i=0; i<tmp.m; i++){
93  for(CPPL_INT j=0; j<tmp.n; j++){
94  tmp(i,j) =mat(i,j);
95  }
96  }
97  mat.clear();
98  swap(mat,tmp);
99  }
100 
101  if(INFO!=0){
102  WARNING_REPORT;
103  std::cerr << "Serious trouble happend. INFO = " << INFO << "." << std::endl;
104  }
105  return INFO;
106 }
void clear()
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
friend void swap(dgematrix &, dgematrix &)
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
Real Double-precision General Dence Matrix Class.
Definition: dgematrix.hpp:3
CPPL_INT m
matrix row size
Definition: _dgematrix.hpp:9
friend _dgematrix i(const dgematrix &)
CPPL_INT dgematrix::dgels ( dcovector vec)
inline

solve overdetermined or underdetermined A*x=y using dgels

Definition at line 111 of file dgematrix-lapack.hpp.

References array, dcovector::array, dcovector::clear(), i, dcovector::l, m, n, and swap.

112 {CPPL_VERBOSE_REPORT;
113 #ifdef CPPL_DEBUG
114  if(m!=vec.l){
115  ERROR_REPORT;
116  std::cerr << "These matrix and vector cannot be solved." << std::endl
117  << "Your input was (" << m << "x" << n << ") and (" << vec.l << ")." << std::endl;
118  exit(1);
119  }
120 #endif//CPPL_DEBUG
121 
122  if(m<n){ //underdetermined
123  dcovector tmp(n);
124  for(CPPL_INT i=0; i<vec.l; i++){
125  tmp(i)=vec(i);
126  }
127  vec.clear();
128  swap(vec,tmp);
129  }
130 
131  char TRANS('n');
132  CPPL_INT NRHS(1), LDA(m), LDB(vec.l), LWORK(std::min(m,n)+std::max(std::min(m,n),NRHS)), INFO(1);
133  double *WORK(new double[LWORK]);
134  dgels_(&TRANS, &m, &n, &NRHS, array, &LDA, vec.array, &LDB, WORK, &LWORK, &INFO);
135  delete [] WORK;
136 
137  if(m>n){ //overdetermined
138  dcovector tmp(n);
139  for(CPPL_INT i=0; i<tmp.l; i++){
140  tmp(i)=vec(i);
141  }
142  vec.clear();
143  swap(vec,tmp);
144  }
145 
146  if(INFO!=0){
147  WARNING_REPORT;
148  std::cerr << "Serious trouble happend. INFO = " << INFO << "." << std::endl;
149  }
150  return INFO;
151 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
CPPL_INT l
vector size
Definition: dcovector.hpp:9
friend void swap(dgematrix &, dgematrix &)
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
double * array
1D array to store vector data
Definition: dcovector.hpp:11
void clear()
Real Double-precision Column Vector Class.
Definition: dcovector.hpp:3
friend _dgematrix i(const dgematrix &)
CPPL_INT dgematrix::dgels ( dgematrix mat,
drovector residual 
)
inline

solve overdetermined or underdetermined A*X=Y using dgels with the sum of residual squares output
The residual is set as the columnwise sum of residual squares for overdetermined problems while it is always zero for underdetermined problems.

Definition at line 160 of file dgematrix-lapack.hpp.

References array, clear(), i, drovector::l, m, n, drovector::resize(), swap, and drovector::zero().

161 {CPPL_VERBOSE_REPORT;
162 #ifdef CPPL_DEBUG
163  if(m!=mat.m){
164  ERROR_REPORT;
165  std::cerr << "These two matrices cannot be solved." << std::endl
166  << "Your input was (" << m << "x" << n << ") and (" << mat.m << "x" << mat.n << ")." << std::endl;
167  exit(1);
168  }
169 #endif//CPPL_DEBUG
170 
171  residual.resize(mat.n);
172  residual.zero();
173 
174  if(m<n){ //underdetermined
175  dgematrix tmp(n,mat.n);
176  for(CPPL_INT i=0; i<mat.m; i++){
177  for(CPPL_INT j=0; j<mat.n; j++){
178  tmp(i,j) =mat(i,j);
179  }
180  }
181  mat.clear();
182  swap(mat,tmp);
183  }
184 
185  char TRANS('n');
186  CPPL_INT NRHS(mat.n), LDA(m), LDB(mat.m), LWORK(std::min(m,n)+std::max(std::min(m,n),NRHS)), INFO(1);
187  double *WORK(new double[LWORK]);
188  dgels_(&TRANS, &m, &n, &NRHS, array, &LDA, mat.array, &LDB, WORK, &LWORK, &INFO);
189  delete [] WORK;
190 
191  if(m>n){ //overdetermined
192  for(CPPL_INT i=0; i<residual.l; i++){
193  for(CPPL_INT j=0; j<m-n; j++){
194  residual(i) += std::pow(mat(n+j,i), 2.0);
195  }
196  }
197 
198  dgematrix tmp(n,mat.n);
199  for(CPPL_INT i=0; i<tmp.m; i++){
200  for(CPPL_INT j=0; j<tmp.n; j++){
201  tmp(i,j) =mat(i,j);
202  }
203  }
204  mat.clear();
205  swap(mat,tmp);
206  }
207 
208  if(INFO!=0){
209  WARNING_REPORT;
210  std::cerr << "Serious trouble happend. INFO = " << INFO << "." << std::endl;
211  }
212  return INFO;
213 }
void clear()
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
friend void swap(dgematrix &, dgematrix &)
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
CPPL_INT l
vector size
Definition: drovector.hpp:9
Real Double-precision General Dence Matrix Class.
Definition: dgematrix.hpp:3
CPPL_INT m
matrix row size
Definition: _dgematrix.hpp:9
drovector & zero()
drovector & resize(const CPPL_INT &, const CPPL_INT=0)
friend _dgematrix i(const dgematrix &)
CPPL_INT dgematrix::dgels ( dcovector vec,
double &  residual 
)
inline

solve overdetermined or underdetermined A*x=y using dgels with the sum of residual squares output
The residual is set as the sum of residual squares for overdetermined problems while it is always zero for underdetermined problems.

Definition at line 222 of file dgematrix-lapack.hpp.

References array, dcovector::array, dcovector::clear(), i, dcovector::l, m, n, and swap.

223 {CPPL_VERBOSE_REPORT;
224 #ifdef CPPL_DEBUG
225  if(m!=vec.l){
226  ERROR_REPORT;
227  std::cerr << "These matrix and vector cannot be solved." << std::endl
228  << "Your input was (" << m << "x" << n << ") and (" << vec.l << ")." << std::endl;
229  exit(1);
230  }
231 #endif//CPPL_DEBUG
232 
233  residual=0.0;
234 
235  if(m<n){ //underdetermined
236  dcovector tmp(n);
237  for(CPPL_INT i=0; i<vec.l; i++){
238  tmp(i)=vec(i);
239  }
240  vec.clear();
241  swap(vec,tmp);
242  }
243 
244  char TRANS('n');
245  CPPL_INT NRHS(1), LDA(m), LDB(vec.l), LWORK(std::min(m,n)+std::max(std::min(m,n),NRHS)), INFO(1);
246  double *WORK(new double[LWORK]);
247  dgels_(&TRANS, &m, &n, &NRHS, array, &LDA, vec.array, &LDB, WORK, &LWORK, &INFO);
248  delete [] WORK;
249 
250  if(m>n){ //overdetermined
251  for(CPPL_INT i=0; i<m-n; i++){
252  residual+=std::pow(vec(n+i),2.0);
253  }
254 
255  dcovector tmp(n);
256  for(CPPL_INT i=0; i<tmp.l; i++){
257  tmp(i)=vec(i);
258  }
259  vec.clear();
260  swap(vec,tmp);
261  }
262 
263  if(INFO!=0){
264  WARNING_REPORT;
265  std::cerr << "Serious trouble happend. INFO = " << INFO << "." << std::endl;
266  }
267  return INFO;
268 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
CPPL_INT l
vector size
Definition: dcovector.hpp:9
friend void swap(dgematrix &, dgematrix &)
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
double * array
1D array to store vector data
Definition: dcovector.hpp:11
void clear()
Real Double-precision Column Vector Class.
Definition: dcovector.hpp:3
friend _dgematrix i(const dgematrix &)
CPPL_INT dgematrix::dgelss ( dcovector B,
dcovector S,
CPPL_INT &  RANK,
const double  RCOND = -1. 
)
inline

calculate the least-squares-least-norm solution for overdetermined or underdetermined A*x=y using dgelss

Definition at line 279 of file dgematrix-lapack.hpp.

References dcovector::array, dcovector::clear(), i(), dcovector::l, dcovector::resize(), and swap().

285 {CPPL_VERBOSE_REPORT;
286 #ifdef CPPL_DEBUG
287  if(m!=B.l){
288  ERROR_REPORT;
289  std::cerr << "These matrix and vector cannot be solved." << std::endl
290  << "Your input was (" << m << "x" << n << ") and (" << B.l << ")." << std::endl;
291  exit(1);
292  }
293 #endif//CPPL_DEBUG
294 
295  if(m<n){ //underdetermined
296  dcovector tmp(n);
297  for(CPPL_INT i=0; i<B.l; i++){
298  tmp(i)=B(i);
299  }
300  B.clear();
301  swap(B,tmp);
302  }
303 
304  S.resize(std::min(m,n));
305 
306  CPPL_INT NRHS(1), LDA(m), LDB(B.l), LWORK(3*std::min(m,n)+std::max(std::max(2*std::min(m,n),std::max(m,n)), NRHS)), INFO(1);
307  double *WORK(new double[LWORK]);
308  dgelss_(&m, &n, &NRHS, array, &LDA, B.array, &LDB, S.array, &RCOND, &RANK, WORK, &LWORK, &INFO);
309  delete [] WORK;
310 
311  if(INFO!=0){
312  WARNING_REPORT;
313  std::cerr << "Serious trouble happend. INFO = " << INFO << "." << std::endl;
314  }
315  return INFO;
316 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
CPPL_INT l
vector size
Definition: dcovector.hpp:9
dcovector & resize(const CPPL_INT &, const CPPL_INT=0)
friend void swap(dgematrix &, dgematrix &)
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
double * array
1D array to store vector data
Definition: dcovector.hpp:11
void clear()
Real Double-precision Column Vector Class.
Definition: dcovector.hpp:3
friend _dgematrix i(const dgematrix &)
CPPL_INT dgematrix::dgelss ( dgematrix B,
dcovector S,
CPPL_INT &  RANK,
const double  RCOND = -1. 
)
inline

calculate the least-squares-least-norm solution for overdetermined or underdetermined A*x=y using dgelss

Definition at line 323 of file dgematrix-lapack.hpp.

References array, dcovector::array, clear(), i(), m, n, dcovector::resize(), and swap().

329 {CPPL_VERBOSE_REPORT;
330 #ifdef CPPL_DEBUG
331  if(m!=B.m){
332  ERROR_REPORT;
333  std::cerr << "These matrix and vector cannot be solved." << std::endl
334  << "Your input was (" << m << "x" << n << ") and (" << B.m << "x" << B.n << ")." << std::endl;
335  exit(1);
336  }
337 #endif//CPPL_DEBUG
338 
339  if(m<n){ //underdetermined
340  dgematrix tmp(n,B.n);
341  for(CPPL_INT i=0; i<B.m; i++){
342  for(CPPL_INT j=0; j<B.n; j++){
343  tmp(i,j)=B(i,j);
344  }
345  }
346  B.clear();
347  swap(B,tmp);
348  }
349 
350  S.resize(std::min(m,n));
351 
352  CPPL_INT NRHS(B.n), LDA(m), LDB(B.m), LWORK(3*std::min(m,n)+std::max(std::max(2*std::min(m,n),std::max(m,n)), NRHS)), INFO(1);
353  double *WORK(new double[LWORK]);
354  dgelss_(&m, &n, &NRHS, array, &LDA, B.array, &LDB, S.array, &RCOND, &RANK, WORK, &LWORK, &INFO);
355  delete [] WORK;
356 
357  if(INFO!=0){
358  WARNING_REPORT;
359  std::cerr << "Serious trouble happend. INFO = " << INFO << "." << std::endl;
360  }
361  return INFO;
362 }
void clear()
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
dcovector & resize(const CPPL_INT &, const CPPL_INT=0)
friend void swap(dgematrix &, dgematrix &)
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
Real Double-precision General Dence Matrix Class.
Definition: dgematrix.hpp:3
double * array
1D array to store vector data
Definition: dcovector.hpp:11
friend _dgematrix i(const dgematrix &)
CPPL_INT dgematrix::dgelsd ( dcovector B,
dcovector S,
CPPL_INT &  RANK,
const double  RCOND = -1. 
)
inline

calculate the least-squares-least-norm solution for overdetermined or underdetermined A*x=y using dgelsd

Definition at line 372 of file dgematrix-lapack.hpp.

References dcovector::array, dcovector::clear(), i(), dcovector::l, dcovector::resize(), and swap().

378 {CPPL_VERBOSE_REPORT;
379 #ifdef CPPL_DEBUG
380  if(m!=B.l){
381  ERROR_REPORT;
382  std::cerr << "These matrix and vector cannot be solved." << std::endl
383  << "Your input was (" << m << "x" << n << ") and (" << B.l << ")." << std::endl;
384  exit(1);
385  }
386 #endif//CPPL_DEBUG
387 
388  //////// resize ////////
389  if(m<n){ //underdetermined
390  dcovector tmp(n);
391  for(CPPL_INT i=0; i<B.l; i++){
392  tmp(i)=B(i);
393  }
394  B.clear();
395  swap(B,tmp);
396  }
397 
398  S.resize(std::min(m,n));
399 
400  //////// prerun ////////
401  CPPL_INT M =m;
402  CPPL_INT N =n;
403  CPPL_INT NRHS =1;
404  CPPL_INT LDA =m;
405  CPPL_INT LDB =B.l;
406  std::vector<double> WORK(1);
407  CPPL_INT LWORK =-1;
408  CPPL_INT MINMN =std::min(M,N);
409  CPPL_INT SMLSIZ =25;
410  CPPL_INT NLVL =CPPL_INT( std::log(double(MINMN)/double(SMLSIZ+1))/std::log(2.) );
411  CPPL_INT LIWORK =3*MINMN*NLVL+11*MINMN;
412  std::vector<CPPL_INT> IWORK(LIWORK);
413  CPPL_INT INFO =1;
414  dgelsd_(&M, &N, &NRHS, array, &LDA, B.array, &LDB, S.array, &RCOND, &RANK, &WORK[0], &LWORK, &IWORK[0], &INFO);
415  LWORK =CPPL_INT(WORK[0]);
416  WORK.resize(LWORK);
417 
418  //////// run ////////
419  INFO =1;
420  RANK =1;
421  dgelsd_(&M, &N, &NRHS, array, &LDA, B.array, &LDB, S.array, &RCOND, &RANK, &WORK[0], &LWORK, &IWORK[0], &INFO);
422 
423  //////// info ////////
424  if(INFO!=0){
425  WARNING_REPORT;
426  std::cerr << "Serious trouble happend. INFO = " << INFO << "." << std::endl;
427  }
428  return INFO;
429 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
CPPL_INT l
vector size
Definition: dcovector.hpp:9
dcovector & resize(const CPPL_INT &, const CPPL_INT=0)
friend void swap(dgematrix &, dgematrix &)
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
double * array
1D array to store vector data
Definition: dcovector.hpp:11
void clear()
Real Double-precision Column Vector Class.
Definition: dcovector.hpp:3
friend _dgematrix i(const dgematrix &)
CPPL_INT dgematrix::dgeev ( std::vector< double > &  wr,
std::vector< double > &  wi 
)
inline

calculate eigenvalues
All of the arguments need not to be initialized. wr and wi are overwitten and become real and imaginary part of eigenvalues, respectively. This matrix is also overwritten.

Definition at line 442 of file dgematrix-lapack.hpp.

References array, m, and n.

Referenced by dgeev().

443 {CPPL_VERBOSE_REPORT;
444 #ifdef CPPL_DEBUG
445  if(m!=n){
446  ERROR_REPORT;
447  std::cerr << "This matrix is not a square matrix." << std::endl
448  << "This matrix is (" << m << "x" << n << ")." << std::endl;
449  exit(1);
450  }
451 #endif//CPPL_DEBUG
452 
453  wr.resize(n);
454  wi.resize(n);
455  char JOBVL('n'), JOBVR('n');
456  CPPL_INT LDA(n), LDVL(1), LDVR(1), LWORK(3*n), INFO(1);
457  double *VL(NULL), *VR(NULL), *WORK(new double[LWORK]);
458  dgeev_(&JOBVL, &JOBVR, &n, array, &LDA, &wr[0], &wi[0], VL, &LDVL, VR, &LDVR, WORK, &LWORK, &INFO);
459  delete [] WORK;
460  delete [] VL;
461  delete [] VR;
462 
463  if(INFO!=0){
464  WARNING_REPORT;
465  std::cerr << "Serious trouble happend. INFO = " << INFO << "." << std::endl;
466  }
467  return INFO;
468 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
CPPL_INT dgematrix::dgeev ( zcovector w)
inline

calculate eigenvalues
All of the arguments need not to be initialized. w are overwitten and become eigenvalues, respectively. This matrix is also overwritten.

Definition at line 476 of file dgematrix-lapack.hpp.

References dgeev(), i, n, and zcovector::resize().

477 {CPPL_VERBOSE_REPORT;
478  //// call dgeev ////
479  std::vector<double> wr, wi;
480  CPPL_INT INFO =dgeev(wr,wi);
481 
482  //// assign ////
483  w.resize(n);
484  for(CPPL_INT i=0; i<n; i++){
485  w(i) =comple(wr[i],wi[i]);
486  }
487 
488  return INFO;
489 }
CPPL_INT dgeev(std::vector< double > &, std::vector< double > &)
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
friend _dgematrix i(const dgematrix &)
void resize(const CPPL_INT &)
CPPL_INT dgematrix::dgeev ( std::vector< double > &  wr,
std::vector< double > &  wi,
std::vector< dcovector > &  vrr,
std::vector< dcovector > &  vri 
)
inline

calculate right eigenvalues and right eigenvectors
All of the arguments need not to be initialized. wr, wi, vrr, vri are overwitten and become real and imaginary part of right eigenvalues and right eigenvectors, respectively. This matrix is also overwritten.

Definition at line 500 of file dgematrix-lapack.hpp.

References array, and i().

506 {CPPL_VERBOSE_REPORT;
507 #ifdef CPPL_DEBUG
508  if(m!=n){
509  ERROR_REPORT;
510  std::cerr << "This matrix is not a square matrix." << std::endl
511  << "This matrix is (" << m << "x" << n << ")." << std::endl;
512  exit(1);
513  }
514 #endif//CPPL_DEBUG
515 
516  wr.resize(n);
517  wi.resize(n);
518  vrr.resize(n);
519  vri.resize(n);
520  for(CPPL_INT i=0; i<n; i++){
521  vrr[i].resize(n);
522  vri[i].resize(n);
523  }
524 
525  dgematrix VR(n,n);
526  char JOBVL('n'), JOBVR('V');
527  CPPL_INT LDA(n), LDVL(1), LDVR(n), LWORK(4*n), INFO(1);
528  double *VL(NULL), *WORK(new double[LWORK]);
529  dgeev_(&JOBVL, &JOBVR, &n, array, &LDA, &wr[0], &wi[0], VL, &LDVL, VR.array, &LDVR, WORK, &LWORK, &INFO);
530  delete [] WORK;
531  delete [] VL;
532 
533  //// forming ////
534  for(CPPL_INT j=0; j<n; j++){
535  if(fabs(wi[j])<DBL_MIN){
536  for(CPPL_INT i=0; i<n; i++){
537  vrr[j](i) = VR(i,j);
538  vri[j](i) = 0.0;
539  }
540  }
541  else{
542  for(CPPL_INT i=0; i<n; i++){
543  vrr[j](i) = VR(i,j);
544  vri[j](i) = VR(i,j+1);
545  vrr[j+1](i) = VR(i,j);
546  vri[j+1](i) =-VR(i,j+1);
547  }
548  j++;
549  }
550  }
551 
552  if(INFO!=0){
553  WARNING_REPORT;
554  std::cerr << "Serious trouble happend. INFO = " << INFO << "." << std::endl;
555  }
556  return INFO;
557 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
Real Double-precision General Dence Matrix Class.
Definition: dgematrix.hpp:3
friend _dgematrix i(const dgematrix &)
CPPL_INT dgematrix::dgeev ( std::vector< double > &  wr,
std::vector< double > &  wi,
std::vector< drovector > &  vlr,
std::vector< drovector > &  vli 
)
inline

calculate left eigenvalues and left eigenvectors
All of the arguments need not to be initialized. wr, wi, vrr, vri are overwitten and become real and imaginary part of left eigenvalues and left eigenvectors, respectively. This matrix is also overwritten.

Definition at line 567 of file dgematrix-lapack.hpp.

References array, i, m, and n.

570 {CPPL_VERBOSE_REPORT;
571 #ifdef CPPL_DEBUG
572  if(m!=n){
573  ERROR_REPORT;
574  std::cerr << "This matrix is not a square matrix." << std::endl
575  << "This matrix is (" << m << "x" << n << ")." << std::endl;
576  exit(1);
577  }
578 #endif//CPPL_DEBUG
579 
580  wr.resize(n);
581  wi.resize(n);
582  vlr.resize(n);
583  vli.resize(n);
584  for(CPPL_INT i=0; i<n; i++){
585  vlr[i].resize(n);
586  vli[i].resize(n);
587  }
588 
589  dgematrix VL(n,n);
590  char JOBVL('V'), JOBVR('n');
591  CPPL_INT LDA(n), LDVL(n), LDVR(1), LWORK(4*n), INFO(1);
592  double *VR(NULL), *WORK(new double[LWORK]);
593  dgeev_(&JOBVL, &JOBVR, &n, array, &LDA, &wr[0], &wi[0], VL.array, &LDVL, VR, &LDVR, WORK, &LWORK, &INFO);
594  delete [] WORK;
595  delete [] VR;
596 
597  //// forming ////
598  for(CPPL_INT j=0; j<n; j++){
599  if(fabs(wi[j])<DBL_MIN){
600  for(CPPL_INT i=0; i<n; i++){
601  vlr[j](i) = VL(i,j);
602  vli[j](i) = 0.0;
603  }
604  }
605  else{
606  for(CPPL_INT i=0; i<n; i++){
607  vlr[j](i) = VL(i,j);
608  vli[j](i) =-VL(i,j+1);
609  vlr[j+1](i) = VL(i,j);
610  vli[j+1](i) = VL(i,j+1);
611  }
612  j++;
613  }
614  }
615 
616 
617  if(INFO!=0){
618  WARNING_REPORT;
619  std::cerr << "Serious trouble happend. INFO = " << INFO << "." << std::endl;
620  }
621  return INFO;
622 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
Real Double-precision General Dence Matrix Class.
Definition: dgematrix.hpp:3
friend _dgematrix i(const dgematrix &)
CPPL_INT dgematrix::dggev ( dgematrix matB,
std::vector< double > &  wr,
std::vector< double > &  wi 
)
inline

calculate generalized eigenvalues
All of the arguments don't need to be initialized. wr and wi are overwitten and become real and imaginary part of generalized eigenvalues, respectively. This matrix and matB are also overwritten.

Definition at line 637 of file dgematrix-lapack.hpp.

References array, i, m, and n.

639 {CPPL_VERBOSE_REPORT;
640 #ifdef CPPL_DEBUG
641  if(m!=n){
642  ERROR_REPORT;
643  std::cerr << "This matrix is not a square matrix." << std::endl
644  << "This matrix is (" << m << "x" << n << ")." << std::endl;
645  exit(1);
646  }
647  if(matB.m!=n || matB.n!=n){
648  ERROR_REPORT;
649  std::cerr << "The matrix B is not a square matrix having the same size as \"this\" matrix." << std::endl
650  << "The B matrix is (" << matB.m << "x" << matB.n << ")." << std::endl;
651  exit(1);
652  }
653 #endif//CPPL_DEBUG
654 
655  wr.resize(n);
656  wi.resize(n);
657  char JOBVL('n'), JOBVR('n');
658  CPPL_INT LDA(n), LDB(n), LDVL(1), LDVR(1), LWORK(8*n), INFO(1);
659  double *BETA(new double[n]), *VL(NULL), *VR(NULL), *WORK(new double[LWORK]);
660  dggev_(&JOBVL, &JOBVR, &n, array, &LDA, matB.array, &LDB, &wr[0], &wi[0], BETA, VL, &LDVL, VR, &LDVR, WORK, &LWORK, &INFO);
661  delete [] WORK;
662  delete [] VL;
663  delete [] VR;
664 
665  //// reforming ////
666  for(CPPL_INT i=0; i<n; i++){
667  wr[i]/=BETA[i];
668  wi[i]/=BETA[i];
669  }
670  delete [] BETA;
671 
672  if(INFO!=0){
673  WARNING_REPORT;
674  std::cerr << "Serious trouble happend. INFO = " << INFO << "." << std::endl;
675  }
676  return INFO;
677 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
friend _dgematrix i(const dgematrix &)
CPPL_INT dgematrix::dggev ( dgematrix matB,
std::vector< double > &  wr,
std::vector< double > &  wi,
std::vector< dcovector > &  vrr,
std::vector< dcovector > &  vri 
)
inline

calculate generalized eigenvalues and generalized right eigenvectors
All of the arguments don't need to be initialized. wr, wi, vrr and vri are overwitten and become real and imaginary part of generalized eigenvalue and generalized right eigenvector, respectively. This matrix and matB are also overwritten.

Definition at line 687 of file dgematrix-lapack.hpp.

References array, i, m, and n.

691 {CPPL_VERBOSE_REPORT;
692 #ifdef CPPL_DEBUG
693  if(m!=n){
694  ERROR_REPORT;
695  std::cerr << "This matrix is not a square matrix." << std::endl
696  << "This matrix is (" << m << "x" << n << ")." << std::endl;
697  exit(1);
698  }
699  if(matB.m!=n || matB.n!=n){
700  ERROR_REPORT;
701  std::cerr << "The matrix B is not a square matrix having the same size as \"this\" matrix." << std::endl
702  << "The B matrix is (" << matB.m << "x" << matB.n << ")." << std::endl;
703  exit(1);
704  }
705 #endif//CPPL_DEBUG
706 
707  wr.resize(n);
708  wi.resize(n);
709  vrr.resize(n);
710  vri.resize(n);
711  for(CPPL_INT i=0; i<n; i++){
712  vrr[i].resize(n);
713  vri[i].resize(n);
714  }
715 
716  dgematrix VR(n,n);
717  char JOBVL('n'), JOBVR('V');
718  CPPL_INT LDA(n), LDB(n), LDVL(1), LDVR(n), LWORK(8*n), INFO(1);
719  double *BETA(new double[n]), *VL(NULL), *WORK(new double[LWORK]);
720  dggev_(&JOBVL, &JOBVR, &n, array, &LDA, matB.array, &LDB, &wr[0], &wi[0], BETA, VL, &LDVL, VR.array, &LDVR, WORK, &LWORK, &INFO);
721  delete [] WORK;
722  delete [] VL;
723 
724  //// reforming ////
725  for(CPPL_INT i=0; i<n; i++){
726  wr[i]/=BETA[i];
727  wi[i]/=BETA[i];
728  }
729  delete [] BETA;
730 
731  //// forming ////
732  for(CPPL_INT j=0; j<n; j++){
733  if(fabs(wi[j])<DBL_MIN){
734  for(CPPL_INT i=0; i<n; i++){
735  vrr[j](i) = VR(i,j);
736  vri[j](i) = 0.0;
737  }
738  }
739  else{
740  for(CPPL_INT i=0; i<n; i++){
741  vrr[j](i) = VR(i,j);
742  vri[j](i) = VR(i,j+1);
743  vrr[j+1](i) = VR(i,j);
744  vri[j+1](i) =-VR(i,j+1);
745  }
746  j++;
747  }
748  }
749 
750  if(INFO!=0){
751  WARNING_REPORT;
752  std::cerr << "Serious trouble happend. INFO = " << INFO << "." << std::endl;
753  }
754  return INFO;
755 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
Real Double-precision General Dence Matrix Class.
Definition: dgematrix.hpp:3
friend _dgematrix i(const dgematrix &)
CPPL_INT dgematrix::dggev ( dgematrix matB,
std::vector< double > &  wr,
std::vector< double > &  wi,
std::vector< drovector > &  vlr,
std::vector< drovector > &  vli 
)
inline

calculate generalized eigenvalues and generalized left eigenvectors
All of the arguments don't need to be initialized. wr, wi, vlr and vli are overwitten and become real and imaginary part of generalized eigenvalue and generalized left eigenvector, respectively. This matrix and matB are also overwritten.

Definition at line 765 of file dgematrix-lapack.hpp.

References array, i, m, and n.

769 {CPPL_VERBOSE_REPORT;
770 #ifdef CPPL_DEBUG
771  if(m!=n){
772  ERROR_REPORT;
773  std::cerr << "This matrix is not a square matrix." << std::endl
774  << "This matrix is (" << m << "x" << n << ")." << std::endl;
775  exit(1);
776  }
777  if(matB.m!=n || matB.n!=n){
778  ERROR_REPORT;
779  std::cerr << "The matrix B is not a square matrix having the same size as \"this\" matrix." << std::endl
780  << "The B matrix is (" << matB.m << "x" << matB.n << ")." << std::endl;
781  exit(1);
782  }
783 #endif//CPPL_DEBUG
784 
785  wr.resize(n);
786  wi.resize(n);
787  vlr.resize(n);
788  vli.resize(n);
789  for(CPPL_INT i=0; i<n; i++){
790  vlr[i].resize(n);
791  vli[i].resize(n);
792  }
793 
794  dgematrix VL(n,n);
795  char JOBVL('V'), JOBVR('n');
796  CPPL_INT LDA(n), LDB(n), LDVL(n), LDVR(1), LWORK(8*n), INFO(1);
797  double *BETA(new double[n]), *VR(NULL), *WORK(new double[LWORK]);
798  dggev_(&JOBVL, &JOBVR, &n, array, &LDA, matB.array, &LDB, &wr[0], &wi[0], BETA, VL.array, &LDVL, VR, &LDVR, WORK, &LWORK, &INFO);
799  delete [] WORK;
800  delete [] VR;
801 
802  //// reforming ////
803  for(CPPL_INT i=0; i<n; i++){
804  wr[i]/=BETA[i];
805  wi[i]/=BETA[i];
806  }
807  delete [] BETA;
808 
809  //// forming ////
810  for(CPPL_INT j=0; j<n; j++){
811  if(fabs(wi[j])<DBL_MIN){
812  for(CPPL_INT i=0; i<n; i++){
813  vlr[j](i) = VL(i,j);
814  vli[j](i) = 0.0;
815  }
816  }
817  else{
818  for(CPPL_INT i=0; i<n; i++){
819  vlr[j](i) = VL(i,j);
820  vli[j](i) =-VL(i,j+1);
821  vlr[j+1](i) = VL(i,j);
822  vli[j+1](i) = VL(i,j+1);
823  }
824  j++;
825  }
826  }
827 
828  if(INFO!=0){
829  WARNING_REPORT;
830  std::cerr << "Serious trouble happend. INFO = " << INFO << "." << std::endl;
831  }
832  return INFO;
833 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
Real Double-precision General Dence Matrix Class.
Definition: dgematrix.hpp:3
friend _dgematrix i(const dgematrix &)
CPPL_INT dgematrix::dgesvd ( dgbmatrix S)
inline

compute the singular value decomposition (SVD)
The argument is dgbmatrix S. S doesn't need to be initialized. S is overwitten and become singular values. This matrix also overwritten.

Definition at line 847 of file dgematrix-lapack.hpp.

References dgbmatrix::array, and dgbmatrix::resize().

850 {CPPL_VERBOSE_REPORT;
851  char JOBU ='N';
852  char JOBVT ='N';
853  // M
854  // N
855  // A
856  CPPL_INT LDA =m;
857  double* U =NULL;
858  S.resize(m,n,0,0);
859  CPPL_INT LDU =1;
860  double* VT =NULL;
861  CPPL_INT LDVT =1;
862  CPPL_INT LWORK =std::max(3*std::min(m,n)+std::max(m,n),5*std::min(m,n));
863  double *WORK =new double[LWORK];
864  CPPL_INT INFO =1;
865 
866  dgesvd_(&JOBU, &JOBVT, &m, &n, array, &LDA, S.array, U, &LDU, VT, &LDVT, WORK, &LWORK, &INFO);
867  delete [] WORK;
868 
869  if(INFO!=0){
870  WARNING_REPORT;
871  std::cerr << "Serious trouble happend. INFO = " << INFO << "." << std::endl;
872  }
873  return INFO;
874 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
double * array
1D array to store matrix data
Definition: dgbmatrix.hpp:13
dgbmatrix & resize(const CPPL_INT &, const CPPL_INT &, const CPPL_INT &, const CPPL_INT &)
CPPL_INT dgematrix::dgesvd ( dcovector S,
dgematrix U,
dgematrix VT 
)
inline

compute the singular value decomposition (SVD)
The arguments are dcocector S, dgematrix U and VT. All of them need not to be initialized. S, U and VT are overwitten and become singular values, left singular vectors, and right singular vectors respectively. This matrix also overwritten.

Definition at line 885 of file dgematrix-lapack.hpp.

References array, dcovector::array, m, n, resize(), and dcovector::resize().

886 {CPPL_VERBOSE_REPORT;
887  char JOBU('A'), JOBVT('A');
888  CPPL_INT LDA(m), LDU(m), LDVT(n), LWORK(std::max(3*std::min(m,n)+std::max(m,n),5*std::min(m,n))), INFO(1);
889  double *WORK(new double[LWORK]);
890  S.resize(std::min(m,n));
891  U.resize(LDU,m);
892  VT.resize(LDVT,n);
893 
894  dgesvd_(&JOBU, &JOBVT, &m, &n, array, &LDA, S.array, U.array, &LDU, VT.array, &LDVT, WORK, &LWORK, &INFO);
895  delete [] WORK;
896 
897  if(INFO!=0){
898  WARNING_REPORT;
899  std::cerr << "Serious trouble happend. INFO = " << INFO << "." << std::endl;
900  }
901  return INFO;
902 }
dgematrix & resize(const CPPL_INT &, const CPPL_INT &)
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
dcovector & resize(const CPPL_INT &, const CPPL_INT=0)
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
double * array
1D array to store vector data
Definition: dcovector.hpp:11
CPPL_INT dgematrix::dgglse ( dgematrix B,
dcovector c,
dcovector d,
dcovector x 
)
inline

solve the linear equality-constrained least squares (LSE) problem
Input matrix and vectors, B, c, and d, are overwitten. This matrix is also overwritten. The solution vector x is to be automatically resized.

Definition at line 915 of file dgematrix-lapack.hpp.

References array, dcovector::array, dcovector::clear(), dcovector::l, m, and dcovector::resize().

921 {CPPL_VERBOSE_REPORT;
922 #ifdef CPPL_DEBUG
923  if(m!=c.l){
924  ERROR_REPORT;
925  std::cerr << "A.m and c.l should be the same." << std::endl
926  << "Your input was A.m=" << m << " and c.l=" << c.l << std::endl;
927  exit(1);
928  }
929  if(B.m!=d.l){
930  ERROR_REPORT;
931  std::cerr << "B.m and d.l should be the same." << std::endl
932  << "Your input was B.m=" << B.m << " and d.l=" << d.l << std::endl;
933  exit(1);
934  }
935  if( !(B.m<=n) || !(n<=m+B.m) ){
936  ERROR_REPORT;
937  std::cerr << "B.m<=A.n<=A.m+B.m should be satisfied." << std::endl
938  << "Your input was B.m=" << B.m << ", A.n=" << n << ", and A.m+B.m=" << m+B.m << std::endl;
939  exit(1);
940  }
941 #endif//CPPL_DEBUG
942 
943  CPPL_INT lwork(-1), info(1);
944  dcovector work(1);
945  x.resize(n);
946 
947  //////// workspace query ////////
948  CPPL_INT lda =std::max(CPPL_INT(1),m);
949  CPPL_INT ldb =std::max(CPPL_INT(1),B.m);
950  dgglse_(&m, &n, &B.m, array, &lda, B.array, &ldb, c.array, d.array, x.array, work.array, &lwork, &info);
951  lwork =CPPL_INT(work(0));
952  work.resize(lwork);
953  info =1;
954 
955  //////// solve ////////
956  dgglse_(&m, &n, &B.m, array, &lda, B.array, &ldb, c.array, d.array, x.array, work.array, &lwork, &info);
957  work.clear();
958 
959  if(info!=0){
960  WARNING_REPORT;
961  std::cerr << "Serious trouble happend. info = " << info << "." << std::endl;
962  }
963  return info;
964 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
CPPL_INT l
vector size
Definition: dcovector.hpp:9
dcovector & resize(const CPPL_INT &, const CPPL_INT=0)
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
double * array
1D array to store vector data
Definition: dcovector.hpp:11
Real Double-precision Column Vector Class.
Definition: dcovector.hpp:3
dgematrix & dgematrix::operator= ( const dgematrix mat)
inline

dgematrix=dgematrix operator

Definition at line 3 of file dgematrix-dgematrix.hpp.

References array, and copy().

4 {CPPL_VERBOSE_REPORT;
5  if(array!=mat.array){ // if it is NOT self substitution
6  copy(mat);
7  }
8  return *this;
9 }
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
void copy(const dgematrix &)
dgematrix & dgematrix::operator= ( const _dgematrix mat)
inline

dgematrix=_dgematrix operator

Definition at line 3 of file dgematrix-_dgematrix.hpp.

References shallow_copy().

4 {CPPL_VERBOSE_REPORT;
5  shallow_copy(mat);
6  return *this;
7 }
void shallow_copy(const _dgematrix &)
dgematrix & dgematrix::operator+= ( const dgematrix mat)
inline

dgematrix+=dgematrix operator

Definition at line 17 of file dgematrix-dgematrix.hpp.

References array, i, m, and n.

18 {CPPL_VERBOSE_REPORT;
19 #ifdef CPPL_DEBUG
20  if(n!=mat.n || m!=mat.m){
21  ERROR_REPORT;
22  std::cerr << "These two matrises can not make a summation." << std::endl
23  << "Your input was (" << m << "x" << n << ") += (" << mat.m << "x" << mat.n << ")." << std::endl;
24  exit(1);
25  }
26 #endif//CPPL_DEBUG
27 
28  const CPPL_INT mn =m*n;
29  for(CPPL_INT i=0; i<mn; i++){
30  array[i]+=mat.array[i];
31  }
32  return *this;
33 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
friend _dgematrix i(const dgematrix &)
dgematrix & dgematrix::operator+= ( const _dgematrix mat)
inline

dgematrix+=_dgematrix operator

Definition at line 15 of file dgematrix-_dgematrix.hpp.

References array, _dgematrix::array, _dgematrix::destroy(), i, _dgematrix::m, m, n, and _dgematrix::n.

16 {CPPL_VERBOSE_REPORT;
17 #ifdef CPPL_DEBUG
18  if(n!=mat.n || m!=mat.m){
19  ERROR_REPORT;
20  std::cerr << "These two matrises can not make a summation." << std::endl
21  << "Your input was (" << m << "x" << n << ") += (" << mat.m << "x" << mat.n << ")." << std::endl;
22  exit(1);
23  }
24 #endif//CPPL_DEBUG
25 
26  const CPPL_INT mn =m*n;
27  for(CPPL_INT i=0; i<mn; i++){
28  array[i]+=mat.array[i];
29  }
30 
31  mat.destroy();
32  return *this;
33 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
CPPL_INT m
matrix row size
Definition: _dgematrix.hpp:9
double * array
1D array to store matrix data
Definition: _dgematrix.hpp:11
CPPL_INT n
matrix column size
Definition: _dgematrix.hpp:10
void destroy() const
friend _dgematrix i(const dgematrix &)
dgematrix & dgematrix::operator+= ( const dsymatrix mat)
inline

dgematrix+=dsymatrix operator

Definition at line 3 of file dgematrix-dsymatrix.hpp.

References i, m, dsymatrix::n, n, and operator()().

4 {CPPL_VERBOSE_REPORT;
5 #ifdef CPPL_DEBUG
6  if(n!=mat.n || m!=mat.n){
7  ERROR_REPORT;
8  std::cerr << "These two matrises can not make a summation." << std::endl
9  << "Your input was (" << m << "x" << n << ") += (" << mat.n << "x" << mat.n << ")." << std::endl;
10  exit(1);
11  }
12 #endif//CPPL_DEBUG
13 
14  for(CPPL_INT i=0; i<m; i++){
15  for( CPPL_INT j=0; j<n; j++){
16  operator() (i,j) += mat(i,j);
17  }
18  }
19 
20  return *this;
21 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double & operator()(const CPPL_INT &, const CPPL_INT &)
Definition: dgematrix-io.hpp:3
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
CPPL_INT n
matrix column size
Definition: dsymatrix.hpp:10
friend _dgematrix i(const dgematrix &)
dgematrix & dgematrix::operator+= ( const _dsymatrix mat)
inline

dgematrix+=_dsymatrix operator

Definition at line 3 of file dgematrix-_dsymatrix.hpp.

References _dsymatrix::destroy(), i, m, n, _dsymatrix::n, and operator()().

4 {CPPL_VERBOSE_REPORT;
5 #ifdef CPPL_DEBUG
6  if(n!=mat.n || m!=mat.n){
7  ERROR_REPORT;
8  std::cerr << "These two matrises can not make a summation." << std::endl
9  << "Your input was (" << m << "x" << n << ") += (" << mat.n << "x" << mat.n << ")." << std::endl;
10  exit(1);
11  }
12 #endif//CPPL_DEBUG
13 
14  for(CPPL_INT i=0; i<m; i++){
15  for(CPPL_INT j=0; j<n; j++){
16  operator()(i,j) += mat(i,j);
17  }
18  }
19 
20  mat.destroy();
21  return *this;
22 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
void destroy() const
double & operator()(const CPPL_INT &, const CPPL_INT &)
Definition: dgematrix-io.hpp:3
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
friend _dgematrix i(const dgematrix &)
CPPL_INT n
matrix column size
Definition: _dsymatrix.hpp:11
dgematrix & dgematrix::operator+= ( const dgbmatrix mat)
inline

dgematrix+=dgbmatrix operator

Definition at line 3 of file dgematrix-dgbmatrix.hpp.

References i, dgbmatrix::kl, dgbmatrix::ku, m, dgbmatrix::m, dgbmatrix::n, n, and operator()().

4 {CPPL_VERBOSE_REPORT;
5 #ifdef CPPL_DEBUG
6  if(n!=mat.n || m!=mat.m){
7  ERROR_REPORT;
8  std::cerr << "These two matrises can not make a summation." << std::endl
9  << "Your input was (" << m << "x" << n << ") += (" << mat.m << "x" << mat.n << ")." << std::endl;
10  exit(1);
11  }
12 #endif//CPPL_DEBUG
13 
14  for(CPPL_INT i=0; i<mat.m; i++){
15  const CPPL_INT jmax =std::min(n,i+mat.ku+1);
16  for(CPPL_INT j=std::max(CPPL_INT(0),i-mat.kl); j<jmax; j++){
17  operator()(i,j) += mat(i,j);
18  }
19  }
20 
21  return *this;
22 }
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double & operator()(const CPPL_INT &, const CPPL_INT &)
Definition: dgematrix-io.hpp:3
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
friend _dgematrix i(const dgematrix &)
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
dgematrix & dgematrix::operator+= ( const _dgbmatrix mat)
inline

dgematrix+=_dgbmatrix operator

Definition at line 3 of file dgematrix-_dgbmatrix.hpp.

References _dgbmatrix::destroy(), i, _dgbmatrix::kl, _dgbmatrix::ku, m, _dgbmatrix::m, _dgbmatrix::n, n, and operator()().

4 {CPPL_VERBOSE_REPORT;
5 #ifdef CPPL_DEBUG
6  if(n!=mat.n || m!=mat.m){
7  ERROR_REPORT;
8  std::cerr << "These two matrises can not make a summation." << std::endl
9  << "Your input was (" << m << "x" << n << ") += (" << mat.m << "x" << mat.n << ")." << std::endl;
10  exit(1);
11  }
12 #endif//CPPL_DEBUG
13 
14  for(CPPL_INT i=0; i<mat.m; i++){
15  const CPPL_INT jmax =std::min(n,i+mat.ku+1);
16  for(CPPL_INT j=std::max(CPPL_INT(0),i-mat.kl); j<jmax; j++){
17  operator()(i,j) += mat(i,j);
18  }
19  }
20 
21  mat.destroy();
22  return *this;
23 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
CPPL_INT ku
upper band width
Definition: _dgbmatrix.hpp:12
void destroy() const
double & operator()(const CPPL_INT &, const CPPL_INT &)
Definition: dgematrix-io.hpp:3
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
CPPL_INT kl
lower band width
Definition: _dgbmatrix.hpp:11
CPPL_INT n
matrix column size
Definition: _dgbmatrix.hpp:10
friend _dgematrix i(const dgematrix &)
CPPL_INT m
matrix row size
Definition: _dgbmatrix.hpp:9
dgematrix& dgematrix::operator+= ( const dgsmatrix )
inline
dgematrix& dgematrix::operator+= ( const _dgsmatrix )
inline
dgematrix& dgematrix::operator+= ( const dssmatrix )
inline
dgematrix& dgematrix::operator+= ( const _dssmatrix )
inline
dgematrix & dgematrix::operator-= ( const dgematrix mat)
inline

dgematrix operator-=

Definition at line 37 of file dgematrix-dgematrix.hpp.

References array, i, m, and n.

38 {CPPL_VERBOSE_REPORT;
39 #ifdef CPPL_DEBUG
40  if(n!=mat.n || m!=mat.m){
41  ERROR_REPORT;
42  std::cerr << "These two matrises can not make a sutraction." << std::endl
43  << "Your input was (" << m << "x" << n << ") -= (" << mat.m << "x" << mat.n << ")." << std::endl;
44  exit(1);
45  }
46 #endif//CPPL_DEBUG
47 
48  const CPPL_INT mn =m*n;
49  for(CPPL_INT i=0; i<mn; i++){
50  array[i]-=mat.array[i];
51  }
52  return *this;
53 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
friend _dgematrix i(const dgematrix &)
dgematrix & dgematrix::operator-= ( const _dgematrix mat)
inline

dgematrix-=_dgematrix operator

Definition at line 37 of file dgematrix-_dgematrix.hpp.

References array, _dgematrix::array, _dgematrix::destroy(), i, _dgematrix::m, m, n, and _dgematrix::n.

38 {CPPL_VERBOSE_REPORT;
39 #ifdef CPPL_DEBUG
40  if(n!=mat.n || m!=mat.m){
41  ERROR_REPORT;
42  std::cerr << "These two matrises can not make a sutraction." << std::endl
43  << "Your input was (" << m << "x" << n << ") -= (" << mat.m << "x" << mat.n << ")." << std::endl;
44  exit(1);
45  }
46 #endif//CPPL_DEBUG
47 
48  const CPPL_INT mn =m*n;
49  for(CPPL_INT i=0; i<mn; i++){
50  array[i]-=mat.array[i];
51  }
52 
53  mat.destroy();
54  return *this;
55 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
CPPL_INT m
matrix row size
Definition: _dgematrix.hpp:9
double * array
1D array to store matrix data
Definition: _dgematrix.hpp:11
CPPL_INT n
matrix column size
Definition: _dgematrix.hpp:10
void destroy() const
friend _dgematrix i(const dgematrix &)
dgematrix & dgematrix::operator-= ( const dsymatrix mat)
inline

dgematrix-=dsymatrix operator

Definition at line 25 of file dgematrix-dsymatrix.hpp.

References i, m, dsymatrix::n, n, and operator()().

26 {CPPL_VERBOSE_REPORT;
27 #ifdef CPPL_DEBUG
28  if(n!=mat.n || m!=mat.n){
29  ERROR_REPORT;
30  std::cerr << "These two matrises can not make a sutraction." << std::endl
31  << "Your input was (" << m << "x" << n << ") -= (" << mat.n << "x" << mat.n << ")." << std::endl;
32  exit(1);
33  }
34 #endif//CPPL_DEBUG
35 
36  for(CPPL_INT i=0; i<m; i++){
37  for(CPPL_INT j=0; j<n; j++){
38  operator() (i,j) -= mat(i,j);
39  }
40  }
41 
42  return *this;
43 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double & operator()(const CPPL_INT &, const CPPL_INT &)
Definition: dgematrix-io.hpp:3
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
CPPL_INT n
matrix column size
Definition: dsymatrix.hpp:10
friend _dgematrix i(const dgematrix &)
dgematrix & dgematrix::operator-= ( const _dsymatrix mat)
inline

dgematrix-=_dsymatrix operator

Definition at line 26 of file dgematrix-_dsymatrix.hpp.

References _dsymatrix::destroy(), i, m, n, _dsymatrix::n, and operator()().

27 {CPPL_VERBOSE_REPORT;
28 #ifdef CPPL_DEBUG
29  if(n!=mat.n || m!=mat.n){
30  ERROR_REPORT;
31  std::cerr << "These two matrises can not make a sutraction." << std::endl
32  << "Your input was (" << m << "x" << n << ") -= (" << mat.n << "x" << mat.n << ")." << std::endl;
33  exit(1);
34  }
35 #endif//CPPL_DEBUG
36 
37  for(CPPL_INT i=0; i<m;i++){
38  for(CPPL_INT j=0; j<n; j++){
39  operator()(i,j) -= mat(i,j);
40  }
41  }
42 
43  mat.destroy();
44  return *this;
45 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
void destroy() const
double & operator()(const CPPL_INT &, const CPPL_INT &)
Definition: dgematrix-io.hpp:3
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
friend _dgematrix i(const dgematrix &)
CPPL_INT n
matrix column size
Definition: _dsymatrix.hpp:11
dgematrix & dgematrix::operator-= ( const dgbmatrix mat)
inline

dgematrix-=dgbmatrix operator

Definition at line 26 of file dgematrix-dgbmatrix.hpp.

References i, dgbmatrix::kl, dgbmatrix::ku, m, dgbmatrix::m, dgbmatrix::n, n, and operator()().

27 {CPPL_VERBOSE_REPORT;
28 #ifdef CPPL_DEBUG
29  if(n!=mat.n || m!=mat.m){
30  ERROR_REPORT;
31  std::cerr << "These two matrises can not make a subtraction." << std::endl
32  << "Your input was (" << m << "x" << n << ") -= (" << mat.m << "x" << mat.n << ")." << std::endl;
33  exit(1);
34  }
35 #endif//CPPL_DEBUG
36 
37  for(CPPL_INT i=0; i<mat.m; i++){
38  const CPPL_INT jmax =std::min(n,i+mat.ku+1);
39  for(CPPL_INT j=std::max(CPPL_INT(0),i-mat.kl); j<jmax; j++){
40  operator()(i,j) -= mat(i,j);
41  }
42  }
43 
44  return *this;
45 }
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double & operator()(const CPPL_INT &, const CPPL_INT &)
Definition: dgematrix-io.hpp:3
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
friend _dgematrix i(const dgematrix &)
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
dgematrix & dgematrix::operator-= ( const _dgbmatrix mat)
inline

dgematrix-=_dgbmatrix operator

Definition at line 27 of file dgematrix-_dgbmatrix.hpp.

References _dgbmatrix::destroy(), i, _dgbmatrix::kl, _dgbmatrix::ku, m, _dgbmatrix::m, _dgbmatrix::n, n, and operator()().

28 {CPPL_VERBOSE_REPORT;
29 #ifdef CPPL_DEBUG
30  if(n!=mat.n || m!=mat.m){
31  ERROR_REPORT;
32  std::cerr << "These two matrises can not make a subtraction." << std::endl
33  << "Your input was (" << m << "x" << n << ") -= (" << mat.m << "x" << mat.n << ")." << std::endl;
34  exit(1);
35  }
36 #endif//CPPL_DEBUG
37 
38  for(CPPL_INT i=0; i<mat.m; i++){
39  const CPPL_INT jmax =std::min(n,i+mat.ku+1);
40  for(CPPL_INT j=std::max(CPPL_INT(0),i-mat.kl); j<jmax; j++){
41  operator()(i,j) -= mat(i,j);
42  }
43  }
44 
45  mat.destroy();
46  return *this;
47 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
CPPL_INT ku
upper band width
Definition: _dgbmatrix.hpp:12
void destroy() const
double & operator()(const CPPL_INT &, const CPPL_INT &)
Definition: dgematrix-io.hpp:3
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
CPPL_INT kl
lower band width
Definition: _dgbmatrix.hpp:11
CPPL_INT n
matrix column size
Definition: _dgbmatrix.hpp:10
friend _dgematrix i(const dgematrix &)
CPPL_INT m
matrix row size
Definition: _dgbmatrix.hpp:9
dgematrix& dgematrix::operator-= ( const dgsmatrix )
inline
dgematrix& dgematrix::operator-= ( const _dgsmatrix )
inline
dgematrix& dgematrix::operator-= ( const dssmatrix )
inline
dgematrix& dgematrix::operator-= ( const _dssmatrix )
inline
dgematrix & dgematrix::operator*= ( const dgematrix mat)
inline

dgematrix operator*=

Definition at line 57 of file dgematrix-dgematrix.hpp.

References array, m, n, and swap.

58 {CPPL_VERBOSE_REPORT;
59 #ifdef CPPL_DEBUG
60  if(n!=mat.m){
61  ERROR_REPORT;
62  std::cerr << "These two matrises can not make a product." << std::endl
63  << "Your input was (" << m << "x" << n << ") *= (" << mat.m << "x" << mat.n << ")." << std::endl;
64  exit(1);
65  }
66 #endif//CPPL_DEBUG
67 
68  dgematrix newmat( m, mat.n );
69  char transa ='n';
70  char transb ='n';
71  double alpha =1.;
72  double beta =0.;
73 
74  dgemm_( &transa, &transb, &m, &mat.n, &n, &alpha, array, &m, mat.array, &mat.m, &beta, newmat.array, &m );
75 
76  swap(*this,newmat);
77  return *this;
78 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
friend void swap(dgematrix &, dgematrix &)
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
Real Double-precision General Dence Matrix Class.
Definition: dgematrix.hpp:3
dgematrix & dgematrix::operator*= ( const _dgematrix mat)
inline

dgematrix*=_dgematrix operator

Definition at line 59 of file dgematrix-_dgematrix.hpp.

References array, _dgematrix::array, _dgematrix::destroy(), _dgematrix::m, m, _dgematrix::n, n, and swap.

60 {CPPL_VERBOSE_REPORT;
61 #ifdef CPPL_DEBUG
62  if(n!=mat.m){
63  ERROR_REPORT;
64  std::cerr << "These two matrises can not make a product." << std::endl
65  << "Your input was (" << m << "x" << n << ") *= (" << mat.m << "x" << mat.n << ")." << std::endl;
66  exit(1);
67  }
68 #endif//CPPL_DEBUG
69 
70  dgematrix newmat( m, mat.n );
71  char transa ='n';
72  char transb ='n';
73  double alpha =1.;
74  double beta =0.;
75 
76  dgemm_( &transa, &transb, &m, &mat.n, &n, &alpha, array, &m, mat.array, &mat.m, &beta, newmat.array, &m );
77 
78  swap(*this,newmat);
79  mat.destroy();
80  return *this;
81 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
friend void swap(dgematrix &, dgematrix &)
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
Real Double-precision General Dence Matrix Class.
Definition: dgematrix.hpp:3
CPPL_INT m
matrix row size
Definition: _dgematrix.hpp:9
double * array
1D array to store matrix data
Definition: _dgematrix.hpp:11
CPPL_INT n
matrix column size
Definition: _dgematrix.hpp:10
void destroy() const
dgematrix & dgematrix::operator*= ( const dsymatrix mat)
inline

dgematrix*=dsymatrix operator

Definition at line 47 of file dgematrix-dsymatrix.hpp.

References dsymatrix::array, array, m, dsymatrix::n, n, and swap.

48 {CPPL_VERBOSE_REPORT;
49 #ifdef CPPL_DEBUG
50  if(n!=mat.n){
51  ERROR_REPORT;
52  std::cerr << "These two matrises can not make a product." << std::endl
53  << "Your input was (" << m << "x" << n << ") *= (" << mat.n << "x" << mat.n << ")." << std::endl;
54  exit(1);
55  }
56 #endif//CPPL_DEBUG
57 
58  dgematrix newmat( m, mat.n );
59  char side ='R';
60  char uplo ='l';
61  double alpha =1.;
62  double beta =0.;
63 
64  dsymm_( &side, &uplo, &mat.n, &n, &alpha, mat.array, &mat.n, array, &m, &beta, newmat.array, &newmat.m );
65 
66  swap(*this,newmat);
67  return *this;
68 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
friend void swap(dgematrix &, dgematrix &)
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
Real Double-precision General Dence Matrix Class.
Definition: dgematrix.hpp:3
CPPL_INT n
matrix column size
Definition: dsymatrix.hpp:10
double * array
1D array to store matrix data
Definition: dsymatrix.hpp:11
dgematrix & dgematrix::operator*= ( const _dsymatrix mat)
inline

dgematrix*=_dsymatrix operator

Definition at line 49 of file dgematrix-_dsymatrix.hpp.

References array, _dsymatrix::array, _dsymatrix::destroy(), m, n, _dsymatrix::n, and swap.

50 {CPPL_VERBOSE_REPORT;
51 #ifdef CPPL_DEBUG
52  if(n!=mat.n){
53  ERROR_REPORT;
54  std::cerr << "These two matrises can not make a product." << std::endl
55  << "Your input was (" << m << "x" << n << ") *= (" << mat.n << "x" << mat.n << ")." << std::endl;
56  exit(1);
57  }
58 #endif//CPPL_DEBUG
59 
60  dgematrix newmat( m, mat.n );
61  char side ='R';
62  char uplo ='l';
63  double alpha =1.;
64  double beta =0.;
65 
66  dsymm_( &side, &uplo, &mat.n, &n, &alpha, mat.array, &mat.n, array, &m, &beta, newmat.array, &newmat.m );
67 
68  swap(*this,newmat);
69  mat.destroy();
70  return *this;
71 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
void destroy() const
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
friend void swap(dgematrix &, dgematrix &)
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
Real Double-precision General Dence Matrix Class.
Definition: dgematrix.hpp:3
double * array
1D array to store matrix data
Definition: _dsymatrix.hpp:12
CPPL_INT n
matrix column size
Definition: _dsymatrix.hpp:11
dgematrix & dgematrix::operator*= ( const dgbmatrix mat)
inline

dgematrix*=dgbmatrix operator

Definition at line 49 of file dgematrix-dgbmatrix.hpp.

References i, dgbmatrix::kl, dgbmatrix::ku, m, dgbmatrix::m, n, dgbmatrix::n, operator()(), swap, and zero().

50 {CPPL_VERBOSE_REPORT;
51 #ifdef CPPL_DEBUG
52  if(n!=mat.m){
53  ERROR_REPORT;
54  std::cerr << "These two matrises can not make a product." << std::endl
55  << "Your input was (" << m << "x" << n << ") *= (" << mat.m << "x" << mat.n << ")." << std::endl;
56  exit(1);
57  }
58 #endif//CPPL_DEBUG
59  dgematrix newmat(m,mat.n);
60  newmat.zero();
61 
62  for(CPPL_INT i=0; i<newmat.m; i++){
63  for(CPPL_INT j=0; j<newmat.n; j++){
64  const CPPL_INT kmax =std::min(mat.m,j+mat.kl+1);
65  for(CPPL_INT k=std::max(CPPL_INT(0),j-mat.ku); k<kmax; k++){
66  newmat(i,j) += operator()(i,k)*mat(k,j);
67  }
68  }
69  }
70 
71  swap(*this,newmat);
72  return *this;
73 }
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
friend void swap(dgematrix &, dgematrix &)
double & operator()(const CPPL_INT &, const CPPL_INT &)
Definition: dgematrix-io.hpp:3
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
Real Double-precision General Dence Matrix Class.
Definition: dgematrix.hpp:3
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
CPPL_INT m
matrix row size
Definition: _dgematrix.hpp:9
friend _dgematrix i(const dgematrix &)
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
dgematrix & dgematrix::operator*= ( const _dgbmatrix mat)
inline

dgematrix*=_dgbmatrix operator

Definition at line 50 of file dgematrix-_dgbmatrix.hpp.

References _dgbmatrix::destroy(), i, _dgbmatrix::kl, _dgbmatrix::ku, m, _dgbmatrix::m, n, _dgbmatrix::n, operator()(), swap, and zero().

51 {CPPL_VERBOSE_REPORT;
52 #ifdef CPPL_DEBUG
53  if(n!=mat.m){
54  ERROR_REPORT;
55  std::cerr << "These two matrises can not make a product." << std::endl
56  << "Your input was (" << m << "x" << n << ") *= (" << mat.m << "x" << mat.n << ")." << std::endl;
57  exit(1);
58  }
59 #endif//CPPL_DEBUG
60 
61  dgematrix newmat(m,mat.n);
62  newmat.zero();
63 
64  for(CPPL_INT i=0; i<newmat.m; i++){
65  for(CPPL_INT j=0; j<newmat.n; j++){
66  const CPPL_INT kmax =std::min(mat.m,j+mat.kl+1);
67  for(CPPL_INT k=std::max(CPPL_INT(0),j-mat.ku); k<kmax; k++){
68  newmat(i,j) += operator()(i,k)*mat(k,j);
69  }
70  }
71  }
72 
73  swap(*this, newmat);
74  mat.destroy();
75  return *this;
76 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
CPPL_INT ku
upper band width
Definition: _dgbmatrix.hpp:12
void destroy() const
friend void swap(dgematrix &, dgematrix &)
double & operator()(const CPPL_INT &, const CPPL_INT &)
Definition: dgematrix-io.hpp:3
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
Real Double-precision General Dence Matrix Class.
Definition: dgematrix.hpp:3
CPPL_INT kl
lower band width
Definition: _dgbmatrix.hpp:11
CPPL_INT n
matrix column size
Definition: _dgbmatrix.hpp:10
CPPL_INT m
matrix row size
Definition: _dgematrix.hpp:9
friend _dgematrix i(const dgematrix &)
CPPL_INT m
matrix row size
Definition: _dgbmatrix.hpp:9
dgematrix& dgematrix::operator*= ( const dgsmatrix )
inline
dgematrix& dgematrix::operator*= ( const _dgsmatrix )
inline
dgematrix& dgematrix::operator*= ( const dssmatrix )
inline
dgematrix& dgematrix::operator*= ( const _dssmatrix )
inline
dgematrix & dgematrix::operator*= ( const double &  d)
inline

dgematrix*=double operator

Definition at line 3 of file dgematrix-double.hpp.

References array, m, and n.

4 {CPPL_VERBOSE_REPORT;
5  CPPL_INT mn =m*n;
6  CPPL_INT inc =1;
7  dscal_(&mn, &d, array, &inc);
8  return *this;
9 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
dgematrix & dgematrix::operator/= ( const double &  d)
inline

dgematrix/=double operator

Definition at line 13 of file dgematrix-double.hpp.

References array, m, and n.

14 {CPPL_VERBOSE_REPORT;
15  CPPL_INT mn =m*n;
16  double dinv =1./d;
17  CPPL_INT inc =1;
18  dscal_(&mn, &dinv, array, &inc);
19  return *this;
20 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10

Friends And Related Function Documentation

std::ostream& operator<< ( std::ostream &  s,
const dgematrix mat 
)
friend

Definition at line 63 of file dgematrix-io.hpp.

64 {CPPL_VERBOSE_REPORT;
65  for(CPPL_INT i=0; i<mat.m; i++){
66  for(CPPL_INT j=0; j<mat.n; j++){
67  s << " " << mat(i,j);
68  }
69  s << std::endl;
70  }
71  return s;
72 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
friend _dgematrix i(const dgematrix &)
void swap ( dgematrix A,
dgematrix B 
)
friend

swap two matrices

Definition at line 164 of file dgematrix-misc.hpp.

Referenced by dgels(), and operator*=().

165 {CPPL_VERBOSE_REPORT;
166  CPPL_INT A_m =A.m, A_n =A.n;
167  double* A_array =A.array;
168  double** A_darray=A.darray;
169  A.m=B.m; A.n=B.n; A.array=B.array; A.darray=B.darray;
170  B.m=A_m; B.n=A_n; B.array=A_array; B.darray=A_darray;
171 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double ** darray
array of pointers of column head addresses
Definition: dgematrix.hpp:12
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
_dgematrix _ ( dgematrix mat)
friend

convert user object to smart-temporary object

Definition at line 175 of file dgematrix-misc.hpp.

Referenced by col(), row(), and to_zgematrix().

176 {CPPL_VERBOSE_REPORT;
177  _dgematrix newmat;
178 
179  //////// shallow copy ////////
180  newmat.m =mat.m;
181  newmat.n =mat.n;
182  newmat.array =mat.array;
183  newmat.darray =mat.darray;
184 
185  //////// nullify ////////
186  mat.m =0;
187  mat.n =0;
188  mat.array =NULL;
189  mat.darray =NULL;
190 
191  return newmat;
192 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double ** darray
array of pointers of column head addresses
Definition: dgematrix.hpp:12
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
double ** darray
array of pointers of column head addresses
Definition: _dgematrix.hpp:12
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
CPPL_INT m
matrix row size
Definition: _dgematrix.hpp:9
double * array
1D array to store matrix data
Definition: _dgematrix.hpp:11
(DO NOT USE) Smart-temporary Real Double-precision General Dence Matrix Class
Definition: _dgematrix.hpp:3
CPPL_INT n
matrix column size
Definition: _dgematrix.hpp:10
_dgematrix t ( const dgematrix mat)
friend

return transposed dgematrix

Definition at line 3 of file dgematrix-calc.hpp.

4 {CPPL_VERBOSE_REPORT;
5  dgematrix newmat(mat.n,mat.m);
6 
7  for(CPPL_INT i=0; i<newmat.m; i++){
8  for(CPPL_INT j=0; j<newmat.n; j++){
9  newmat(i,j) =mat(j,i);
10  }
11  }
12 
13  return _(newmat);
14 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
Real Double-precision General Dence Matrix Class.
Definition: dgematrix.hpp:3
CPPL_INT m
matrix row size
Definition: _dgematrix.hpp:9
friend _dgematrix i(const dgematrix &)
friend _dgematrix _(dgematrix &)
_dgematrix i ( const dgematrix mat)
friend

return its inverse matrix

Definition at line 18 of file dgematrix-calc.hpp.

Referenced by chsign(), col(), copy(), dgeev(), dgels(), dgematrix(), dggev(), identity(), operator()(), operator*=(), operator+=(), operator-=(), read(), resize(), set(), to_zgematrix(), write(), and zero().

19 {CPPL_VERBOSE_REPORT;
20 #ifdef CPPL_DEBUG
21  if(mat.m!=mat.n){
22  ERROR_REPORT;
23  std::cerr << "This matrix is not square and has no inverse matrix." << std::endl
24  << "Your input was (" << mat.m << "x" << mat.n << ")." << std::endl;
25  exit(1);
26  }
27 #endif//CPPL_DEBUG
28 
29  dgematrix mat_cp(mat), mat_inv(mat.m,mat.n);
30  mat_inv.identity();
31  mat_cp.dgesv(mat_inv);
32 
33  return _(mat_inv);
34 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
Real Double-precision General Dence Matrix Class.
Definition: dgematrix.hpp:3
friend _dgematrix _(dgematrix &)
void idamax ( CPPL_INT &  i,
CPPL_INT &  j,
const dgematrix mat 
)
friend

search the index of element having the largest absolute value in 0-based numbering system

Definition at line 43 of file dgematrix-calc.hpp.

44 {CPPL_VERBOSE_REPORT;
45  CPPL_INT mn =mat.m*mat.n;
46  CPPL_INT inc =1;
47  CPPL_INT index =idamax_(&mn, mat.array, &inc) -1;
48  i =index%mat.m;
49  j =index/mat.m;
50 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
friend _dgematrix i(const dgematrix &)
double damax ( const dgematrix mat)
friend

return its largest absolute value

Definition at line 54 of file dgematrix-calc.hpp.

55 {CPPL_VERBOSE_REPORT;
56  CPPL_INT mn =mat.m*mat.n;
57  CPPL_INT inc =1;
58  return mat.array[idamax_(&mn, mat.array, &inc) -1];
59 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
const dgematrix& operator+ ( const dgematrix mat)
friend

+dgematrix operator

Definition at line 3 of file dgematrix-unary.hpp.

4 {CPPL_VERBOSE_REPORT;
5  return mat;
6 }
_dgematrix operator- ( const dgematrix mat)
friend

-dgematrix operator

Definition at line 10 of file dgematrix-unary.hpp.

11 {CPPL_VERBOSE_REPORT;
12  dgematrix newmat(mat.m,mat.n);
13  for(CPPL_INT i=0; i<newmat.m*newmat.n; i++){ newmat.array[i]=-mat.array[i]; }
14  return _(newmat);
15 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
Real Double-precision General Dence Matrix Class.
Definition: dgematrix.hpp:3
CPPL_INT m
matrix row size
Definition: _dgematrix.hpp:9
friend _dgematrix i(const dgematrix &)
friend _dgematrix _(dgematrix &)
_dgematrix operator+ ( const dgematrix matA,
const dgematrix matB 
)
friend

dgematrix+dgematrix operator

Definition at line 86 of file dgematrix-dgematrix.hpp.

87 {CPPL_VERBOSE_REPORT;
88 #ifdef CPPL_DEBUG
89  if(matA.n!=matB.n || matA.m!=matB.m){
90  ERROR_REPORT;
91  std::cerr << "These two matrises can not make a summation." << std::endl
92  << "Your input was (" << matA.m << "x" << matA.n << ") + (" << matB.m << "x" << matB.n << ")." << std::endl;
93  exit(1);
94  }
95 #endif//CPPL_DEBUG
96 
97  dgematrix newmat(matA.m,matA.n);
98 
99  const CPPL_INT mn =newmat.m*newmat.n;
100  for(CPPL_INT i=0; i<mn; i++){
101  newmat.array[i] =matA.array[i]+matB.array[i];
102  }
103 
104  return _(newmat);
105 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
Real Double-precision General Dence Matrix Class.
Definition: dgematrix.hpp:3
friend _dgematrix i(const dgematrix &)
friend _dgematrix _(dgematrix &)
_dgematrix operator+ ( const dgematrix matA,
const _dgematrix matB 
)
friend

dgematrix+_dgematrix operator

Definition at line 89 of file dgematrix-_dgematrix.hpp.

90 {CPPL_VERBOSE_REPORT;
91 #ifdef CPPL_DEBUG
92  if(matA.n!=matB.n || matA.m!=matB.m){
93  ERROR_REPORT;
94  std::cerr << "These two matrises can not make a summation." << std::endl
95  << "Your input was (" << matA.m << "x" << matA.n << ") + (" << matB.m << "x" << matB.n << ")." << std::endl;
96  exit(1);
97  }
98 #endif//CPPL_DEBUG
99 
100  const CPPL_INT mn =matA.m*matA.n;
101  for(CPPL_INT i=0; i<mn; i++){
102  matB.array[i] +=matA.array[i];
103  }
104 
105  return matB;
106 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
CPPL_INT m
matrix row size
Definition: _dgematrix.hpp:9
double * array
1D array to store matrix data
Definition: _dgematrix.hpp:11
CPPL_INT n
matrix column size
Definition: _dgematrix.hpp:10
friend _dgematrix i(const dgematrix &)
_dgematrix operator+ ( const dgematrix matA,
const dsymatrix matB 
)
friend

dgematrix+dsymatrix operator

Definition at line 76 of file dgematrix-dsymatrix.hpp.

77 {CPPL_VERBOSE_REPORT;
78 #ifdef CPPL_DEBUG
79  if(matA.n!=matB.n || matA.m!=matB.n){
80  ERROR_REPORT;
81  std::cerr << "These two matrises can not make a summation." << std::endl
82  << "Your input was (" << matA.m << "x" << matA.n << ") + (" << matB.n << "x" << matB.n << ")." << std::endl;
83  exit(1);
84  }
85 #endif//CPPL_DEBUG
86 
87  dgematrix newmat(matA);
88  for(CPPL_INT i=0; i<matA.m; i++){
89  for(CPPL_INT j=0; j<matA.n; j++){
90  newmat(i,j) += matB(i,j);
91  }
92  }
93 
94  return _(newmat);
95 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
Real Double-precision General Dence Matrix Class.
Definition: dgematrix.hpp:3
CPPL_INT n
matrix column size
Definition: dsymatrix.hpp:10
friend _dgematrix i(const dgematrix &)
friend _dgematrix _(dgematrix &)
_dgematrix operator+ ( const dgematrix matA,
const _dsymatrix matB 
)
friend

dgematrix+_dsymatrix operator

Definition at line 79 of file dgematrix-_dsymatrix.hpp.

80 {CPPL_VERBOSE_REPORT;
81 #ifdef CPPL_DEBUG
82  if(matA.n!=matB.n || matA.m!=matB.n){
83  ERROR_REPORT;
84  std::cerr << "These two matrises can not make a summation." << std::endl
85  << "Your input was (" << matA.m << "x" << matA.n << ") + (" << matB.n << "x" << matB.n << ")." << std::endl;
86  exit(1);
87  }
88 #endif//CPPL_DEBUG
89 
90  dgematrix newmat(matA);
91  for(CPPL_INT i=0; i<matA.m; i++){
92  for(CPPL_INT j=0; j<matA.n; j++){
93  newmat(i,j) += matB(i,j);
94  }
95  }
96 
97  matB.destroy();
98  return _(newmat);
99 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
void destroy() const
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
Real Double-precision General Dence Matrix Class.
Definition: dgematrix.hpp:3
friend _dgematrix i(const dgematrix &)
friend _dgematrix _(dgematrix &)
CPPL_INT n
matrix column size
Definition: _dsymatrix.hpp:11
_dgematrix operator+ ( const dgematrix matA,
const dgbmatrix matB 
)
friend

dgematrix+dgbmatrix operator

Definition at line 81 of file dgematrix-dgbmatrix.hpp.

82 {CPPL_VERBOSE_REPORT;
83 #ifdef CPPL_DEBUG
84  if(matA.n!=matB.n || matA.m!=matB.m){
85  ERROR_REPORT;
86  std::cerr << "These two matrises can not make a summation." << std::endl
87  << "Your input was (" << matA.m << "x" << matA.n << ") + (" << matB.m << "x" << matB.n << ")." << std::endl;
88  exit(1);
89  }
90 #endif//CPPL_DEBUG
91 
92  dgematrix newmat(matA);
93 
94  for(CPPL_INT i=0; i<matB.m; i++){
95  const CPPL_INT jmax =std::min(matB.n,i+matB.ku+1);
96  for(CPPL_INT j=std::max(CPPL_INT(0),i-matB.kl); j<jmax; j++){
97  newmat(i,j) += matB(i,j);
98  }
99  }
100 
101  return _(newmat);
102 }
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
Real Double-precision General Dence Matrix Class.
Definition: dgematrix.hpp:3
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
friend _dgematrix i(const dgematrix &)
friend _dgematrix _(dgematrix &)
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
_dgematrix operator+ ( const dgematrix matA,
const _dgbmatrix matB 
)
friend

dgematrix+_dgbmatrix operator

Definition at line 84 of file dgematrix-_dgbmatrix.hpp.

85 {CPPL_VERBOSE_REPORT;
86 #ifdef CPPL_DEBUG
87  if(matA.n!=matB.n || matA.m!=matB.m){
88  ERROR_REPORT;
89  std::cerr << "These two matrises can not make a summation." << std::endl
90  << "Your input was (" << matA.m << "x" << matA.n << ") + (" << matB.m << "x" << matB.n << ")." << std::endl;
91  exit(1);
92  }
93 #endif//CPPL_DEBUG
94 
95  dgematrix newmat(matA);
96 
97  for(CPPL_INT i=0; i<matB.m; i++){
98  const CPPL_INT jmax =std::min(matB.n,i+matB.ku+1);
99  for(CPPL_INT j=std::max(CPPL_INT(0),i-matB.kl); j<jmax; j++){
100  newmat(i,j) += matB(i,j);
101  }
102  }
103 
104  matB.destroy();
105  return _(newmat);
106 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
CPPL_INT ku
upper band width
Definition: _dgbmatrix.hpp:12
void destroy() const
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
Real Double-precision General Dence Matrix Class.
Definition: dgematrix.hpp:3
CPPL_INT kl
lower band width
Definition: _dgbmatrix.hpp:11
CPPL_INT n
matrix column size
Definition: _dgbmatrix.hpp:10
friend _dgematrix i(const dgematrix &)
friend _dgematrix _(dgematrix &)
CPPL_INT m
matrix row size
Definition: _dgbmatrix.hpp:9
_dgematrix operator+ ( const dgematrix matA,
const dgsmatrix matB 
)
friend

dgematrix+dgsmatrix operator

Definition at line 3 of file dgematrix-dgsmatrix.hpp.

4 {CPPL_VERBOSE_REPORT;
5 #ifdef CPPL_DEBUG
6  if(matA.m!=matB.m || matA.n!=matB.n){
7  ERROR_REPORT;
8  std::cerr << "These two matrises can not make a summation." << std::endl
9  << "Your input was (" << matA.m << "x" << matA.n << ") + (" << matB.m << "x" << matB.n << ")." << std::endl;
10  exit(1);
11  }
12 #endif//CPPL_DEBUG
13 
14  dgematrix newmat(matA);
15 
16  const std::vector<dcomponent>::const_iterator matB_data_end =matB.data.end();
17  for(std::vector<dcomponent>::const_iterator it=matB.data.begin(); it!=matB_data_end; it++){
18  newmat(it->i,it->j) += it->v;
19  }
20 
21  return _(newmat);
22 }
std::vector< dcomponent > data
matrix data
Definition: dgsmatrix.hpp:11
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
CPPL_INT n
matrix column size
Definition: dgsmatrix.hpp:10
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
Real Double-precision General Dence Matrix Class.
Definition: dgematrix.hpp:3
friend _dgematrix _(dgematrix &)
CPPL_INT m
matrix row size
Definition: dgsmatrix.hpp:9
_dgematrix operator+ ( const dgematrix matA,
const _dgsmatrix matB 
)
friend

dgematrix+_dgsmatrix operator

Definition at line 3 of file dgematrix-_dgsmatrix.hpp.

4 {CPPL_VERBOSE_REPORT;
5 #ifdef CPPL_DEBUG
6  if(matA.m!=matB.m || matA.n!=matB.n){
7  ERROR_REPORT;
8  std::cerr << "These two matrises can not make a summation." << std::endl
9  << "Your input was (" << matA.m << "x" << matA.n << ") + (" << matB.m << "x" << matB.n << ")." << std::endl;
10  exit(1);
11  }
12 #endif//CPPL_DEBUG
13 
14  dgematrix newmat(matA);
15 
16  const std::vector<dcomponent>::const_iterator matB_data_end =matB.data.end();
17  for(std::vector<dcomponent>::const_iterator it=matB.data.begin(); it!=matB_data_end; it++){
18  newmat(it->i,it->j) += it->v;
19  }
20 
21  matB.destroy();
22  return _(newmat);
23 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
CPPL_INT n
matrix column size
Definition: _dgsmatrix.hpp:10
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
Real Double-precision General Dence Matrix Class.
Definition: dgematrix.hpp:3
CPPL_INT m
matrix row size
Definition: _dgsmatrix.hpp:9
void destroy() const
std::vector< dcomponent > data
matrix data
Definition: _dgsmatrix.hpp:11
friend _dgematrix _(dgematrix &)
_dgematrix operator+ ( const dgematrix ,
const dssmatrix  
)
friend
_dgematrix operator+ ( const dgematrix ,
const _dssmatrix  
)
friend
_dgematrix operator- ( const dgematrix matA,
const dgematrix matB 
)
friend

dgematrix-dgematrix operator

Definition at line 109 of file dgematrix-dgematrix.hpp.

110 {CPPL_VERBOSE_REPORT;
111 #ifdef CPPL_DEBUG
112  if(matA.n!=matB.n || matA.m!=matB.m){
113  ERROR_REPORT;
114  std::cerr << "These two matrises can not make a subtraction." << std::endl
115  << "Your input was (" << matA.m << "x" << matA.n << ") - (" << matB.m << "x" << matB.n << ")." << std::endl;
116  exit(1);
117  }
118 #endif//CPPL_DEBUG
119 
120  dgematrix newmat(matA.m,matA.n);
121 
122  const CPPL_INT mn =newmat.m*newmat.n;
123  for(CPPL_INT i=0; i<mn; i++){
124  newmat.array[i] =matA.array[i]-matB.array[i];
125  }
126 
127  return _(newmat);
128 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
Real Double-precision General Dence Matrix Class.
Definition: dgematrix.hpp:3
friend _dgematrix i(const dgematrix &)
friend _dgematrix _(dgematrix &)
_dgematrix operator- ( const dgematrix matA,
const _dgematrix matB 
)
friend

dgematrix-_dgematrix operator

Definition at line 110 of file dgematrix-_dgematrix.hpp.

111 {CPPL_VERBOSE_REPORT;
112 #ifdef CPPL_DEBUG
113  if(matA.n!=matB.n || matA.m!=matB.m){
114  ERROR_REPORT;
115  std::cerr << "These two matrises can not make a subtraction." << std::endl
116  << "Your input was (" << matA.m << "x" << matA.n << ") - (" << matB.m << "x" << matB.n << ")." << std::endl;
117  exit(1);
118  }
119 #endif//CPPL_DEBUG
120 
121  const CPPL_INT mn =matA.m*matA.n;
122  for(CPPL_INT i=0; i<mn; i++){
123  matB.array[i] =matA.array[i]-matB.array[i];
124  }
125 
126  return matB;
127 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
CPPL_INT m
matrix row size
Definition: _dgematrix.hpp:9
double * array
1D array to store matrix data
Definition: _dgematrix.hpp:11
CPPL_INT n
matrix column size
Definition: _dgematrix.hpp:10
friend _dgematrix i(const dgematrix &)
_dgematrix operator- ( const dgematrix matA,
const dsymatrix matB 
)
friend

dgematrix-dsymatrix operator

Definition at line 99 of file dgematrix-dsymatrix.hpp.

100 {CPPL_VERBOSE_REPORT;
101 #ifdef CPPL_DEBUG
102  if(matA.n!=matB.n || matA.m!=matB.n){
103  ERROR_REPORT;
104  std::cerr << "These two matrises can not make a subtraction." << std::endl
105  << "Your input was (" << matA.m << "x" << matA.n << ") - (" << matB.n << "x" << matB.n << ")." << std::endl;
106  exit(1);
107  }
108 #endif//CPPL_DEBUG
109 
110  dgematrix newmat(matA);
111  for(CPPL_INT i=0; i<matA.m; i++){
112  for(CPPL_INT j=0; j<matA.n; j++){
113  newmat(i,j) -= matB(i,j);
114  }
115  }
116 
117  return _(newmat);
118 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
Real Double-precision General Dence Matrix Class.
Definition: dgematrix.hpp:3
CPPL_INT n
matrix column size
Definition: dsymatrix.hpp:10
friend _dgematrix i(const dgematrix &)
friend _dgematrix _(dgematrix &)
_dgematrix operator- ( const dgematrix matA,
const _dsymatrix matB 
)
friend

dgematrix-_dsymatrix operator

Definition at line 103 of file dgematrix-_dsymatrix.hpp.

104 {CPPL_VERBOSE_REPORT;
105 #ifdef CPPL_DEBUG
106  if(matA.n!=matB.n || matA.m!=matB.n){
107  ERROR_REPORT;
108  std::cerr << "These two matrises can not make a subtraction." << std::endl
109  << "Your input was (" << matA.m << "x" << matA.n << ") - (" << matB.n << "x" << matB.n << ")." << std::endl;
110  exit(1);
111  }
112 #endif//CPPL_DEBUG
113 
114  dgematrix newmat(matA);
115  for(CPPL_INT i=0; i<matA.m; i++){
116  for(CPPL_INT j=0; j<matA.n; j++){
117  newmat(i,j) -= matB(i,j);
118  }
119  }
120 
121  matB.destroy();
122  return _(newmat);
123 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
void destroy() const
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
Real Double-precision General Dence Matrix Class.
Definition: dgematrix.hpp:3
friend _dgematrix i(const dgematrix &)
friend _dgematrix _(dgematrix &)
CPPL_INT n
matrix column size
Definition: _dsymatrix.hpp:11
_dgematrix operator- ( const dgematrix matA,
const dgbmatrix matB 
)
friend

dgematrix-dgbmatrix operator

Definition at line 106 of file dgematrix-dgbmatrix.hpp.

107 {CPPL_VERBOSE_REPORT;
108 #ifdef CPPL_DEBUG
109  if(matA.n!=matB.n || matA.m!=matB.m){
110  ERROR_REPORT;
111  std::cerr << "These two matrises can not make a summation." << std::endl
112  << "Your input was (" << matA.m << "x" << matA.n << ") + (" << matB.m << "x" << matB.n << ")." << std::endl;
113  exit(1);
114  }
115 #endif//CPPL_DEBUG
116 
117  dgematrix newmat(matA);
118 
119  for(CPPL_INT i=0; i<matB.m; i++){
120  const CPPL_INT jmax =std::min(matB.n,i+matB.ku+1);
121  for(CPPL_INT j=std::max(CPPL_INT(0),i-matB.kl); j<jmax; j++){
122  newmat(i,j) -= matB(i,j);
123  }
124  }
125 
126  return _(newmat);
127 }
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
Real Double-precision General Dence Matrix Class.
Definition: dgematrix.hpp:3
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
friend _dgematrix i(const dgematrix &)
friend _dgematrix _(dgematrix &)
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
_dgematrix operator- ( const dgematrix matA,
const _dgbmatrix matB 
)
friend

dgematrix-_dgbmatrix operator

Definition at line 110 of file dgematrix-_dgbmatrix.hpp.

111 {CPPL_VERBOSE_REPORT;
112 #ifdef CPPL_DEBUG
113  if(matA.n!=matB.n || matA.m!=matB.m){
114  ERROR_REPORT;
115  std::cerr << "These two matrises can not make a summation." << std::endl
116  << "Your input was (" << matA.m << "x" << matA.n << ") + (" << matB.m << "x" << matB.n << ")." << std::endl;
117  exit(1);
118  }
119 #endif//CPPL_DEBUG
120 
121  dgematrix newmat(matA);
122 
123  for(CPPL_INT i=0; i<matB.m; i++){
124  const CPPL_INT jmax =std::min(matB.n,i+matB.ku+1);
125  for(CPPL_INT j=std::max(CPPL_INT(0),i-matB.kl); j<jmax; j++){
126  newmat(i,j) -= matB(i,j);
127  }
128  }
129 
130  matB.destroy();
131  return _(newmat);
132 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
CPPL_INT ku
upper band width
Definition: _dgbmatrix.hpp:12
void destroy() const
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
Real Double-precision General Dence Matrix Class.
Definition: dgematrix.hpp:3
CPPL_INT kl
lower band width
Definition: _dgbmatrix.hpp:11
CPPL_INT n
matrix column size
Definition: _dgbmatrix.hpp:10
friend _dgematrix i(const dgematrix &)
friend _dgematrix _(dgematrix &)
CPPL_INT m
matrix row size
Definition: _dgbmatrix.hpp:9
_dgematrix operator- ( const dgematrix matA,
const dgsmatrix matB 
)
friend

dgematrix-dgsmatrix operator

Definition at line 26 of file dgematrix-dgsmatrix.hpp.

27 {CPPL_VERBOSE_REPORT;
28 #ifdef CPPL_DEBUG
29  if(matA.m!=matB.m || matA.n!=matB.n){
30  ERROR_REPORT;
31  std::cerr << "These two matrises can not make a subtraction." << std::endl
32  << "Your input was (" << matA.m << "x" << matA.n << ") - (" << matB.m << "x" << matB.n << ")." << std::endl;
33  exit(1);
34  }
35 #endif//CPPL_DEBUG
36 
37  dgematrix newmat(matA);
38 
39  const std::vector<dcomponent>::const_iterator matB_data_end =matB.data.end();
40  for(std::vector<dcomponent>::const_iterator it=matB.data.begin(); it!=matB_data_end; it++){
41  newmat(it->i,it->j) -= it->v;
42  }
43 
44  return _(newmat);
45 }
std::vector< dcomponent > data
matrix data
Definition: dgsmatrix.hpp:11
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
CPPL_INT n
matrix column size
Definition: dgsmatrix.hpp:10
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
Real Double-precision General Dence Matrix Class.
Definition: dgematrix.hpp:3
friend _dgematrix _(dgematrix &)
CPPL_INT m
matrix row size
Definition: dgsmatrix.hpp:9
_dgematrix operator- ( const dgematrix matA,
const _dgsmatrix matB 
)
friend

dgematrix-_dgsmatrix operator

Definition at line 27 of file dgematrix-_dgsmatrix.hpp.

28 {CPPL_VERBOSE_REPORT;
29 #ifdef CPPL_DEBUG
30  if(matA.m!=matB.m || matA.n!=matB.n){
31  ERROR_REPORT;
32  std::cerr << "These two matrises can not make a subtraction." << std::endl
33  << "Your input was (" << matA.m << "x" << matA.n << ") - (" << matB.m << "x" << matB.n << ")." << std::endl;
34  exit(1);
35  }
36 #endif//CPPL_DEBUG
37 
38  dgematrix newmat(matA);
39 
40  const std::vector<dcomponent>::const_iterator matB_data_end =matB.data.end();
41  for(std::vector<dcomponent>::const_iterator it=matB.data.begin(); it!=matB_data_end; it++){
42  newmat(it->i,it->j) -= it->v;
43  }
44 
45  matB.destroy();
46  return _(newmat);
47 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
CPPL_INT n
matrix column size
Definition: _dgsmatrix.hpp:10
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
Real Double-precision General Dence Matrix Class.
Definition: dgematrix.hpp:3
CPPL_INT m
matrix row size
Definition: _dgsmatrix.hpp:9
void destroy() const
std::vector< dcomponent > data
matrix data
Definition: _dgsmatrix.hpp:11
friend _dgematrix _(dgematrix &)
_dgematrix operator- ( const dgematrix ,
const dssmatrix  
)
friend
_dgematrix operator- ( const dgematrix ,
const _dssmatrix  
)
friend
_dcovector operator* ( const dgematrix mat,
const dcovector vec 
)
friend

dgematrix*dcovector operator

Definition at line 3 of file dgematrix-dcovector.hpp.

4 {CPPL_VERBOSE_REPORT;
5 #ifdef CPPL_DEBUG
6  if(mat.n!=vec.l){
7  ERROR_REPORT;
8  std::cerr << "These matrix and vector can not make a product." << std::endl
9  << "Your input was (" << mat.m << "x" << mat.n << ") * (" << vec.l << ")." << std::endl;
10  exit(1);
11  }
12 #endif//CPPL_DEBUG
13 
14  dcovector newvec(mat.m);
15  char trans ='n';
16  double alpha =1.;
17  CPPL_INT inc =1;
18  double beta =0.;
19 
20  dgemv_( &trans, &mat.m, &mat.n, &alpha, mat.array, &mat.m, vec.array, &inc, &beta, newvec.array, &inc );
21 
22  return _(newvec);
23 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
CPPL_INT l
vector size
Definition: dcovector.hpp:9
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
double * array
1D array to store vector data
Definition: dcovector.hpp:11
Real Double-precision Column Vector Class.
Definition: dcovector.hpp:3
friend _dgematrix _(dgematrix &)
_dcovector operator* ( const dgematrix mat,
const _dcovector vec 
)
friend

dgematrix*_dcovector operator

Definition at line 3 of file dgematrix-_dcovector.hpp.

4 {CPPL_VERBOSE_REPORT;
5 #ifdef CPPL_DEBUG
6  if(mat.n!=vec.l){
7  ERROR_REPORT;
8  std::cerr << "These matrix and vector can not make a product." << std::endl
9  << "Your input was (" << mat.m << "x" << mat.n << ") * (" << vec.l << ")." << std::endl;
10  exit(1);
11  }
12 #endif//CPPL_DEBUG
13 
14  dcovector newvec(mat.m);
15  char trans ='n';
16  double alpha =1.;
17  CPPL_INT inc =1;
18  double beta =0.;
19 
20  dgemv_( &trans, &mat.m, &mat.n, &alpha, mat.array, &mat.m, vec.array, &inc, &beta, newvec.array, &inc );
21 
22  vec.destroy();
23  return _(newvec);
24 }
CPPL_INT l
vector size
Definition: _dcovector.hpp:9
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
void destroy() const
Real Double-precision Column Vector Class.
Definition: dcovector.hpp:3
friend _dgematrix _(dgematrix &)
double * array
1D array to store vector data
Definition: _dcovector.hpp:11
_dgematrix operator* ( const dgematrix matA,
const dgematrix matB 
)
friend

dgematrix*dgematrix operator

Definition at line 132 of file dgematrix-dgematrix.hpp.

133 {CPPL_VERBOSE_REPORT;
134 #ifdef CPPL_DEBUG
135  if(matA.n!=matB.m){
136  ERROR_REPORT;
137  std::cerr << "These two matrises can not make a product." << std::endl
138  << "Your input was (" << matA.m << "x" << matA.n << ") * (" << matB.m << "x" << matB.n << ")." << std::endl;
139  exit(1);
140  }
141 #endif//CPPL_DEBUG
142 
143  dgematrix newmat( matA.m, matB.n );
144  char transa ='n';
145  char transb ='n';
146  double alpha =1.;
147  double beta =0.;
148 
149  dgemm_( &transa, &transb, &matA.m, &matB.n, &matA.n, &alpha, matA.array, &matA.m, matB.array, &matB.m, &beta, newmat.array, &matA.m );
150 
151  return _(newmat);
152 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
Real Double-precision General Dence Matrix Class.
Definition: dgematrix.hpp:3
friend _dgematrix _(dgematrix &)
_dgematrix operator* ( const dgematrix matA,
const _dgematrix matB 
)
friend

dgematrix*_dgematrix operator

Definition at line 131 of file dgematrix-_dgematrix.hpp.

132 {CPPL_VERBOSE_REPORT;
133 #ifdef CPPL_DEBUG
134  if(matA.n!=matB.m){
135  ERROR_REPORT;
136  std::cerr << "These two matrises can not make a product." << std::endl
137  << "Your input was (" << matA.m << "x" << matA.n << ") * (" << matB.m << "x" << matB.n << ")." << std::endl;
138  exit(1);
139  }
140 #endif//CPPL_DEBUG
141 
142  dgematrix newmat( matA.m, matB.n );
143  char transa ='n';
144  char transb ='n';
145  double alpha =1.;
146  double beta =0.;
147 
148  dgemm_( &transa, &transb, &matA.m, &matB.n, &matA.n, &alpha, matA.array, &matA.m, matB.array, &matB.m, &beta, newmat.array, &matA.m );
149 
150  matB.destroy();
151  return _(newmat);
152 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
Real Double-precision General Dence Matrix Class.
Definition: dgematrix.hpp:3
CPPL_INT m
matrix row size
Definition: _dgematrix.hpp:9
double * array
1D array to store matrix data
Definition: _dgematrix.hpp:11
CPPL_INT n
matrix column size
Definition: _dgematrix.hpp:10
void destroy() const
friend _dgematrix _(dgematrix &)
_dgematrix operator* ( const dgematrix matA,
const dsymatrix matB 
)
friend

dgematrix*dsymatrix operator

Definition at line 122 of file dgematrix-dsymatrix.hpp.

123 {CPPL_VERBOSE_REPORT;
124 #ifdef CPPL_DEBUG
125  if(matA.n!=matB.n){
126  ERROR_REPORT;
127  std::cerr << "These two matrises can not make a product." << std::endl
128  << "Your input was (" << matA.m << "x" << matA.n << ") * (" << matB.n << "x" << matB.n << ")." << std::endl;
129  exit(1);
130  }
131 #endif//CPPL_DEBUG
132 
133  dgematrix newmat( matA.m, matB.n );
134  char side ='R';
135  char uplo ='l';
136  double alpha =1.;
137  double beta =0.;
138 
139  dsymm_( &side, &uplo, &newmat.m, &newmat.n, &alpha, matB.array, &matB.n, matA.array, &matA.m, &beta, newmat.array, &newmat.m );
140 
141  return _(newmat);
142 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
Real Double-precision General Dence Matrix Class.
Definition: dgematrix.hpp:3
CPPL_INT n
matrix column size
Definition: dsymatrix.hpp:10
double * array
1D array to store matrix data
Definition: dsymatrix.hpp:11
friend _dgematrix _(dgematrix &)
_dgematrix operator* ( const dgematrix matA,
const _dsymatrix matB 
)
friend

dgematrix*_dsymatrix operator

Definition at line 127 of file dgematrix-_dsymatrix.hpp.

128 {CPPL_VERBOSE_REPORT;
129 #ifdef CPPL_DEBUG
130  if(matA.n!=matB.n){
131  ERROR_REPORT;
132  std::cerr << "These two matrises can not make a product." << std::endl
133  << "Your input was (" << matA.m << "x" << matA.n << ") * (" << matB.n << "x" << matB.n << ")." << std::endl;
134  exit(1);
135  }
136 #endif//CPPL_DEBUG
137 
138  dgematrix newmat( matA.m, matB.n );
139  char side ='R';
140  char uplo ='l';
141  double alpha =1.;
142  double beta =0.;
143 
144  dsymm_( &side, &uplo, &newmat.m, &newmat.n, &alpha, matB.array, &matB.n, matA.array, &matA.m, &beta, newmat.array, &newmat.m );
145 
146  matB.destroy();
147  return _(newmat);
148 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
void destroy() const
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
Real Double-precision General Dence Matrix Class.
Definition: dgematrix.hpp:3
double * array
1D array to store matrix data
Definition: _dsymatrix.hpp:12
friend _dgematrix _(dgematrix &)
CPPL_INT n
matrix column size
Definition: _dsymatrix.hpp:11
_dgematrix operator* ( const dgematrix matA,
const dgbmatrix matB 
)
friend

dgematrix*dgbmatrix operator

Definition at line 131 of file dgematrix-dgbmatrix.hpp.

132 {CPPL_VERBOSE_REPORT;
133 #ifdef CPPL_DEBUG
134  if(matA.n!=matB.m){
135  ERROR_REPORT;
136  std::cerr << "These two matrises can not make a product." << std::endl
137  << "Your input was (" << matA.m << "x" << matA.n << ") * (" << matB.m << "x" << matB.n << ")." << std::endl;
138  exit(1);
139  }
140 #endif//CPPL_DEBUG
141 
142  dgematrix newmat( matA.m, matB.n );
143  newmat.zero();
144 
145  for(CPPL_INT i=0; i<newmat.m; i++){
146  for(CPPL_INT j=0; j<newmat.n; j++){
147  const CPPL_INT kmax =std::min(matB.m,j+matB.kl+1);
148  for(CPPL_INT k=std::max(CPPL_INT(0),j-matB.ku); k<kmax; k++){
149  newmat(i,j) += matA(i,k)*matB(k,j);
150  }
151  }
152  }
153 
154  return _(newmat);
155 }
CPPL_INT m
matrix row size
Definition: dgbmatrix.hpp:9
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
Real Double-precision General Dence Matrix Class.
Definition: dgematrix.hpp:3
CPPL_INT kl
lower band width
Definition: dgbmatrix.hpp:11
CPPL_INT ku
upper band width
Definition: dgbmatrix.hpp:12
CPPL_INT m
matrix row size
Definition: _dgematrix.hpp:9
friend _dgematrix i(const dgematrix &)
friend _dgematrix _(dgematrix &)
CPPL_INT n
matrix column size
Definition: dgbmatrix.hpp:10
_dgematrix operator* ( const dgematrix matA,
const _dgbmatrix matB 
)
friend

dgematrix*_dgbmatrix operator

Definition at line 136 of file dgematrix-_dgbmatrix.hpp.

137 {CPPL_VERBOSE_REPORT;
138 #ifdef CPPL_DEBUG
139  if(matA.n!=matB.m){
140  ERROR_REPORT;
141  std::cerr << "These two matrises can not make a product." << std::endl
142  << "Your input was (" << matA.m << "x" << matA.n << ") * (" << matB.m << "x" << matB.n << ")." << std::endl;
143  exit(1);
144  }
145 #endif//CPPL_DEBUG
146 
147  dgematrix newmat( matA.m, matB.n );
148  newmat.zero();
149 
150  for(CPPL_INT i=0; i<newmat.m; i++){
151  for(CPPL_INT j=0; j<newmat.n; j++){
152  const CPPL_INT kmax =std::min(matB.m,j+matB.kl+1);
153  for(CPPL_INT k=std::max(CPPL_INT(0),j-matB.ku); k<kmax; k++){
154  newmat(i,j) += matA(i,k)*matB(k,j);
155  }
156  }
157  }
158 
159  matB.destroy();
160  return _(newmat);
161 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
CPPL_INT ku
upper band width
Definition: _dgbmatrix.hpp:12
void destroy() const
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
Real Double-precision General Dence Matrix Class.
Definition: dgematrix.hpp:3
CPPL_INT kl
lower band width
Definition: _dgbmatrix.hpp:11
CPPL_INT n
matrix column size
Definition: _dgbmatrix.hpp:10
CPPL_INT m
matrix row size
Definition: _dgematrix.hpp:9
friend _dgematrix i(const dgematrix &)
friend _dgematrix _(dgematrix &)
CPPL_INT m
matrix row size
Definition: _dgbmatrix.hpp:9
_dgematrix operator* ( const dgematrix matA,
const dgsmatrix matB 
)
friend

dgematrix*dgsmatrix operator

Definition at line 49 of file dgematrix-dgsmatrix.hpp.

50 {CPPL_VERBOSE_REPORT;
51 #ifdef CPPL_DEBUG
52  if(matA.n!=matB.m){
53  ERROR_REPORT;
54  std::cerr << "These two matrises can not make a product." << std::endl
55  << "Your input was (" << matA.m << "x" << matA.n << ") * (" << matB.m << "x" << matB.n << ")." << std::endl;
56  exit(1);
57  }
58 #endif//CPPL_DEBUG
59 
60  dgematrix newmat(matA.m, matB.n);
61  newmat.zero();
62 
63  const std::vector<dcomponent>::const_iterator matB_data_end =matB.data.end();
64  for(std::vector<dcomponent>::const_iterator it=matB.data.begin(); it!=matB_data_end; it++){
65  for(CPPL_INT i=0; i<matA.m; i++){
66  newmat(i,it->j) += matA(i,it->i)*it->v;
67  }
68  }
69 
70  return _(newmat);
71 }
std::vector< dcomponent > data
matrix data
Definition: dgsmatrix.hpp:11
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
CPPL_INT n
matrix column size
Definition: dgsmatrix.hpp:10
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
Real Double-precision General Dence Matrix Class.
Definition: dgematrix.hpp:3
friend _dgematrix i(const _dgematrix &)
friend _dgematrix i(const dgematrix &)
friend _dgematrix _(dgematrix &)
CPPL_INT m
matrix row size
Definition: dgsmatrix.hpp:9
_dgematrix operator* ( const dgematrix matA,
const _dgsmatrix matB 
)
friend

dgematrix*_dgsmatrix operator

Definition at line 51 of file dgematrix-_dgsmatrix.hpp.

52 {CPPL_VERBOSE_REPORT;
53 #ifdef CPPL_DEBUG
54  if(matA.n!=matB.m){
55  ERROR_REPORT;
56  std::cerr << "These two matrises can not make a product." << std::endl
57  << "Your input was (" << matA.m << "x" << matA.n << ") * (" << matB.m << "x" << matB.n << ")." << std::endl;
58  exit(1);
59  }
60 #endif//CPPL_DEBUG
61 
62  dgematrix newmat(matA.m, matB.n);
63  newmat.zero();
64 
65  const std::vector<dcomponent>::const_iterator matB_data_end =matB.data.end();
66  for(std::vector<dcomponent>::const_iterator it=matB.data.begin(); it!=matB_data_end; it++){
67  for(CPPL_INT i=0; i<matA.m; i++){
68  newmat(i,it->j) += matA(i,it->i)*it->v;
69  }
70  }
71 
72  matB.destroy();
73  return _(newmat);
74 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
CPPL_INT n
matrix column size
Definition: _dgsmatrix.hpp:10
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
Real Double-precision General Dence Matrix Class.
Definition: dgematrix.hpp:3
friend _dgematrix i(const _dgematrix &)
CPPL_INT m
matrix row size
Definition: _dgsmatrix.hpp:9
void destroy() const
std::vector< dcomponent > data
matrix data
Definition: _dgsmatrix.hpp:11
friend _dgematrix i(const dgematrix &)
friend _dgematrix _(dgematrix &)
_dgematrix operator* ( const dgematrix ,
const dssmatrix  
)
friend
_dgematrix operator* ( const dgematrix ,
const _dssmatrix  
)
friend
_dgematrix operator* ( const dgematrix mat,
const double &  d 
)
friend

dgematrix*double operator

Definition at line 28 of file dgematrix-double.hpp.

29 {CPPL_VERBOSE_REPORT;
30  dgematrix newmat(mat.m, mat.n);
31 
32  const CPPL_INT mn =mat.m*mat.n;
33  for(CPPL_INT i=0; i<mn; i++){
34  newmat.array[i] =mat.array[i]*d;
35  }
36 
37  return _(newmat);
38 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
Real Double-precision General Dence Matrix Class.
Definition: dgematrix.hpp:3
friend _dgematrix i(const dgematrix &)
friend _dgematrix _(dgematrix &)
_dgematrix operator/ ( const dgematrix mat,
const double &  d 
)
friend

dgematrix/double operator

Definition at line 42 of file dgematrix-double.hpp.

43 {CPPL_VERBOSE_REPORT;
44  dgematrix newmat(mat.m, mat.n);
45 
46  const CPPL_INT mn =mat.m*mat.n;
47  for(CPPL_INT i=0; i<mn; i++){
48  newmat.array[i] =mat.array[i]/d;
49  }
50 
51  return _(newmat);
52 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
Real Double-precision General Dence Matrix Class.
Definition: dgematrix.hpp:3
friend _dgematrix i(const dgematrix &)
friend _dgematrix _(dgematrix &)
_drovector operator% ( const dgematrix matA,
const dgematrix matB 
)
friend

dgematrixdgematrix operator

Definition at line 156 of file dgematrix-dgematrix.hpp.

157 {CPPL_VERBOSE_REPORT;
158 #ifdef CPPL_DEBUG
159  if(matA.m!=matB.m || matA.n!=matB.n){
160  ERROR_REPORT;
161  std::cerr << "These two matrises can not make a product." << std::endl
162  << "Your input was (" << matA.m << "x" << matA.n << ") % (" << matB.m << "x" << matB.n << ")." << std::endl;
163  exit(1);
164  }
165 #endif//CPPL_DEBUG
166 
167  drovector newvec( matA.n );
168 
169  newvec.zero();
170  for(CPPL_INT j=0; j<matA.n; j++){
171  for(CPPL_INT i=0; i<matA.m; i++){
172  newvec(j) +=matA(i,j)*matB(i,j);
173  }
174  }
175 
176  return _(newvec);
177 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
Real Double-precision Row Vector Class.
Definition: drovector.hpp:3
friend _dgematrix i(const dgematrix &)
friend _dgematrix _(dgematrix &)
_dgematrix operator* ( const double &  d,
const dgematrix mat 
)
friend

double*dgematrix operator

Definition at line 3 of file double-dgematrix.hpp.

4 {CPPL_VERBOSE_REPORT;
5  dgematrix newmat(mat.m, mat.n);
6 
7  const CPPL_INT size =mat.m*mat.n;
8  for(CPPL_INT i=0; i<size; i++){
9  newmat.array[i] =d*mat.array[i];
10  }
11 
12  return _(newmat);
13 }
CPPL_INT m
matrix row size
Definition: dgematrix.hpp:9
double * array
1D array to store matrix data
Definition: dgematrix.hpp:11
CPPL_INT n
matrix column size
Definition: dgematrix.hpp:10
Real Double-precision General Dence Matrix Class.
Definition: dgematrix.hpp:3
friend _dgematrix i(const dgematrix &)
friend _dgematrix _(dgematrix &)
_dgematrix hadamard ( const dgematrix ,
const dgematrix  
)
friend

Member Data Documentation

CPPL_INT dgematrix::m
CPPL_INT dgematrix::n
double* dgematrix::array
double** dgematrix::darray

array of pointers of column head addresses

Definition at line 12 of file dgematrix.hpp.

Referenced by _(), clear(), copy(), dgematrix(), operator()(), resize(), set(), shallow_copy(), swap(), and ~dgematrix().


The documentation for this class was generated from the following files: