1 #include "../point/matrix.h"
3 #include "../exception/invalidargumentexception.h"
4 #include "../exception/invalidruntimeconfigurationexception.h"
14 Matrix::Matrix(
size_t r,
size_t c, std::vector<double>
const & e):rows(r),cols(c)
35 this->
entries = std::vector<double>(d);
36 for (
size_t i=0; i<d; ++i)
43 for (
size_t i=0; i<this->
rows; ++i)
44 for (
size_t j=0; j<this->
cols; ++j)
45 m(j,i) = (*this)(i,j);
54 size_t n = this->
rows;
57 for (
size_t i=0; i<n; ++i)
59 for (
size_t j=0; j<i; ++j)
61 double sum = (*this)(i,j);
62 for (
size_t k=0; k<j; ++k)
67 double sum = (*this)(i,i);
68 for (
size_t k=0; k<i; ++k)
74 std::cout <<
"cholesky(): i = " << i <<
" sum = " << sum << std::endl;
87 size_t n = this->
rows;
90 for (
size_t i=0; i<n; ++i)
92 for (
size_t j=0; j<i; ++j)
94 double sum = (*this)(i,j);
95 for (
size_t k=0; k<j; ++k)
100 double sum = (*this)(i,i);
101 for (
size_t k=0; k<i; ++k)
102 sum -= c(i,k)*c(i,k);
118 for (
size_t i=0; i<n; ++i)
119 det *= m(i,i)*m(i,i);
129 size_t n = this->
rows;
131 for (
size_t i=0; i<n; ++i)
132 for (
size_t j=0; j<n; ++j)
135 for (
size_t k=0; k<=i && k<=j; ++k)
137 sum += ic(i,k)*ic(j,k);
152 for (
size_t i=0; i<c; ++i)
154 for (
size_t j=0; j<i; ++j)
157 for (
size_t k=0; k<r; ++k)
158 s += gs(k,j)*(*this)(k,i);
159 for (
size_t k=0; k<r; ++k)
160 gs(k,i) -= s*gs(k,j);
163 for (
size_t k=0; k<r; ++k)
164 sum += gs(k,i)*gs(k,i);
165 for (
size_t k=0; k<r; ++k)
166 gs(k,i) /= sqrt(sum);
179 for(
size_t i = 0; i < r; ++i)
180 for(
size_t j = 0; j < c; ++j)
181 (*
this)(i,j) += m(i,j);
194 for(
size_t i = 0; i < r; ++i)
195 for(
size_t j = 0; j < c; ++j)
196 (*
this)(i,j) -= m(i,j);
203 return Matrix(*
this) += m;
208 return Matrix(*
this) -= m;
227 for(
size_t i = 0; i < r; ++i)
228 for(
size_t j = 0; j < c; ++j)
229 for(
size_t k = 0; k < n; ++k)
230 ret(i,j) += (*this)(i,k)*m(k,j);
240 for(
size_t i=0; i<r; ++i)
243 for(
size_t j=0; j<c; ++j)
264 for(
size_t i = 0; i < r; ++i)
265 for(
size_t j = 0; j < c; ++j)
266 ret(i,j) = scalar * m(i,j);
280 for(
size_t j = 0; j < c; ++j)
281 for(
size_t k = 0; k < r; ++k)
282 ret[j] += row[k]*m(k,j);
296 for(
size_t i = 0; i < r; ++i)
297 for(
size_t k = 0; k < c; ++k)
298 ret[i] += m(i,k)*column[k];
306 for (
size_t i=0; i<d; ++i)
318 for (
size_t i=n; i-- > 0; )
320 inv(i,i) = 1/lt(i,i);
321 for (
size_t j=i+1; j<n; ++j)
324 for (
size_t k=i; k<j; ++k)
326 sum += lt(j,k)*inv(k,i);
328 inv(j,i) = -sum*inv(j,j);
Matrix operator-(Matrix const &m) const
Matrix spdInverse() const
size_t numColumns() const
static Matrix ltInverse(Matrix const <)
Matrix & operator-=(Matrix const &m)
Matrix operator*(Matrix const &m) const
Weighted matrix of arbitrary dimension.
std::vector< double > entries
Matrix & operator*=(Matrix const &m)
Matrix(size_t r=0, size_t c=0)
Constructs a matrix.
Matrix & operator+=(Matrix const &m)
double spdDeterminant() const
Matrix operator*(double scalar, Matrix const &m)
static Matrix identity(double dimension)
Weighted point of arbitrary dimension.
Indicates invalid values of arguments.
Matrix gramSchmidt() const
Matrix operator+(Matrix const &m) const
Indicates that a computation entered an invalid configuration state.
std::ostream & operator<<(std::ostream &, FrequencyDistribution &)