33 #ifndef __H__UG__COMMON__MATH_MATRIX_FUNCTIONS_COMMON_IMPL__
34 #define __H__UG__COMMON__MATH_MATRIX_FUNCTIONS_COMMON_IMPL__
50 template <
typename matrix_t>
52 MatAdd(matrix_t& mOut,
const matrix_t& m1,
const matrix_t& m2)
54 typedef typename matrix_t::size_type size_type;
55 for(size_type i = 0; i < mOut.num_rows(); ++i)
56 for(size_type j = 0; j < mOut.num_cols(); ++j)
58 mOut(i,j) = m1(i,j) + m2(i,j);
66 template <
typename matrix_t>
68 MatSubtract(matrix_t& mOut,
const matrix_t& m1,
const matrix_t& m2)
70 typedef typename matrix_t::size_type size_type;
71 for(size_type i = 0; i < mOut.num_rows(); ++i)
72 for(size_type j = 0; j < mOut.num_cols(); ++j)
74 mOut(i,j) = m1(i,j) - m2(i,j);
83 template <
size_t N,
size_t M,
size_t L,
typename T>
88 for(
size_t i = 0; i < N; ++i)
89 for(
size_t j = 0; j < M; ++j)
92 for(
size_t k = 0; k < L; ++k)
94 mOut(i,j) += m1(i,k) * m2(k,j);
99 template <
size_t N,
size_t M,
size_t L,
size_t P,
typename T>
106 for(
size_t i = 0; i < N; ++i)
107 for(
size_t j = 0; j < M; ++j)
110 for(
size_t k = 0; k < L; ++k)
113 for(
size_t l = 0; l < P; ++l)
115 help(k,j) += m2(k,l) * m3(l,j);
118 mOut(i,j) += m1(i,k) * help(k,j);
123 template <
size_t N,
size_t M,
size_t L,
typename T>
128 for(
size_t i = 0; i < N; ++i)
129 for(
size_t j = 0; j < M; ++j)
132 for(
size_t k = 0; k < L; ++k)
134 mOut(i,j) += m1(k,i) * m2(j,k);
139 template <
size_t N,
size_t M,
typename T>
143 for(
size_t i = 0; i < N; ++i)
145 for(
size_t j = 0; j < i; ++j)
148 for(
size_t k = 0; k < M; ++k)
150 mOut(i,j) += m(k,i) * m(k,j);
152 mOut(j,i) = mOut(i,j);
155 for(
size_t k = 0; k < M; ++k)
157 mOut(i,i) += m(k,i) * m(k,i);
162 template <
size_t N,
size_t M,
typename T>
166 for(
size_t i = 0; i < M; ++i)
168 for(
size_t j = 0; j < i; ++j)
171 for(
size_t k = 0; k < N; ++k)
173 mOut(i,j) += m(i,k) * m(j,k);
175 mOut(j,i) = mOut(i,j);
178 for(
size_t k = 0; k < N; ++k)
180 mOut(i,i) += m(i,k) * m(i,k);
185 template <
size_t N,
size_t M,
size_t L,
typename T>
190 for(
size_t i = 0; i < N; ++i)
192 for(
size_t j = 0; j < M; ++j)
195 for(
size_t k = 0; k < L; ++k)
197 mOut(i,j) += m1(i,k) * m2(j,k);
203 template <
size_t N,
size_t M,
size_t L,
typename T>
208 for(
size_t i = 0; i < N; ++i)
210 for(
size_t j = 0; j < M; ++j)
213 for(
size_t k = 0; k < L; ++k)
215 mOut(i,j) += m1(k,i) * m2(k,j);
221 template <
size_t N,
size_t M,
typename T>
228 for(
size_t i = 0; i < N; ++i)
229 for(
size_t j = 0; j < N; ++j)
232 for(
size_t k = 0; k < M; ++k)
235 for(
size_t l = 0; l < M; ++l)
237 help(k,j) += m2(k,l) * m1(j,l);
240 mOut(i,j) += m1(i,k) * help(k,j);
245 template <
size_t N,
size_t M,
typename T>
252 for(
size_t i = 0; i < N; ++i)
253 for(
size_t j = 0; j < N; ++j)
256 for(
size_t k = 0; k < M; ++k)
259 for(
size_t l = 0; l < M; ++l)
261 help(k,j) += m2(k,l) * m1(l,j);
264 mOut(i,j) += m1(k,i) * help(k,j);
273 template <
typename matrix_t>
278 typedef typename matrix_t::size_type size_type;
279 for(size_type i = 0; i < m1.num_rows(); ++i)
280 for(size_type j = 0; j < m1.num_cols(); ++j)
282 norm += m1(i,j) * m2(i,j);
293 template <
typename matrix_t>
299 typedef typename matrix_t::size_type size_type;
300 for(size_type i = 0; i < m.num_rows(); ++i)
302 for(size_type j = 0; j < m.num_cols(); ++j)
306 dev(i,i) -= 1.0 / 3.0 * trace;
315 template <
typename matrix_t>
319 typedef typename matrix_t::size_type size_type;
320 for(size_type i = 0; i < mOut.num_rows(); ++i)
321 for(size_type j = 0; j < mOut.num_cols(); ++j)
323 mOut(i, j) = m(i, j) *
s;
327 template <
typename matrix_t>
331 typedef typename matrix_t::size_type size_type;
332 for(size_type i = 0; i < mOut.num_rows(); ++i)
333 for(size_type j = 0; j < mOut.num_cols(); ++j)
335 mOut(i, j) += m(i, j) *
s;
343 template <
size_t N,
size_t M,
typename T>
348 for(size_type i = 0; i < mOut.
num_rows(); ++i)
349 for(size_type j = 0; j < mOut.
num_cols(); ++j)
351 mOut(i, j) = m(j, i);
355 template <
typename matrix_t>
359 UG_ASSERT(m.num_rows()==m.num_cols(),
"Transpose: Square Matrix needed");
361 typedef typename matrix_t::size_type size_type;
363 for(size_type i = 1; i < m.num_rows(); ++i)
364 for(size_type j = 0; j < i; ++j)
365 _temp(i, j) = m(i, j);
367 for(size_type i = 1; i < m.num_rows(); ++i)
368 for(size_type j = 0; j < i; ++j)
371 for(size_type i = 0; i < m.num_rows()-1; ++i)
372 for(size_type j = i+1; j < m.num_cols(); ++j)
373 m(i, j) = _temp(j, i);
380 template <
size_t N,
typename T>
384 UG_THROW(
"Determinant for matrix of size "<<N<<
"x"<<N<<
" not implemented.");
387 template <
typename T>
394 template <
typename T>
401 template <
typename T>
405 return (m(0,0)*m(1,1) - m(1,0)*m(0,1));
408 template <
typename T>
412 return m(0,0)*m(1,1)*m(2,2)
413 + m(0,1)*m(1,2)*m(2,0)
414 + m(0,2)*m(1,0)*m(2,1)
415 - m(0,0)*m(1,2)*m(2,1)
416 - m(0,1)*m(1,0)*m(2,2)
417 - m(0,2)*m(1,1)*m(2,0);
420 template <
typename T>
424 return m(0,3)*m(1,2)*m(2,1)*m(3,0)-m(0,2)*m(1,3)*m(2,1)*m(3,0)
425 - m(0,3)*m(1,1)*m(2,2)*m(3,0)+m(0,1)*m(1,3)*m(2,2)*m(3,0)
426 + m(0,2)*m(1,1)*m(2,3)*m(3,0)-m(0,1)*m(1,2)*m(2,3)*m(3,0)
427 - m(0,3)*m(1,2)*m(2,0)*m(3,1)+m(0,2)*m(1,3)*m(2,0)*m(3,1)
428 + m(0,3)*m(1,0)*m(2,2)*m(3,1)-m(0,0)*m(1,3)*m(2,2)*m(3,1)
429 - m(0,2)*m(1,0)*m(2,3)*m(3,1)+m(0,0)*m(1,2)*m(2,3)*m(3,1)
430 + m(0,3)*m(1,1)*m(2,0)*m(3,2)-m(0,1)*m(1,3)*m(2,0)*m(3,2)
431 - m(0,3)*m(1,0)*m(2,1)*m(3,2)+m(0,0)*m(1,3)*m(2,1)*m(3,2)
432 + m(0,1)*m(1,0)*m(2,3)*m(3,2)-m(0,0)*m(1,1)*m(2,3)*m(3,2)
433 - m(0,2)*m(1,1)*m(2,0)*m(3,3)+m(0,1)*m(1,2)*m(2,0)*m(3,3)
434 + m(0,2)*m(1,0)*m(2,1)*m(3,3)-m(0,0)*m(1,2)*m(2,1)*m(3,3)
435 - m(0,1)*m(1,0)*m(2,2)*m(3,3)+m(0,0)*m(1,1)*m(2,2)*m(3,3);
442 template <
size_t N,
size_t M,
typename T>
460 template <
typename T>
467 template <
size_t N,
typename T>
474 template <
size_t M,
typename T>
481 template <
typename T>
488 template <
typename T>
495 template <
typename T>
506 template <
size_t N,
size_t M,
typename T>
513 template <
typename T>
520 template <
size_t N,
typename T>
527 template <
size_t M,
typename T>
534 template <
typename T>
541 template <
typename T>
548 template <
typename T>
558 template <
size_t N,
size_t M,
typename T>
562 UG_THROW(
"Inverse for matrix of size "<<M<<
"x"<<N<<
" not implemented. You could use GeneralizedInverse for pseudo-Inverse.");
565 template <
typename T>
570 UG_ASSERT(&mOut != &m,
"Inverse: mOut and m have to be different");
571 UG_ASSERT(det != 0,
"Inverse: determinate is zero, can not Invert Matrix");
572 mOut(0,0) = 1./m(0,0);
577 template <
typename T>
582 UG_ASSERT(&mOut != &m,
"Inverse: mOut and m have to be different");
583 UG_ASSERT(det != 0,
"Inverse: determinate is zero, can not Invert Matrix");
586 mOut(0,0) = m(1,1)*invdet;
587 mOut(1,0) = -m(1,0)*invdet;
588 mOut(0,1) = -m(0,1)*invdet;
589 mOut(1,1) = m(0,0)*invdet;
594 template <
typename T>
599 UG_ASSERT(&mOut != &m,
"Inverse: mOut and m have to be different");
600 UG_ASSERT(det != 0,
"Inverse: determinate is zero, can not Invert Matrix");
603 mOut(0,0) = ( m(1,1)*m(2,2) - m(1,2)*m(2,1)) * invdet;
604 mOut(0,1) = (-m(0,1)*m(2,2) + m(0,2)*m(2,1)) * invdet;
605 mOut(0,2) = ( m(0,1)*m(1,2) - m(0,2)*m(1,1)) * invdet;
606 mOut(1,0) = (-m(1,0)*m(2,2) + m(1,2)*m(2,0)) * invdet;
607 mOut(1,1) = ( m(0,0)*m(2,2) - m(0,2)*m(2,0)) * invdet;
608 mOut(1,2) = (-m(0,0)*m(1,2) + m(0,2)*m(1,0)) * invdet;
609 mOut(2,0) = ( m(1,0)*m(2,1) - m(1,1)*m(2,0)) * invdet;
610 mOut(2,1) = (-m(0,0)*m(2,1) + m(0,1)*m(2,0)) * invdet;
611 mOut(2,2) = ( m(0,0)*m(1,1) - m(0,1)*m(1,0)) * invdet;
620 template <
size_t N,
size_t M,
typename T>
624 UG_THROW(
"InverseTransposed for matrix of size "<<M<<
"x"<<N<<
" not implemented.");
627 template <
typename T>
634 template <
typename T>
639 UG_ASSERT(&mOut != &m,
"InverseTransposed: mOut and m have to be different");
640 UG_ASSERT(det != 0,
"InverseTransposed: determinate is zero, can not Invert Matrix");
643 mOut(0,0) = m(1,1)*invdet;
644 mOut(1,0) = -m(0,1)*invdet;
645 mOut(0,1) = -m(1,0)*invdet;
646 mOut(1,1) = m(0,0)*invdet;
651 template <
typename T>
656 UG_ASSERT(&mOut != &m,
"InverseTransposed: mOut and m have to be different");
657 UG_ASSERT(det != 0,
"InverseTransposed: determinate is zero, can not Invert Matrix");
660 mOut(0,0) = ( m(1,1)*m(2,2) - m(2,1)*m(1,2)) * invdet;
661 mOut(0,1) = (-m(1,0)*m(2,2) + m(2,0)*m(1,2)) * invdet;
662 mOut(0,2) = ( m(1,0)*m(2,1) - m(2,0)*m(1,1)) * invdet;
663 mOut(1,0) = (-m(0,1)*m(2,2) + m(2,1)*m(0,2)) * invdet;
664 mOut(1,1) = ( m(0,0)*m(2,2) - m(2,0)*m(0,2)) * invdet;
665 mOut(1,2) = (-m(0,0)*m(2,1) + m(2,0)*m(0,1)) * invdet;
666 mOut(2,0) = ( m(0,1)*m(1,2) - m(1,1)*m(0,2)) * invdet;
667 mOut(2,1) = (-m(0,0)*m(1,2) + m(1,0)*m(0,2)) * invdet;
668 mOut(2,2) = ( m(0,0)*m(1,1) - m(1,0)*m(0,1)) * invdet;
677 template <
size_t N,
size_t M,
typename T>
683 UG_THROW (
"RightInverse: Type mismatch, cannot right-invert a MxN-matrix with M > N!");
697 template <
typename T>
701 template <
typename T>
705 template <
typename T>
713 template <
size_t N,
size_t M,
typename T>
719 UG_THROW (
"LeftInverse: Type mismatch, cannot right-invert a MxN-matrix with M < N!");
734 template <
typename T>
738 template <
typename T>
742 template <
typename T>
749 template<
size_t N,
size_t M,
typename T>
767 template <
typename T>
774 template <
typename T>
778 return (m(0,0)+m(1,1));
781 template <
typename T>
785 return (m(0,0)+m(1,1)+m(2,2));
792 template <
typename matrix_t>
796 typedef typename matrix_t::size_type size_type;
797 for(size_type i = 0; i < mInOut.num_rows(); ++i)
798 for(size_type j = 0; j < mInOut.num_cols(); ++j)
804 template <
typename matrix_t>
808 typedef typename matrix_t::size_type size_type;
809 for(size_type i = 0; i < mInOut.num_rows(); ++i)
815 template <
typename matrix_t>
819 typedef typename matrix_t::size_type size_type;
820 for(size_type i = 0; i < mOut.num_rows(); ++i)
821 for(size_type j = 0; j < mOut.num_cols(); ++j)
823 mOut(i, j) = m(i,j) +
s;
827 template <
typename matrix_t>
831 typedef typename matrix_t::size_type size_type;
832 for(size_type i = 0; i < mOut.num_rows(); ++i)
833 for(size_type j = 0; j < mOut.num_cols(); ++j)
835 mOut(i, j) = m(i,j) -
s;
839 template <
typename matrix_t>
843 typedef typename matrix_t::size_type size_type;
844 for(size_type i = 0; i < mOut.num_rows(); ++i)
845 for(size_type j = 0; j < mOut.num_cols(); ++j)
847 mOut(i, j) = m(i,j) /
s;
851 template <
typename matrix_t>
855 typedef typename matrix_t::size_type size_type;
856 for(size_type i = 0; i < mOut.num_rows(); ++i)
857 for(size_type j = 0; j < mOut.num_cols(); ++j)
859 mOut(i, j) = m(i,j) *
s;
863 template <
typename matrix_t>
871 template <
typename matrix_t>
882 mOut(1, 1) = c; mOut(1, 2) = -
s;
883 mOut(2, 1) =
s; mOut(2, 2) = c;
886 template <
typename matrix_t>
897 mOut(0, 0) = c; mOut(0, 2) =
s;
898 mOut(2, 0) = -
s; mOut(2, 2) = c;
901 template <
typename matrix_t>
909 mOut(0, 0) = c; mOut(0, 1) = -
s;
910 mOut(1, 0) =
s; mOut(1, 1) = c;
917 template <
typename matrix_t>
927 matrix_t tMat1, tMat2, tMat3;
940 template <
typename matrix_t,
typename vector_t>
944 assert(vector_t::Size == matrix_t::RowSize);
945 assert(vector_t::Size == matrix_t::ColSize);
949 typedef typename matrix_t::size_type size_type_mat;
950 for(size_type_mat i = 0; i < mOut.num_rows(); ++i)
952 for(size_type_mat j = 0; j < mOut.num_cols(); ++j){
953 mOut(i,j) = - 2.0/scalarProd * orthoVec[i] * orthoVec[j];
964 template <
typename matrix_t>
969 typedef typename matrix_t::size_type size_type;
970 for(size_type i = 0; i < m.num_rows(); ++i)
971 for(size_type j = 0; j < m.num_cols(); ++j)
973 norm += m(i,j)*m(i,j);
979 template <
typename matrix_t>
986 template <
typename matrix_t>
991 typedef typename matrix_t::size_type size_type;
992 for(size_type j = 0; j < m.num_cols(); ++j)
995 for(size_type i = 0; i < m.num_rows(); ++i)
999 max = (sum > max) ? sum : max;
1004 template <
typename matrix_t>
1009 typedef typename matrix_t::size_type size_type;
1010 for(size_type i = 0; i < m.num_rows(); ++i)
1013 for(size_type j = 0; j < m.num_cols(); ++j)
1015 sum += fabs(m(i,j));
1017 max = (sum > max) ? sum : max;
1022 template <
typename matrix_t>
1027 typedef typename matrix_t::size_type size_type;
1028 for(size_type i = 0; i < m.num_rows(); ++i)
1029 for(size_type j = 0; j < m.num_cols(); ++j)
1031 max = (m(i,j) > max) ? m(i,j) : max;
1039 template <
size_t N,
size_t M,
typename T>
1043 UG_THROW(
"MaxAbsEigenvalue for matrix of size "<<N<<
"x"<<M<<
" not implemented.");
1046 template <
typename T>
1054 template <
typename T>
1059 minus_p_half = m(0,0)+m(1,1);
1060 val = minus_p_half*minus_p_half - (m(0,0)*m(1,1) - m(0,1)*m(1,0));
1061 UG_ASSERT(val >= 0.0,
"MaxAbsEigenvalues: Complex Eigenvalues???");
1063 if (minus_p_half >=0.0) {
return (minus_p_half + sqrt(val));}
1064 else {
return fabs(minus_p_half-sqrt(val));}
1068 template <
typename matrix_t>
Definition: math_matrix.h:261
T value_type
Definition: math_matrix.h:263
Definition: math_matrix.h:266
T value_type
Definition: math_matrix.h:268
A class for fixed size, dense matrices.
Definition: math_matrix.h:52
std::size_t size_type
Definition: math_matrix.h:66
T value_type
Definition: math_matrix.h:65
std::size_t num_cols() const
Definition: math_matrix.h:216
std::size_t num_rows() const
Definition: math_matrix.h:215
void MatMultiplyMMT(MathMatrix< M, M, T > &mOut, const MathMatrix< M, N, T > &m)
multiply a matrix with its transposed and stores the result in a second one
Definition: math_matrix_functions_common_impl.hpp:164
matrix_t::value_type MatDeviatorTrace(const matrix_t &m, matrix_t &dev)
Definition: math_matrix_functions_common_impl.hpp:295
MathMatrix< N, M, T >::value_type SqrtGramDeterminant(const MathMatrix< N, M, T > &m)
Square root of Gram Determinant of a matrix.
Definition: math_matrix_functions_common_impl.hpp:508
matrix_t::value_type MatContraction(const matrix_t &m1, const matrix_t &m2)
Definition: math_matrix_functions_common_impl.hpp:275
MathMatrix< N, M, T >::value_type RightInverse(MathMatrix< N, M, T > &mOut, const MathMatrix< M, N, T > &m)
Right-Inverse of a Matrix.
Definition: math_matrix_functions_common_impl.hpp:679
void MatMultiplyMBMT(MathMatrix< N, N, T > &mOut, const MathMatrix< N, M, T > &m1, const MathMatrix< M, M, T > &m2)
Definition: math_matrix_functions_common_impl.hpp:223
MathMatrix< N, M, T >::value_type MinAbsEigenvalue(const MathMatrix< M, N, T > &m)
Computes minimum eigenvalue of a (symmetric) matrix.
void MatRotationX(matrix_t &mOut, typename matrix_t::value_type rads)
Fills the matrix with a matrix that rotates around the x-axis in 3 dimensions.
Definition: math_matrix_functions_common_impl.hpp:873
void Transpose(MathMatrix< N, M, T > &mOut, const MathMatrix< M, N, T > &m)
transpose a matrix
Definition: math_matrix_functions_common_impl.hpp:345
MathMatrix< 1, 1, T >::value_type Trace(const MathMatrix< 1, 1, T > &m)
Trace of a Matrix.
Definition: math_matrix_functions_common_impl.hpp:769
matrix_t::value_type MatInftyNorm(matrix_t &m)
Definition: math_matrix_functions_common_impl.hpp:1006
void MatMultiplyMTB(MathMatrix< N, M, T > &mOut, const MathMatrix< L, N, T > &m1, const MathMatrix< L, M, T > &m2)
multiply the transposed of a matrix with a matrix and stores the result in mOut
Definition: math_matrix_functions_common_impl.hpp:205
MathMatrix< N, M, T >::value_type GeneralizedInverse(MathMatrix< N, M, T > &mOut, const MathMatrix< M, N, T > &m)
Definition: math_matrix_functions_common_impl.hpp:751
void MatMultiplyMBT(MathMatrix< N, M, T > &mOut, const MathMatrix< N, L, T > &m1, const MathMatrix< M, L, T > &m2)
multiply a matrix with the transposed of a second one and stores the result in mOut
Definition: math_matrix_functions_common_impl.hpp:187
void MatMultiplyTransposed(MathMatrix< N, M, T > &mOut, const MathMatrix< L, N, T > &m1, const MathMatrix< M, L, T > &m2)
multiply two transposed matrices and stores the result in a third one
Definition: math_matrix_functions_common_impl.hpp:125
void MatIdentity(matrix_t &mOut)
Fills the matrix with the identity matrix.
Definition: math_matrix_functions_common_impl.hpp:865
void MatSet(matrix_t &mInOut, typename matrix_t::value_type s)
Set each matrix entry to a scalar (componentwise)
Definition: math_matrix_functions_common_impl.hpp:794
MathMatrix< N, N, T >::value_type Determinant(const MathMatrix< N, N, T > &m)
Determinant of a matrix.
Definition: math_matrix_functions_common_impl.hpp:382
void MatDiagSet(matrix_t &mInOut, typename matrix_t::value_type s)
Set diagonal entries of a matrix to a scalar (other entries are not changed)
Definition: math_matrix_functions_common_impl.hpp:806
void MatRotationZ(matrix_t &mOut, typename matrix_t::value_type rads)
Fills the matrix with a matrix that rotates around the y-axis in 2 or 3 dimensions.
Definition: math_matrix_functions_common_impl.hpp:903
matrix_t::value_type MatOneNorm(matrix_t &m)
Definition: math_matrix_functions_common_impl.hpp:988
void MatRotationY(matrix_t &mOut, typename matrix_t::value_type rads)
Fills the matrix with a matrix that rotates around the y-axis in 3 dimensions.
Definition: math_matrix_functions_common_impl.hpp:888
matrix_t::value_type MatFrobeniusNormSq(matrix_t &m)
Definition: math_matrix_functions_common_impl.hpp:966
matrix_t::value_type MatMaxNorm(matrix_t &m)
Definition: math_matrix_functions_common_impl.hpp:1024
void MatMultiplyMTM(MathMatrix< N, N, T > &mOut, const MathMatrix< M, N, T > &m)
multiply a transposed matrix with itself and stores the result in a second one
Definition: math_matrix_functions_common_impl.hpp:141
MathMatrix< N, M, T >::value_type GramDeterminant(const MathMatrix< N, M, T > &m)
Gram Determinant of a matrix.
Definition: math_matrix_functions_common_impl.hpp:444
void MatAdd(matrix_t &mOut, const matrix_t &m1, const matrix_t &m2)
adds two matrices and stores the result in a third one
Definition: math_matrix_functions_common_impl.hpp:52
void MatScale(matrix_t &mOut, typename matrix_t::value_type s, const matrix_t &m)
scales a matrix_t
Definition: math_matrix_functions_common_impl.hpp:317
void MatRotationYawPitchRoll(matrix_t &mOut, typename matrix_t::value_type yaw, typename matrix_t::value_type pitch, typename matrix_t::value_type roll)
Creates a rotation matrix given yaw, pitch and roll in radiants.
Definition: math_matrix_functions_common_impl.hpp:919
MathMatrix< N, M, T >::value_type LeftInverse(MathMatrix< N, M, T > &mOut, const MathMatrix< M, N, T > &m)
Left-Inverse of a Matrix.
Definition: math_matrix_functions_common_impl.hpp:715
matrix_t::value_type MatFrobeniusNorm(matrix_t &m)
Definition: math_matrix_functions_common_impl.hpp:981
MathMatrix< N, M, T >::value_type InverseTransposed(MathMatrix< N, M, T > &mOut, const MathMatrix< M, N, T > &m)
Transposed-Inverse of a Matrix (= Inverse-Transposed of a Matrix)
Definition: math_matrix_functions_common_impl.hpp:622
void MatMultiply(MathMatrix< N, M, T > &mOut, const MathMatrix< N, L, T > &m1, const MathMatrix< L, M, T > &m2)
multiply two matrices and stores the result in a third one
Definition: math_matrix_functions_common_impl.hpp:85
void MatMultiplyMTBM(MathMatrix< N, N, T > &mOut, const MathMatrix< M, N, T > &m1, const MathMatrix< M, M, T > &m2)
Definition: math_matrix_functions_common_impl.hpp:247
MathMatrix< N, M, T >::value_type Inverse(MathMatrix< N, M, T > &mOut, const MathMatrix< M, N, T > &m)
Inverse of a matrix.
Definition: math_matrix_functions_common_impl.hpp:560
void MatSubtract(matrix_t &mOut, const matrix_t &m1, const matrix_t &m2)
subtracts m2 from m1 and stores the result in a mOut
Definition: math_matrix_functions_common_impl.hpp:68
MathMatrix< N, M, T >::value_type MaxAbsEigenvalue(const MathMatrix< M, N, T > &m)
Computes maximum eigenvalue of a (symmetric) matrix.
Definition: math_matrix_functions_common_impl.hpp:1041
void MatScaleAppend(matrix_t &mOut, typename matrix_t::value_type s, const matrix_t &m)
scales a matrix_t and adds to result to a second matrix
Definition: math_matrix_functions_common_impl.hpp:329
void MatHouseholder(matrix_t &mOut, const vector_t &orthoVec)
Definition: math_matrix_functions_common_impl.hpp:942
void MatDivide(matrix_t &mOut, const matrix_t &m, typename matrix_t::value_type s)
Devide a matrix by a scalar (componentwise)
Definition: math_matrix_functions_common_impl.hpp:841
#define UG_ASSERT(expr, msg)
Definition: assert.h:70
#define UG_THROW(msg)
Definition: error.h:57
double number
Definition: types.h:124
vector_t::value_type VecDot(const vector_t &v1, const vector_t &v2)
returns the dot-product of two vector_ts
Definition: math_vector_functions_common_impl.hpp:385
T value_type
Definition: sparsematrix_interface.h:2