Вращение Гивенса в собственном с разреженной матрицей - PullRequest
0 голосов
/ 05 мая 2020

В моей собственной реализации на C ++ QR-разложения с помощью вращений Гивенса для установки матрицы вращения на единичную матрицу я пытаюсь использовать этот более универсальный класс Эйгена для разреженных матриц. Фактически, общий сжатый формат хранения строк / столбцов не поддерживает метод setIdentity, который требует алгоритм.

Фрагмент, который я добавил в свой код, не компилируется, и справка Eigen довольно неясна для мне по этому поводу:

#include <Eigen/Sparse> 
SparseMatrix<double,ColMajor,int> G(m,m);  

G = G.setIdentity(m,m);

Есть предложения? Как определить символ препроцессора EIGEN_SPARSEMATRIX_PLUGIN?

[Кстати: есть ли готовая хорошая реализация? Ни Эйген, ни Армадилло, похоже, не предоставляют этого]

1 Ответ

1 голос
/ 09 мая 2020

Это компилируется / работает нормально для меня.

#include <iostream>
#include <Eigen/Sparse>

int main() {
    constexpr int m = 10;
    Eigen::SparseMatrix<double,Eigen::ColMajor,int> G(m,m);
    G.setIdentity();
    std::cout << G << std::endl;
    return 0;
}

Я построил через

g++ -Wall -std=c++11 foo.cpp -o foo

Возможно, вам потребуется добавить -I /usr/local/include/Eigen/, чтобы убедиться, что он находит ваши собственные заголовки.

...