From 1aea45335ff60c6a5ed6dc06cd798d050eff661a Mon Sep 17 00:00:00 2001 From: Gael Guennebaud Date: Mon, 6 Jul 2009 23:43:20 +0200 Subject: * bybye Part, welcome TriangularView and SelfAdjointView. * move solveTriangular*() to TriangularView::solve*() * move .llt() to SelfAdjointView * add a high level wrapper to the efficient selfadjoint * vector product * improve LLT so that we can specify which triangular part is meaningless => there are still many things to do (doc, cleaning, improve the matrix products, etc.) --- test/triangular.cpp | 57 +++++++++++++++++++++++++++++------------------------ 1 file changed, 31 insertions(+), 26 deletions(-) (limited to 'test/triangular.cpp') diff --git a/test/triangular.cpp b/test/triangular.cpp index 850c3eee0..1829a2578 100644 --- a/test/triangular.cpp +++ b/test/triangular.cpp @@ -1,4 +1,4 @@ -// This file is part of Eigen, a lightweight C++ template library +// This file is triangularView of Eigen, a lightweight C++ template library // for linear algebra. // // Copyright (C) 2008 Gael Guennebaud @@ -51,8 +51,8 @@ template void triangular(const MatrixType& m) v2 = VectorType::Random(rows), vzero = VectorType::Zero(rows); - MatrixType m1up = m1.template part(); - MatrixType m2up = m2.template part(); + MatrixType m1up = m1.template triangularView(); + MatrixType m2up = m2.template triangularView(); if (rows*cols>1) { @@ -66,22 +66,22 @@ template void triangular(const MatrixType& m) // test overloaded operator+= r1.setZero(); r2.setZero(); - r1.template part() += m1; + r1.template triangularView() += m1; r2 += m1up; VERIFY_IS_APPROX(r1,r2); // test overloaded operator= m1.setZero(); - m1.template part() = (m2.transpose() * m2).lazy(); + m1.template triangularView() = (m2.transpose() * m2).lazy(); m3 = m2.transpose() * m2; - VERIFY_IS_APPROX(m3.template part().transpose(), m1); + VERIFY_IS_APPROX(m3.template triangularView().transpose().toDense(), m1); // test overloaded operator= m1.setZero(); - m1.template part() = (m2.transpose() * m2).lazy(); - VERIFY_IS_APPROX(m3.template part(), m1); + m1.template triangularView() = (m2.transpose() * m2).lazy(); + VERIFY_IS_APPROX(m3.template triangularView().toDense(), m1); - VERIFY_IS_APPROX(m3.template part(), m3.diagonal().asDiagonal()); + // VERIFY_IS_APPROX(m3.template triangularView(), m3.diagonal().asDiagonal()); m1 = MatrixType::Random(rows, cols); for (int i=0; i void triangular(const MatrixType& m) Transpose trm4(m4); // test back and forward subsitution - m3 = m1.template part(); - VERIFY(m3.template marked().solveTriangular(m3).cwise().abs().isIdentity(test_precision())); - VERIFY(m3.transpose().template marked() - .solveTriangular(m3.transpose()).cwise().abs().isIdentity(test_precision())); + m3 = m1.template triangularView(); + VERIFY(m3.template triangularView().solve(m3).cwise().abs().isIdentity(test_precision())); + VERIFY(m3.transpose().template triangularView() + .solve(m3.transpose()).cwise().abs().isIdentity(test_precision())); // check M * inv(L) using in place API m4 = m3; - m3.transpose().template marked().solveTriangularInPlace(trm4); + m3.transpose().template triangularView().solveInPlace(trm4); VERIFY(m4.cwise().abs().isIdentity(test_precision())); - m3 = m1.template part(); - VERIFY(m3.template marked().solveTriangular(m3).cwise().abs().isIdentity(test_precision())); - VERIFY(m3.transpose().template marked() - .solveTriangular(m3.transpose()).cwise().abs().isIdentity(test_precision())); + m3 = m1.template triangularView(); + VERIFY(m3.template triangularView().solve(m3).cwise().abs().isIdentity(test_precision())); + VERIFY(m3.transpose().template triangularView() + .solve(m3.transpose()).cwise().abs().isIdentity(test_precision())); // check M * inv(U) using in place API m4 = m3; - m3.transpose().template marked().solveTriangularInPlace(trm4); + m3.transpose().template triangularView().solveInPlace(trm4); VERIFY(m4.cwise().abs().isIdentity(test_precision())); - m3 = m1.template part(); - VERIFY(m2.isApprox(m3 * (m3.template marked().solveTriangular(m2)), largerEps)); - m3 = m1.template part(); - VERIFY(m2.isApprox(m3 * (m3.template marked().solveTriangular(m2)), largerEps)); + m3 = m1.template triangularView(); + VERIFY(m2.isApprox(m3 * (m3.template triangularView().solve(m2)), largerEps)); + m3 = m1.template triangularView(); + VERIFY(m2.isApprox(m3 * (m3.template triangularView().solve(m2)), largerEps)); - VERIFY((m1.template part() * m2.template part()).isUpperTriangular()); + // check solve with unit diagonal + m3 = m1.template triangularView(); + VERIFY(m2.isApprox(m3 * (m1.template triangularView().solve(m2)), largerEps)); + +// VERIFY(( m1.template triangularView() +// * m2.template triangularView()).isUpperTriangular()); // test swap m1.setOnes(); m2.setZero(); - m2.template part().swap(m1); + m2.template triangularView().swap(m1); m3.setZero(); - m3.template part().setOnes(); + m3.template triangularView().setOnes(); VERIFY_IS_APPROX(m2,m3); } -- cgit v1.2.3