Утверждение равенства двух матриц Armadillo cx_mat с использованием CPPUNIT

Я новичок в CPPUNIT. Я создал матрицу A типа cx_mat (complex double), используя библиотеку броненосца, и у меня есть эталонная (ожидаемая) матрица B того же типа. Пожалуйста, предложите способ ареста с использованием матриц A и B и дельты (допуска), скажем, 0,0001 в одном выстреле БЕЗ цикла по всей матрице.

Если это невозможно и если единственной альтернативой является использование метода CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE в цикле for, предоставьте мне правильный синтаксис и файлы заголовков для его использования.


person Naveen    schedule 23.04.2014    source источник


Ответы (2)


Это можно сделать с

bool Arma_test::Is_close(arma::cx_mat& X, arma::cx_mat& Y, double tol)
{
    // abs returns a mat type then max checks columns and returns a row_vec
    // max used again will return the biggest element in the row_vec
    bool close(false);
    if(arma::max(arma::max(arma::abs(X-Y))) < tol)
    {
        close = true;
    }
    return close;
}

См. Документацию Armadillo.

person Patrick K    schedule 24.04.2014
comment
следующее более компактно arma::accu(abs(X-Y)). см. документы для accu() - person mtall; 24.04.2014
comment
arma::accu также выполнит эту работу, но это не эквивалентный код, он суммирует все элементы. - person Patrick K; 24.04.2014
comment
Я думаю, что arma::norm(X-Y, "inf") < tol (норма бесконечности) может быть лучшим способом. См. норма . - person Patrick K; 25.04.2014

Теперь вы можете использовать функцию примерно_equal.

person Community    schedule 01.07.2016