diff options
author | Benoit Jacob <jacob.benoit.1@gmail.com> | 2010-01-07 21:53:52 -0500 |
---|---|---|
committer | Benoit Jacob <jacob.benoit.1@gmail.com> | 2010-01-07 21:53:52 -0500 |
commit | 58fb27cd566f4057cee914be4cfe4f87abe8dc04 (patch) | |
tree | 44b86687bfa119443960a2c27ae4a9e4e2c3d3dc | |
parent | 7befc8d6f396b4013ff30382dbb8be4aea906908 (diff) |
undo
-rw-r--r-- | Eigen/SVD | 1 | ||||
-rw-r--r-- | Eigen/src/Core/BandMatrix.h | 18 | ||||
-rw-r--r-- | Eigen/src/Householder/HouseholderSequence.h | 8 | ||||
-rw-r--r-- | Eigen/src/QR/HouseholderQR.h | 2 | ||||
-rw-r--r-- | test/CMakeLists.txt | 1 | ||||
-rw-r--r-- | test/householder.cpp | 2 | ||||
-rw-r--r-- | test/qr.cpp | 2 |
7 files changed, 21 insertions, 13 deletions
@@ -25,6 +25,7 @@ namespace Eigen { #include "src/misc/Solve.h" #include "src/SVD/SVD.h" #include "src/SVD/JacobiSVD.h" +#include "src/SVD/UpperBidiagonalization.h" } // namespace Eigen diff --git a/Eigen/src/Core/BandMatrix.h b/Eigen/src/Core/BandMatrix.h index 7943e6280..67684eca3 100644 --- a/Eigen/src/Core/BandMatrix.h +++ b/Eigen/src/Core/BandMatrix.h @@ -171,15 +171,21 @@ class BandMatrix : public AnyMatrixBase<BandMatrix<_Scalar,Rows,Cols,Supers,Subs return Block<DataType,1,Dynamic>(m_data, supers()-i, std::max(0,i), 1, diagonalLength(i)); } - DenseMatrixType toDenseMatrix() const + template<typename Dest> inline void evalTo(Dest& dst) const { - DenseMatrixType res(rows(),cols()); - res.setZero(); - res.diagonal() = diagonal(); + dst.resize(rows(),cols()); + dst.setZero(); + dst.diagonal() = diagonal(); for (int i=1; i<=supers();++i) - res.diagonal(i) = diagonal(i); + dst.diagonal(i) = diagonal(i); for (int i=1; i<=subs();++i) - res.diagonal(-i) = diagonal(-i); + dst.diagonal(-i) = diagonal(-i); + } + + DenseMatrixType toDenseMatrix() const + { + DenseMatrixType res(rows(),cols()); + evalTo(res); return res; } diff --git a/Eigen/src/Householder/HouseholderSequence.h b/Eigen/src/Householder/HouseholderSequence.h index 26e0f6a88..ecdf903a1 100644 --- a/Eigen/src/Householder/HouseholderSequence.h +++ b/Eigen/src/Householder/HouseholderSequence.h @@ -105,10 +105,10 @@ template<typename VectorsType, typename CoeffsType> class HouseholderSequence { if(m_trans) dst.corner(BottomRight, length-k, length-k) - .applyHouseholderOnTheRight(m_vectors.col(k).tail(length-k-1), m_coeffs.coeff(k), &temp.coeffRef(0)); + .applyHouseholderOnTheRight(m_vectors.col(k).tail(length-k-1), m_coeffs.coeff(k), &temp.coeffRef(0)); else dst.corner(BottomRight, length-k, length-k) - .applyHouseholderOnTheLeft(m_vectors.col(k).tail(length-k-1), m_coeffs.coeff(k), &temp.coeffRef(k)); + .applyHouseholderOnTheLeft(m_vectors.col(k).tail(length-k-1), m_coeffs.coeff(k), &temp.coeffRef(k)); } } @@ -121,7 +121,7 @@ template<typename VectorsType, typename CoeffsType> class HouseholderSequence for(int k = 0; k < vecs; ++k) { int actual_k = m_trans ? vecs-k-1 : k; - dst.corner(BottomRight, dst.rows(), length-actual_k) + dst.block(0, dst.cols()-length, dst.rows(), length-actual_k) .applyHouseholderOnTheRight(m_vectors.col(actual_k).tail(length-actual_k-1), m_coeffs.coeff(actual_k), &temp.coeffRef(0)); } } @@ -135,7 +135,7 @@ template<typename VectorsType, typename CoeffsType> class HouseholderSequence for(int k = 0; k < vecs; ++k) { int actual_k = m_trans ? k : vecs-k-1; - dst.corner(BottomRight, length-actual_k, dst.cols()) + dst.block(dst.rows()-length, 0, length-actual_k, dst.cols()) .applyHouseholderOnTheLeft(m_vectors.col(actual_k).tail(length-actual_k-1), m_coeffs.coeff(actual_k), &temp.coeffRef(0)); } } diff --git a/Eigen/src/QR/HouseholderQR.h b/Eigen/src/QR/HouseholderQR.h index 3afaed9e0..49ee1fa79 100644 --- a/Eigen/src/QR/HouseholderQR.h +++ b/Eigen/src/QR/HouseholderQR.h @@ -55,7 +55,7 @@ template<typename _MatrixType> class HouseholderQR RowsAtCompileTime = MatrixType::RowsAtCompileTime, ColsAtCompileTime = MatrixType::ColsAtCompileTime, Options = MatrixType::Options, - DiagSizeAtCompileTime = EIGEN_ENUM_MIN(ColsAtCompileTime,RowsAtCompileTime) + DiagSizeAtCompileTime = EIGEN_SIZE_MIN(ColsAtCompileTime,RowsAtCompileTime) }; typedef typename MatrixType::Scalar Scalar; typedef typename MatrixType::RealScalar RealScalar; diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index e82026ee9..803434748 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -133,6 +133,7 @@ ei_add_test(hessenberg " " "${GSL_LIBRARIES}") ei_add_test(eigensolver_selfadjoint " " "${GSL_LIBRARIES}") ei_add_test(eigensolver_generic " " "${GSL_LIBRARIES}") ei_add_test(eigensolver_complex) +ei_add_test(upperbidiagonalization) ei_add_test(svd) ei_add_test(jacobisvd) ei_add_test(geo_orthomethods) diff --git a/test/householder.cpp b/test/householder.cpp index 85492cdff..4e4c78863 100644 --- a/test/householder.cpp +++ b/test/householder.cpp @@ -79,7 +79,7 @@ template<typename MatrixType> void householder(const MatrixType& m) m3.rowwise() = v1.transpose(); m4 = m3; m3.row(0).makeHouseholder(essential, beta, alpha); - m3.applyHouseholderOnTheRight(essential.transpose(),beta,tmp); + m3.applyHouseholderOnTheRight(essential,beta,tmp); VERIFY_IS_APPROX(m3.norm(), m4.norm()); VERIFY_IS_MUCH_SMALLER_THAN(m3.block(0,1,rows,rows-1).norm(), m3.norm()); VERIFY_IS_MUCH_SMALLER_THAN(ei_imag(m3(0,0)), ei_real(m3(0,0))); diff --git a/test/qr.cpp b/test/qr.cpp index 3848ce0a5..7a808d049 100644 --- a/test/qr.cpp +++ b/test/qr.cpp @@ -114,7 +114,7 @@ template<typename MatrixType> void qr_verify_assert() void test_qr() { - for(int i = 0; i < 1; i++) { + for(int i = 0; i < g_repeat; i++) { CALL_SUBTEST_1( qr(MatrixXf(47,40)) ); CALL_SUBTEST_2( qr(MatrixXcd(17,7)) ); CALL_SUBTEST_3(( qr_fixedsize<Matrix<float,3,4>, 2 >() )); |