Эйген: Как проверить, является ли матрица обратимой - PullRequest
1 голос
/ 16 апреля 2019

Я хотел бы сгенерировать случайную обратимую Матрицу, используя 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^T*res должно быть обратимым, но мне нужен случайный res.

1 Ответ

1 голос
/ 16 апреля 2019

Ваш чек isInvertible должен работать здесь. Для диагностики вы можете проверить абсолютное значение определителя или номер условия вашей матрицы. Вы должны иметь возможность использовать функцию-член определителя, см .: https://eigen.tuxfamily.org/dox/classEigen_1_1MatrixBase.html#a7ad8f77004bb956b603bb43fd2e3c061

...