簡體   English   中英

在Eigen中求解一個稀疏的上三角系統?

[英]Solving a sparse upper triangular system in Eigen?

對於密集矩陣,以下代碼解決了x ^ TA = b ^ T就好了。

Matrix3d A;
RowVector3d bT, xT;

A << 1, 2, 3, 
     0, 5, 6, 
     0, 0, 9;

bT << 1, 2, 3;

xT = A.triangularView<Upper>().solve<OnTheRight>(bT);
printf("(%g, %g, %g)", xT(0), xT(1), xT(2));

但是,我不能繼續這種稀疏矩陣的方法。

SparseMatrix<double> spA = A.sparseView();
spA.triangularView<Upper>().solve<OnTheRight>(bT);  // COMPILE ERR!
spA.triangularView<Upper>().solve<OnTheRight>(bT.sparseView());  // COMPILE ERR!

編譯錯誤是

no matching function for call to ‘Eigen::SparseTriangularView<Eigen::SparseMatrix<double, 0>, 2>::solve(Eigen::RowVector3d&) const’
no matching function for call to ‘Eigen::SparseTriangularView<Eigen::SparseMatrix<double, 0>, 2>::solve(const Eigen::SparseView<Eigen::Matrix<double, 1, 3> >) const’

candidate is:

template<class OtherDerived> typename Eigen::internal::plain_matrix_type_column_major<OtherDerived>::type Eigen::SparseTriangularView::solve(const Eigen::MatrixBase<OtherDerived>&) const [with OtherDerived = OtherDerived, MatrixType = Eigen::SparseMatrix<double, 0>, int Mode = 2, typename Eigen::internal::plain_matrix_type_column_major<OtherDerived>::type = Eigen::internal::plain_matrix_type_column_major<T>::type]

我在文檔中找不到答案,有人能弄清楚如何做到這一點嗎?

編輯 SparseTriangularView :: solve既不接受OnTheLeft也不接受OnTheRight作為模板參數,但我只是試圖忽略參數,它似乎編譯。 我的猜測是它是一個缺失的功能,並已向開發人員報告。 如果他們確認,我會將他們的回復作為答案發布。

這確實是一個缺失的功能,但您可以通過轉置所有內容輕松解決:

xT.transpose() = spA.transpose().triangularView<Lower>().solve(bT.transpose());

或者,如果您直接處理列向量:

x = spA.transpose().triangularView<Lower>().solve(b);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM