Optimize matrix power

This commit is contained in:
Chen-Pang He
2012-08-26 02:15:41 +08:00
parent 1cd4279b03
commit 5252d823c9
2 changed files with 49 additions and 107 deletions

View File

@@ -67,7 +67,7 @@ void testIntPowers(const MatrixType& m, double tol)
std::cout << "testIntPower: i = 1 error powerm = " << relerr(m1, m3) << " " << relerr(m1, m4) << '\n';
VERIFY(m1 == m3 && m1 == m4);
m2 = m1 * m1;
m2.noalias() = m1 * m1;
m3 = m1.pow(2);
m4 = m1.pow(2.);
std::cout << "testIntPower: i = 2 error powerm = " << relerr(m2, m3) << " " << relerr(m2, m4) << '\n';
@@ -111,7 +111,7 @@ void testExponentLaws(const MatrixType& m, double tol)
m3 = m1.pow(y);
m4 = m1.pow(x + y);
m5 = m2 * m3;
m5.noalias() = m2 * m3;
std::cout << "testExponentLaws: error powerm = " << relerr(m4, m5);
VERIFY(m4.isApprox(m5, RealScalar(tol)));
@@ -145,13 +145,13 @@ void testMatrixVectorProduct(const MatrixType& m, const VectorType& v, double to
pInt = rand();
pInt >>= 2;
v2 = m1.pow(pReal).eval() * v1;
v3 = m1.pow(pReal) * v1;
v2.noalias() = m1.pow(pReal).eval() * v1;
v3.noalias() = m1.pow(pReal) * v1;
std::cout << "testMatrixVectorProduct: error powerm = " << relerr(v2, v3);
VERIFY(v2.isApprox(v3, RealScalar(tol)));
v2 = m1.pow(pInt).eval() * v1;
v3 = m1.pow(pInt) * v1;
v2.noalias() = m1.pow(pInt).eval() * v1;
v3.noalias() = m1.pow(pInt) * v1;
std::cout << " " << relerr(v2, v3) << '\n';
VERIFY(v2.isApprox(v3, RealScalar(tol)) || v2 == v3);
}