33#ifndef __H__UG__COMMON__MATH_MATRIX_FUNCTIONS_COMMON_IMPL__
34#define __H__UG__COMMON__MATH_MATRIX_FUNCTIONS_COMMON_IMPL__
50template <
typename matrix_t>
52MatAdd(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);
66template <
typename matrix_t>
68MatSubtract(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);
83template <
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);
99template <
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);
123template <
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);
139template <
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);
162template <
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);
185template <
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);
203template <
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);
221template <
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);
245template <
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);
273template <
typename matrix_t>
274inline typename matrix_t::value_type
277 typename matrix_t::value_type norm = 0;
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);
293template <
typename matrix_t>
294inline typename matrix_t::value_type
297 typename matrix_t::value_type trace =
Trace(m);
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;
315template <
typename matrix_t>
317MatScale(matrix_t& mOut,
typename matrix_t::value_type s,
const matrix_t& m)
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;
327template <
typename matrix_t>
329MatScaleAppend(matrix_t& mOut,
typename matrix_t::value_type s,
const matrix_t& m)
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;
343template <
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);
355template <
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);
380template <
size_t N,
typename T>
384 UG_THROW(
"Determinant for matrix of size "<<N<<
"x"<<N<<
" not implemented.");
405 return (m(0,0)*m(1,1) - m(1,0)*m(0,1));
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);
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);
442template <
size_t N,
size_t M,
typename T>
467template <
size_t N,
typename T>
474template <
size_t M,
typename T>
506template <
size_t N,
size_t M,
typename T>
520template <
size_t N,
typename T>
527template <
size_t M,
typename T>
558template <
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.");
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);
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;
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;
620template <
size_t N,
size_t M,
typename T>
624 UG_THROW(
"InverseTransposed for matrix of size "<<M<<
"x"<<N<<
" not implemented.");
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;
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;
677template <
size_t N,
size_t M,
typename T>
683 UG_THROW (
"RightInverse: Type mismatch, cannot right-invert a MxN-matrix with M > N!");
713template <
size_t N,
size_t M,
typename T>
719 UG_THROW (
"LeftInverse: Type mismatch, cannot right-invert a MxN-matrix with M < N!");
749template<
size_t N,
size_t M,
typename T>
778 return (m(0,0)+m(1,1));
785 return (m(0,0)+m(1,1)+m(2,2));
792template <
typename matrix_t>
794MatSet(matrix_t& mInOut,
typename matrix_t::value_type s)
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)
804template <
typename matrix_t>
808 typedef typename matrix_t::size_type size_type;
809 for(size_type i = 0; i < mInOut.num_rows(); ++i)
815template <
typename matrix_t>
817MatAdd(matrix_t& mOut,
const matrix_t& m,
typename matrix_t::value_type s)
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;
827template <
typename matrix_t>
829MatSubtract(matrix_t& mOut,
const matrix_t& m,
typename matrix_t::value_type s)
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;
839template <
typename matrix_t>
841MatDivide(matrix_t& mOut,
const matrix_t& m,
typename matrix_t::value_type s)
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;
851template <
typename matrix_t>
853MatMultiply(matrix_t& mOut,
const matrix_t& m,
typename matrix_t::value_type s)
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;
863template <
typename matrix_t>
871template <
typename matrix_t>
879 typename matrix_t::value_type
s = sin(rads);
880 typename matrix_t::value_type c = cos(rads);
882 mOut(1, 1) = c; mOut(1, 2) = -
s;
883 mOut(2, 1) =
s; mOut(2, 2) = c;
886template <
typename matrix_t>
894 typename matrix_t::value_type
s = sin(rads);
895 typename matrix_t::value_type c = cos(rads);
897 mOut(0, 0) = c; mOut(0, 2) =
s;
898 mOut(2, 0) = -
s; mOut(2, 2) = c;
901template <
typename matrix_t>
906 typename matrix_t::value_type
s = sin(rads);
907 typename matrix_t::value_type c = cos(rads);
909 mOut(0, 0) = c; mOut(0, 1) = -
s;
910 mOut(1, 0) =
s; mOut(1, 1) = c;
917template <
typename matrix_t>
920 typename matrix_t::value_type yaw,
921 typename matrix_t::value_type pitch,
922 typename matrix_t::value_type roll)
927 matrix_t tMat1, tMat2, tMat3;
940template <
typename matrix_t,
typename vector_t>
944 assert(vector_t::Size == matrix_t::RowSize);
945 assert(vector_t::Size == matrix_t::ColSize);
947 typename vector_t::value_type scalarProd =
VecDot(orthoVec, orthoVec);
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];
964template <
typename matrix_t>
965inline typename matrix_t::value_type
968 typename matrix_t::value_type norm = 0;
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);
979template <
typename matrix_t>
980inline typename matrix_t::value_type
986template <
typename matrix_t>
987inline typename matrix_t::value_type
990 typename matrix_t::value_type sum, max = 0;
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;
1004template <
typename matrix_t>
1005inline typename matrix_t::value_type
1008 typename matrix_t::value_type sum, max = 0;
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;
1022template <
typename matrix_t>
1023inline typename matrix_t::value_type
1026 typename matrix_t::value_type max = 0;
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;
1039template <
size_t N,
size_t M,
typename T>
1043 UG_THROW(
"MaxAbsEigenvalue for matrix of size "<<N<<
"x"<<M<<
" not implemented.");
1046template <
typename T>
1054template <
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));}
1068template <
typename matrix_t>
1069inline typename matrix_t::value_type
A class for fixed size, dense matrices.
Definition math_matrix.h:63
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
MathMatrix< N, M, T >::value_type MinAbsEigenvalue(const MathMatrix< M, N, T > &m)
Computes minimum eigenvalue of a (symmetric) matrix.
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
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