Boost的线性代数求解Y =斧(Boost's Linear Algebra Soluti

2019-06-27 18:42发布

是否有提升吗? 其中A,Y和X是一个矩阵(稀疏,并且可以是非常大的)和载体分别。 Y或X可以是未知的。

我似乎无法在这里找到它: http://www.boost.org/doc/libs/1_39_0/libs/numeric/ublas/doc/index.htm

Answer 1:

线性求解器通常是LAPACK库这是BLAS库的更高级别的扩展的一部分。 如果你是在Linux上,英特尔MKL有一些很好的解决者,无论是密集和稀疏矩阵优化。 如果您使用的是Windows,MKL有免费一个月的审判......并说实话,我还没有尝试过任何其他的人在那里。 我知道阿特拉斯包有一个免费的LAPACK实现,但不知道它是如何努力让运行在Windows。

不管怎么说,搜索周围的LAPACK库,您的系统上工作。



Answer 2:

是的,你可以解决升压转换器的的uBLAS库线性方程组。 下面是一个使用LU-比化和回代得到逆一个短的路:

using namespace boost::ublas;

Ainv = identity_matrix<float>(A.size1());
permutation_matrix<size_t> pm(A.size1());
lu_factorize(A,pm)
lu_substitute(A, pm, Ainv);

因此,求解线性方程Ax = y,则通过采取逆解方程反式(A)组Ax =反式(A)Y(反式(A))^ - 1获得X:X =(反式( A)A)^ - 1AY。



Answer 3:

一为Ax = b的最好的解算器,当A是稀疏的,是蒂姆·戴维斯的UMFPACK

UMFPACK计算A的稀疏LU分解是键入时得到在Matlab幕后使用的算法x=A\b (和A是稀疏和正方形)。 UMFPACK是免费软件(GPL)

还要注意如果y = AX,并且x是已知的,但y不是,则通过执行稀疏矩阵矢量相乘,不够通过求解线性系统计算收率



Answer 4:

阅读Boost文档,它似乎并不像解决WRT x被实现。 在y中求解是唯一的矩阵矢量乘积,这似乎在uBLAS库实现的问题。

有一点要记住的是,BLAS只有实现诸如加法,乘法,等“易”业务...向量和矩阵类型。 任何更高级的(线性解决问题,喜欢你“解决在XY = A x”的,特征向量和共)是LAPACK,其构建在BLAS的顶部的一部分。 我不知道在这方面提供了什么样的推动作用。



Answer 5:

Boost的线性代数软件包的调整为重点的“密集矩阵”。 据我所知,Boost的包没有任何线性系统求解。 怎么样“在C(数值配方中使用的源代码http://www.nr.com/oldverswitcher.html )”?

注意。 可以有微妙索引错误在源代码中(一些代码使用数组索引从1开始)



Answer 6:

看看JAMA / TNT 。 我只用它的非稀疏矩阵(你可能想的QR或LU因式分解,这两者有求解效用的方法),但它显然有稀疏矩阵的一些设施。



文章来源: Boost's Linear Algebra Solution for y=Ax