首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UMFPACK和BOOST的uBLAS稀疏矩阵

UMFPACK和BOOST的uBLAS稀疏矩阵
EN

Stack Overflow用户
提问于 2010-10-21 23:26:05
回答 1查看 4K关注 0票数 4

我在一个数值代码中使用Boost的uBLAS,并且有一个“繁重”的求解器:

http://www.crystalclearsoftware.com/cgi-bin/boost_wiki/wiki.pl?LU_Matrix_Inversion

代码运行得很好,然而,它的运行速度却慢得令人痛苦。经过一些研究,我发现了UMFPACK,它是一个稀疏矩阵求解器(以及其他东西)。我的代码生成了需要频繁求逆的大型稀疏矩阵(更准确地说,求逆矩阵的值是不相关的),因此UMFPACk和BOOST的Sparse_Matrix类似乎是一对美满的联手。

UMFPACK请求由三个向量指定的稀疏矩阵:条目计数、行索引和条目。(See example)。

我的问题可以归结为,我能从BOOST的Sparse Matrix类中有效地获得这三个向量吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-10-22 03:50:03

这有一个绑定:

http://mathema.tician.de/software/boost-numeric-bindings

这个项目似乎停滞不前了两年,但它做得很好。示例用法:

代码语言:javascript
复制
    #include <iostream>
    #include <boost/numeric/bindings/traits/ublas_vector.hpp>
    #include <boost/numeric/bindings/traits/ublas_sparse.hpp>
    #include <boost/numeric/bindings/umfpack/umfpack.hpp>
    #include <boost/numeric/ublas/io.hpp>

    namespace ublas = boost::numeric::ublas;
    namespace umf = boost::numeric::bindings::umfpack;

    int main() {

      ublas::compressed_matrix<double, ublas::column_major, 0,
       ublas::unbounded_array<int>, ublas::unbounded_array<double> > A (5,5,12); 
      ublas::vector<double> B (5), X (5);

      A(0,0) = 2.; A(0,1) = 3; 
      A(1,0) = 3.; A(1,2) = 4.; A(1,4) = 6;
      A(2,1) = -1.; A(2,2) = -3.; A(2,3) = 2.;
      A(3,2) = 1.;
      A(4,1) = 4.; A(4,2) = 2.; A(4,4) = 1.; 

      B(0) = 8.; B(1) = 45.; B(2) = -3.; B(3) = 3.; B(4) = 19.; 

      umf::symbolic_type<double> Symbolic;
      umf::numeric_type<double> Numeric;

      umf::symbolic (A, Symbolic); 
      umf::numeric (A, Symbolic, Numeric); 
      umf::solve (A, X, B, Numeric);   

      std::cout << X << std::endl;  // output: [5](1,2,3,4,5)
    } 

笔记

通过这项工作,我正在考虑搬到NETLIB

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3989094

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档