不会提高有一个吗?其中一,y,x是一个矩阵(稀疏和可能非常大)和矢量分别。Y或x可以是未知的。

我不能在这里找到它: http://www.boost.org/doc/libs/1_39_0/libs/numeric/ublas/doc/index.htm

有帮助吗?

解决方案

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

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

其他提示

是的,你可以解决升压转换器的的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)A)^ - 1获得X:X = (反式(A)A)^ - 1AY

一个最好的解决为Ax=b,当一个稀少,是蒂姆*戴维斯 UMFPACK

UMFPACK 计算一个疏鲁分解A.是的算法 得到使用的后场景在Matlab当你的类型 x=A\b (一是疏 和平方). UMFPACK 是免费的软件(GPL)

还注意到,如果y=斧头,并x是已知的,但你不是,你的计算y通过执行一个疏矩阵矢量繁殖,不是通过解决一个直线系统。

读升压文档,它似乎并不像求解w.r.t x被实现。在y中求解是唯一的矩阵矢量乘积,这似乎在uBLAS库实现的问题。

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

Boost的线性代数包的调谐集中在“密集矩阵”。 据我所知,Boost的包没有任何线性系统求解。 如何在C( http://www.nr.com/oldverswitcher在“数值配方使用的源代码。 HTML )”?

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top