From e380b4c07baf4846f9abc5f50c896c5540f42069 Mon Sep 17 00:00:00 2001 From: labourasse <labourassee@gmail.com> Date: Mon, 18 Nov 2024 18:14:06 +0100 Subject: [PATCH] remove couts --- src/algebra/EigenvalueSolver.cpp | 96 +++++++++++++++----------------- 1 file changed, 46 insertions(+), 50 deletions(-) diff --git a/src/algebra/EigenvalueSolver.cpp b/src/algebra/EigenvalueSolver.cpp index efaaa19a2..28ec7131d 100644 --- a/src/algebra/EigenvalueSolver.cpp +++ b/src/algebra/EigenvalueSolver.cpp @@ -216,10 +216,10 @@ EigenvalueSolver::rowReduce(const TinyMatrix<3, 3, T>& matrix, const double epsi if (pivotRow == 3) { continue; } - std::cout << "before: " - << "i = " << i << " pivotRow = " << pivotRow << " " << redmat << "\n"; + // std::cout << "before: " + // << "i = " << i << " pivotRow = " << pivotRow << " " << redmat << "\n"; redmat = swap(redmat, i, pivotRow); - std::cout << "after: " << redmat << "\n"; + // std::cout << "after: " << redmat << "\n"; double pivotValue = redmat(i, i); for (size_t j = i; j < 3; ++j) { @@ -244,8 +244,8 @@ EigenvalueSolver::findEigenvector(const TinyMatrix<3, 3>& A, { TinyMatrix<3, 3> eigenvectors = zero; if (space_size == 3) { - std::cout << "space_size = 3 " - << "\n"; + // std::cout << "space_size = 3 " + // << "\n"; return eigenvectors0; } TinyMatrix<3, 3> B = A; @@ -254,19 +254,19 @@ EigenvalueSolver::findEigenvector(const TinyMatrix<3, 3>& A, B(i, i) -= eigenvalue; } - std::cout << " Avant " << B << "\n" - << "\n"; + // std::cout << " Avant " << B << "\n" + // << "\n"; B = rowReduce(B, epsilon); - std::cout << " Après " << B << "\n" - << "\n"; + // std::cout << " Après " << B << "\n" + // << "\n"; for (size_t i = 0; i < 3; ++i) { bool isFreeVariableRow = true; for (size_t j = 0; j < 3; ++j) { if (std::fabs(B(i, j)) > epsilon) { isFreeVariableRow = false; - std::cout << " B(" << i << "," << j << ") = " << B(i, j) << "\n"; + // std::cout << " B(" << i << "," << j << ") = " << B(i, j) << "\n"; break; } } @@ -274,9 +274,9 @@ EigenvalueSolver::findEigenvector(const TinyMatrix<3, 3>& A, if (isFreeVariableRow) { TinyVector<3> eigenvector = zero; eigenvector[i] = 1.0; - std::cout << i << " is free " - << "\n"; - std::cout << std::flush; + // std::cout << i << " is free " + // << "\n"; + // std::cout << std::flush; for (int k = i - 1; k >= 0; --k) { double sum = 0.0; for (size_t j = k + 1; j < 3; ++j) { @@ -292,14 +292,14 @@ EigenvalueSolver::findEigenvector(const TinyMatrix<3, 3>& A, } } } - std::cout << " Before orthorgonalization " << B << "\n"; - std::cout << " Before orthorgonalization " << eigenvectors << "\n"; + // std::cout << " Before orthorgonalization " << B << "\n"; + // std::cout << " Before orthorgonalization " << eigenvectors << "\n"; if (space_size == 2) { TinyVector<3> first = zero; TinyVector<3> second = zero; // TinyVector<3> new_second =zero; - size_t rank1 = 0; + // size_t rank1 = 0; size_t rank2 = 1; for (size_t j = 0; j < 3; ++j) { first[j] = eigenvectors(0, j); @@ -308,7 +308,7 @@ EigenvalueSolver::findEigenvector(const TinyMatrix<3, 3>& A, if (l2Norm(first) < 1e-3) { for (size_t j = 0; j < 3; ++j) { first[j] = eigenvectors(2, j); - rank1 = 2; + // rank1 = 2; } } if (l2Norm(second) < 1e-3) { @@ -324,9 +324,9 @@ EigenvalueSolver::findEigenvector(const TinyMatrix<3, 3>& A, for (size_t j = 0; j < 3; ++j) { eigenvectors(rank2, j) = normal_vector[j]; } - std::cout << " rank1 : " << rank1 << " rank2 " << rank2 << "\n"; + // std::cout << " rank1 : " << rank1 << " rank2 " << rank2 << "\n"; } - std::cout << "In findEigenvectors for eigenvalue " << eigenvalue << " eigenvectors " << eigenvectors << "\n"; + // std::cout << "In findEigenvectors for eigenvalue " << eigenvalue << " eigenvectors " << eigenvectors << "\n"; return eigenvectors; } @@ -361,22 +361,21 @@ EigenvalueSolver::findEigenvectors(const TinyMatrix<3, 3>& A, TinyVector<3> eige } } } - std::cout << "space_size: " << space_size << "\n"; - std::cout << "eigenvalues: " << eigenvalues << "\n"; + // std::cout << "space_size: " << space_size << "\n"; + // std::cout << "eigenvalues: " << eigenvalues << "\n"; size_t it = 0; while (count < 3 && it < 3) { TinyMatrix<3> Try = findEigenvector(A, eigenvalues[count], space_size[count], epsilon); - std::cout << eigenvalues[count] << " Frobenius norm try: " << frobeniusNorm(Try) << "\n"; - if (frobeniusNorm(Try) < 1e-3) { - std::cout << " Error : no eigenvector corresponds to eigenvalue " << eigenvalues[count] << "\n"; - } + // std::cout << eigenvalues[count] << " Frobenius norm try: " << frobeniusNorm(Try) << "\n"; + Assert(frobeniusNorm(Try) > 1e-3, " Error : no eigenvector corresponds to eigenvalue "); + TinyVector<3> eigenvector = zero; int count2 = 0; for (size_t i = 0; i < 3; ++i) { for (size_t j = 0; j < 3; j++) { eigenvector[j] = Try(i, j); } - std::cout << " count, i: " << count << ", " << i << " l2Norm(eigenvector) " << l2Norm(eigenvector) << "\n"; + // std::cout << " count, i: " << count << ", " << i << " l2Norm(eigenvector) " << l2Norm(eigenvector) << "\n"; if (l2Norm(eigenvector) > 1e-3) { for (size_t j = 0; j < 3; j++) { eigenMatrix(count, j) = eigenvector[j]; @@ -385,13 +384,10 @@ EigenvalueSolver::findEigenvectors(const TinyMatrix<3, 3>& A, TinyVector<3> eige count2 += 1; } } - if (count2 != space_size[count - count2]) { - std::cout << " error eigenvalue " << eigenvalues[count - 1] << " eigenvector space size " << count2 - << " is not what was expected " << space_size[count - 1] << "\n"; - } + Assert(count2 == space_size[count - count2], " eigenvector space size is not what was expected "); it++; } - std ::cout << " eigenMatrix " << eigenMatrix << "\n"; + // std ::cout << " eigenMatrix " << eigenMatrix << "\n"; return eigenMatrix; } @@ -400,22 +396,22 @@ EigenvalueSolver::findEigen(const TinyMatrix<3> A) { const double epsilon = 1.e-6; // * l2Norm(eigenvalues); if (frobeniusNorm(A) < 1.e-15) { - std::cout << " Frobenius norm 0 " << frobeniusNorm(A) << "\n"; + // std::cout << " Frobenius norm 0 " << frobeniusNorm(A) << "\n"; return std::make_tuple(eigenvalues0, eigenvectors0); } TinyMatrix<3> C = 1. / frobeniusNorm(A) * A; if (isDiagonal(C, epsilon)) { - std::cout << "Matrix C " << C << " is diagonal " - << "\n"; + // std::cout << "Matrix C " << C << " is diagonal " + // << "\n"; const TinyVector<3> eigenvalues(A(0, 0), A(1, 1), A(2, 2)); TinyMatrix<3> Diag = zero; for (size_t i = 0; i < 3; ++i) { Diag(i, i) = eigenvalues[i]; } TinyMatrix<3> B = eigenvectors0 * Diag * transpose(eigenvectors0); - std::cout << "\n" - << B << ", " << A << " Diff " - << " A - B " << 1 / frobeniusNorm(A) * (A - B) << "\n"; + // std::cout << "\n" + // << B << ", " << A << " Diff " + // << " A - B " << 1 / frobeniusNorm(A) * (A - B) << "\n"; return std::make_tuple(eigenvalues, eigenvectors0); } const TinyVector<3> eigenvalues = _findEigenValues(C, epsilon); @@ -426,21 +422,21 @@ EigenvalueSolver::findEigen(const TinyMatrix<3> A) Diag(i, i) = frobeniusNorm(A) * eigenvalues[i]; } TinyMatrix<3> B = Eigenmatrix * Diag * transpose(Eigenmatrix); - std::cout << "\n" - << B << ", " << A << " Diff " - << " A - B " << 1 / frobeniusNorm(A) * (A - B) << "\n"; + // std::cout << "\n" + // << B << ", " << A << " Diff " + // << " A - B " << 1 / frobeniusNorm(A) * (A - B) << "\n"; return std::make_tuple(frobeniusNorm(A) * eigenvalues, Eigenmatrix); } TinyVector<3> EigenvalueSolver::_findEigenValues(const TinyMatrix<3>& A, const double epsilon) const { - std::cout << " Matrix " << A << "\n"; + // std::cout << " Matrix " << A << "\n"; TinyVector<3> eigenvalues(0., 0., 0.); double b = -trace(A); double c = 0.5 * (trace(A) * trace(A) - trace(A * A)); double d = -det(A); Polynomial<3> P(d, c, b, 1.); - std::cout << P << "\n"; + // std::cout << P << "\n"; Polynomial<2> Q(c, b, 1.); if (fabs(d) > 1e-11) { eigenvalues[0] = _findFirstRoot(P); @@ -448,9 +444,9 @@ EigenvalueSolver::_findEigenValues(const TinyMatrix<3>& A, const double epsilon) Polynomial<3> S; Polynomial<3> R; divide(P, Q1, S, R); - std::cout << "Q1 : " << Q1 << "\n"; - std::cout << "R : " << R << "\n"; - std::cout << "S : " << S << "\n"; + // std::cout << "Q1 : " << Q1 << "\n"; + // std::cout << "R : " << R << "\n"; + // std::cout << "S : " << S << "\n"; Q.coefficients()[0] = S.coefficients()[0]; Q.coefficients()[1] = S.coefficients()[1]; Q.coefficients()[2] = S.coefficients()[2]; @@ -479,7 +475,7 @@ EigenvalueSolver::_findFirstRoot(Polynomial<3> P) const { double guess = -P.coefficients()[2] / 3.; double old_guess = -P.coefficients()[2] / 3.; - std::cout << " coefs P " << P.coefficients() << "\n"; + // std::cout << " coefs P " << P.coefficients() << "\n"; // double delta = pow(2.*P.coefficients()[2],2) - 4*3.*P.coefficients()[3]*P.coefficients()[1]; Polynomial<2> Q = derivative(P); Polynomial<1> R = derivative(Q); @@ -489,13 +485,13 @@ EigenvalueSolver::_findFirstRoot(Polynomial<3> P) const // guess -= P(guess) / Q(guess); old_guess = guess; guess -= 2 * P(guess) * Q(guess) / (2 * Q(guess) * Q(guess) - P(guess) * R(guess)); - std::cout << "guess = " << guess << "\n"; - std::cout << "g(guess) = " << Q(guess) << "\n"; + // std::cout << "guess = " << guess << "\n"; + // std::cout << "g(guess) = " << Q(guess) << "\n"; residu = P(guess); - std::cout << "residu = " << residu << "\n"; + // std::cout << "residu = " << residu << "\n"; iteration += 1; } while ((fabs(residu) > 1.e-16) or (fabs(old_guess - guess) > 1.e-10)); - std::cout << " nb Newton iterations " << iteration << "\n"; + // std::cout << " nb Newton iterations " << iteration << "\n"; return guess; } -- GitLab