C++ 用CPPUNIT证明两个犰狳cx_mat矩阵的相等性

C++ 用CPPUNIT证明两个犰狳cx_mat矩阵的相等性,c++,cppunit,armadillo,C++,Cppunit,Armadillo,我是新来的。我已经使用犰狳库生成了一个cx_mat(复数双精度)类型的矩阵a,并且我有一个相同类型的参考(预期)矩阵B。请建议一种方法,在一次射击中使用矩阵a和B以及δ(公差),例如0.0001,而不在整个矩阵中循环 如果上述方法不可行,并且如果唯一的替代方法是在for循环中使用CPPUNIT\u ASSERT\u DOUBLES\u EQUAL\u消息方法,那么请为我提供正确的语法和头文件以供使用。可以使用 bool Arma_test::Is_close(arma::cx_mat&

我是新来的。我已经使用犰狳库生成了一个cx_mat(复数双精度)类型的矩阵a,并且我有一个相同类型的参考(预期)矩阵B。请建议一种方法,在一次射击中使用矩阵a和B以及δ(公差),例如0.0001,而不在整个矩阵中循环

如果上述方法不可行,并且如果唯一的替代方法是在for循环中使用CPPUNIT\u ASSERT\u DOUBLES\u EQUAL\u消息方法,那么请为我提供正确的语法和头文件以供使用。

可以使用

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;
}
bool Arma\u test::Is\u close(Arma::cx\u mat&X,Arma::cx\u mat&Y,double tol)
{
//abs返回mat类型,然后max检查列并返回行
//再次使用max将返回行中最大的元素
布尔关闭(假);
if(arma::max(arma::max(arma::abs(X-Y)))
请参阅。

可以使用

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;
}
bool Arma\u test::Is\u close(Arma::cx\u mat&X,Arma::cx\u mat&Y,double tol)
{
//abs返回mat类型,然后max检查列并返回行
//再次使用max将返回行中最大的元素
布尔关闭(假);
if(arma::max(arma::max(arma::abs(X-Y))

请参阅。

您现在可以使用该功能。

您现在可以使用该功能。

以下内容更加紧凑
arma::accu(abs(X-Y))
。参见文档中的
arma::acu
也可以完成这项工作,但不是等效代码,它将所有元素相加。我认为
arma::norm(X-Y,“inf”)
(无穷范数)可能是最好的方法。请参阅。以下是更紧凑的
arma::accu(abs(X-Y))
。参见文档中的
arma::acu
也可以完成这项工作,但不是等效代码,它将所有元素相加。我认为
arma::norm(X-Y,“inf”)
(无穷范数)可能是最好的方法。看见