Home | History | Annotate | Download | only in MatrixFunctions

Lines Matching defs:sqrtT

18 // post: sqrtT.block(i,i,2,2) is square root of T.block(i,i,2,2)
20 void matrix_sqrt_quasi_triangular_2x2_diagonal_block(const MatrixType& T, typename MatrixType::Index i, ResultType& sqrtT)
27 sqrtT.template block<2,2>(i,i)
32 // all blocks of sqrtT to left of and below (i,j) are correct
33 // post: sqrtT(i,j) has the correct value
35 void matrix_sqrt_quasi_triangular_1x1_off_diagonal_block(const MatrixType& T, typename MatrixType::Index i, typename MatrixType::Index j, ResultType& sqrtT)
38 Scalar tmp = (sqrtT.row(i).segment(i+1,j-i-1) * sqrtT.col(j).segment(i+1,j-i-1)).value();
39 sqrtT.coeffRef(i,j) = (T.coeff(i,j) - tmp) / (sqrtT.coeff(i,i) + sqrtT.coeff(j,j));
44 void matrix_sqrt_quasi_triangular_1x2_off_diagonal_block(const MatrixType& T, typename MatrixType::Index i, typename MatrixType::Index j, ResultType& sqrtT)
49 rhs -= sqrtT.block(i, i+1, 1, j-i-1) * sqrtT.block(i+1, j, j-i-1, 2);
50 Matrix<Scalar,2,2> A = sqrtT.coeff(i,i) * Matrix<Scalar,2,2>::Identity();
51 A += sqrtT.template block<2,2>(j,j).transpose();
52 sqrtT.template block<1,2>(i,j).transpose() = A.fullPivLu().solve(rhs.transpose());
57 void matrix_sqrt_quasi_triangular_2x1_off_diagonal_block(const MatrixType& T, typename MatrixType::Index i, typename MatrixType::Index j, ResultType& sqrtT)
62 rhs -= sqrtT.block(i, i+2, 2, j-i-2) * sqrtT.block(i+2, j, j-i-2, 1);
63 Matrix<Scalar,2,2> A = sqrtT.coeff(j,j) * Matrix<Scalar,2,2>::Identity();
64 A += sqrtT.template block<2,2>(i,i);
65 sqrtT.template block<2,1>(i,j) = A.fullPivLu().solve(rhs);
104 void matrix_sqrt_quasi_triangular_2x2_off_diagonal_block(const MatrixType& T, typename MatrixType::Index i, typename MatrixType::Index j, ResultType& sqrtT)
107 Matrix<Scalar,2,2> A = sqrtT.template block<2,2>(i,i);
108 Matrix<Scalar,2,2> B = sqrtT.template block<2,2>(j,j);
111 C -= sqrtT.block(i, i+2, 2, j-i-2) * sqrtT.block(i+2, j, j-i-2, 2);
114 sqrtT.template block<2,2>(i,j) = X;
117 // pre: T is quasi-upper-triangular and sqrtT is a zero matrix of the same size
118 // post: the diagonal blocks of sqrtT are the square roots of the diagonal blocks of T
120 void matrix_sqrt_quasi_triangular_diagonal(const MatrixType& T, ResultType& sqrtT)
128 sqrtT.coeffRef(i,i) = sqrt(T.coeff(i,i));
131 matrix_sqrt_quasi_triangular_2x2_diagonal_block(T, i, sqrtT);
137 // pre: T is quasi-upper-triangular and diagonal blocks of sqrtT are square root of diagonal blocks of T.
138 // post: sqrtT is the square root of T.
140 void matrix_sqrt_quasi_triangular_off_diagonal(const MatrixType& T, ResultType& sqrtT)
153 matrix_sqrt_quasi_triangular_2x2_off_diagonal_block(T, i, j, sqrtT);
155 matrix_sqrt_quasi_triangular_2x1_off_diagonal_block(T, i, j, sqrtT);
157 matrix_sqrt_quasi_triangular_1x2_off_diagonal_block(T, i, j, sqrtT);
159 matrix_sqrt_quasi_triangular_1x1_off_diagonal_block(T, i, j, sqrtT);
270 MatrixType sqrtT = MatrixType::Zero(arg.rows(), arg.cols());
271 matrix_sqrt_quasi_triangular(T, sqrtT);
274 result = U * sqrtT * U.adjoint();
295 MatrixType sqrtT;
296 matrix_sqrt_triangular(T, sqrtT);
299 result = U * (sqrtT.template triangularView<Upper>() * U.adjoint());