aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Jitse Niesen <jitse@maths.leeds.ac.uk>2011-06-07 14:32:16 +0100
committerGravatar Jitse Niesen <jitse@maths.leeds.ac.uk>2011-06-07 14:32:16 +0100
commit86ca35ccff0837f1d55efe2043ef330b98bba259 (patch)
treee39668bd03064f5221d246b92d78e6a5b76339d0
parent91fe1507d1a06d84c9ac8d913f080e30f760375b (diff)
Fix and test MatrixSquareRoot for 1-by-1 matrices.
-rw-r--r--unsupported/Eigen/src/MatrixFunctions/MatrixSquareRoot.h4
-rw-r--r--unsupported/test/matrix_square_root.cpp2
2 files changed, 4 insertions, 2 deletions
diff --git a/unsupported/Eigen/src/MatrixFunctions/MatrixSquareRoot.h b/unsupported/Eigen/src/MatrixFunctions/MatrixSquareRoot.h
index 892e6a0a5..1a569a2df 100644
--- a/unsupported/Eigen/src/MatrixFunctions/MatrixSquareRoot.h
+++ b/unsupported/Eigen/src/MatrixFunctions/MatrixSquareRoot.h
@@ -179,7 +179,7 @@ void MatrixSquareRoot<MatrixType, 0>::compute1x1offDiagonalBlock(MatrixType& sqr
typename MatrixType::Index i,
typename MatrixType::Index j)
{
- Scalar tmp = sqrtT.row(i).segment(i+1,j-i-1) * sqrtT.col(j).segment(i+1,j-i-1);
+ Scalar tmp = (sqrtT.row(i).segment(i+1,j-i-1) * sqrtT.col(j).segment(i+1,j-i-1)).value();
sqrtT.coeffRef(i,j) = (T.coeff(i,j) - tmp) / (sqrtT.coeff(i,i) + sqrtT.coeff(j,j));
}
@@ -308,7 +308,7 @@ void MatrixSquareRoot<MatrixType, 1>::compute(ResultType &result)
for (Index i = j-1; i >= 0; i--) {
typedef typename MatrixType::Scalar Scalar;
// if i = j-1, then segment has length 0 so tmp = 0
- Scalar tmp = result.row(i).segment(i+1,j-i-1) * result.col(j).segment(i+1,j-i-1);
+ Scalar tmp = (result.row(i).segment(i+1,j-i-1) * result.col(j).segment(i+1,j-i-1)).value();
// denominator may be zero if original matrix is singular
result.coeffRef(i,j) = (T.coeff(i,j) - tmp) / (result.coeff(i,i) + result.coeff(j,j));
}
diff --git a/unsupported/test/matrix_square_root.cpp b/unsupported/test/matrix_square_root.cpp
index 83b130c9a..8e701aac6 100644
--- a/unsupported/test/matrix_square_root.cpp
+++ b/unsupported/test/matrix_square_root.cpp
@@ -71,5 +71,7 @@ void test_matrix_square_root()
CALL_SUBTEST_2(testMatrixSqrt(MatrixXcd(12,12)));
CALL_SUBTEST_3(testMatrixSqrt(Matrix4f()));
CALL_SUBTEST_4(testMatrixSqrt(Matrix<double,Dynamic,Dynamic,RowMajor>(9, 9)));
+ CALL_SUBTEST_5(testMatrixSqrt(Matrix<float,1,1>()));
+ CALL_SUBTEST_5(testMatrixSqrt(Matrix<std::complex<float>,1,1>()));
}
}