C++ 特征:如何检查矩阵是否可逆

C++ 特征:如何检查矩阵是否可逆,c++,matrix,eigen,eigen3,C++,Matrix,Eigen,Eigen3,我想使用Eigen生成一个随机可逆矩阵,它满足以下标准: Eigen::Matrix<T,Eigen::Dynamic, Eigen::Dynamic> res(M,N+1); Eigen::Matrix<T,Eigen::Dynamic, Eigen::Dynamic> y(M,1); y.setRandom(); while(true){ res.setRandom(); Eigen::FullPivLU<Eigen::Matri

我想使用Eigen生成一个随机可逆矩阵,它满足以下标准:

Eigen::Matrix<T,Eigen::Dynamic, Eigen::Dynamic> res(M,N+1);
Eigen::Matrix<T,Eigen::Dynamic, Eigen::Dynamic> y(M,1); y.setRandom();
while(true){
        res.setRandom();
        Eigen::FullPivLU<Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>> lu(res.transpose()*res);
        if(lu.isInvertible()){
            break;
        }
}
矩阵res(M,N+1); 矩阵y(M,1);y、 setRandom(); while(true){ res.setRandom(); 本征::FullPivLU-lu(res.transpose()*res); if(lu.isInvertable()){ 打破 } }
因此,
res^T*res
应该是可逆的,但是我需要一个随机的
res

你的检查是可逆的,应该在这里工作。对于诊断,可以检查行列式的绝对值或矩阵的条件数。您应该能够使用行列式成员函数,请参阅:

您的检查是可验证的,应该可以在这里使用。对于诊断,可以检查行列式的绝对值或矩阵的条件数。您应该能够使用行列式成员函数,请参阅:

这有什么帮助@Jesperjuhl你想要一个随机的“某物”。这个链接告诉我们如何在现代C++中生成随机数。因此,它应该通过向您展示如何生成随机数来帮助您生成您的随机对象。更改了注释,现在它应该更好地反映我的问题您的实际问题是“如何创建随机、满秩、对称正定矩阵?”(或随机、满秩、
Mx(N+1)
矩阵?)这有什么用@Jesperjuhl你想要一个随机的“某物”。这个链接告诉我们如何在现代C++中生成随机数。因此,它应该通过向您展示如何生成随机数来帮助您生成您的随机对象。更改了注释,现在它应该更好地反映我的问题您的实际问题是“如何创建随机、满秩、对称正定矩阵?”(或随机、满秩、
Mx(N+1)
矩阵?)这比我在这里做的更快还是更慢?应该是类似的,用于两者的技术都是LU分解。不过,在你的问题中,具有随机双(“实”)系数的矩阵将具有概率为1的满秩,因此只要N+1小于或等于M,乘积将是可逆的(a.s.)。好的,谢谢你的回答。但问题是,当我在没有检查的情况下设置这些矩阵时,我经常会遇到运行时错误,因为奇异矩阵。。。我忘了提到,列1在resI中总是1。我想你的问题可能是当你分配随机项时,尝试使用res.setRandom(M,N+1)来显式使用矩阵随机设置器。对于调试,请尝试选择足够小的M和N,以便手动调试res;验证所有列都是线性独立的。检查行列式以确定矩阵是否可逆通常不是一个好主意,因为行列式的比例非常大。例如,如果
det(A)==1
,则
det(s*A)==pow(s,A.行())
。使用
.isInvertible()
检查要好得多(但我不认为这是OP的实际问题)是比我在这里做的更快还是更慢?应该是类似的,用于两者的技术都是LU分解。不过,在你的问题中,具有随机双(“实”)系数的矩阵将具有概率为1的满秩,因此只要N+1小于或等于M,乘积将是可逆的(a.s.)。好的,谢谢你的回答。但问题是,当我在没有检查的情况下设置这些矩阵时,我经常会遇到运行时错误,因为奇异矩阵。。。我忘了提到,列1在resI中总是1。我想你的问题可能是当你分配随机项时,尝试使用res.setRandom(M,N+1)来显式使用矩阵随机设置器。对于调试,请尝试选择足够小的M和N,以便手动调试res;验证所有列都是线性独立的。检查行列式以确定矩阵是否可逆通常不是一个好主意,因为行列式的比例非常大。例如,如果
det(A)==1
,则
det(s*A)==pow(s,A.行())
。使用
.isInvertible()
检查要好得多(但我认为这不是OP的实际问题)