void check_LU_res(const M1 & m, const M2& lu) { GeneralMatrix l(m.M(), m.N()); GeneralMatrix u(m.M(), m.N()); for(int i = 0; i < lu.M(); i++) { for(int j = 0; j< lu.N(); j++) { if(i>j) { l(i, j) = lu(i, j); u(i, j) = 0; } else if(i == j) { l(i, j) = 1; u(i, j) = lu(i, j); } else { l(i, j) = 0; u(i, j) = lu(i, j); } } } bool equal = true; GeneralMatrix m1(m.M(), m.N()); mul(l, u, m1); for(int i = 0; i<m.M(); i++) for(int j = 0; j< m.N(); j++) { if(std::abs(m1(i, j) - m(i, j) ) / m(i, j) > 0.1) { equal = false; } } if(!check_Matrix(m1,m)) { std::cout<<"wrong answer!"<<std::endl; } else { std::cout<<"right answer, wahahahaha!"<<std::endl; } }
bool check_Matrix(const M1 & m1, const M2& m2) { bool equal = true; for(int i = 0; i<m1.M(); i++) for(int j = 0; j< m1.N(); j++) { if(std::abs(m1(i, j) - m2(i, j) ) / std::abs(m2(i, j)) > 0.1) { equal = false; } } return equal; }