我有一个系统Ax=b,其中B是一个常数,但A在每次迭代中不断变化。随着A的变化,我再次使用UMFPACK5来求解这个线性系统。我可以通过两种方式执行上述操作:一开始仅计算矩阵A的符号和数值因式分解,并在每次迭代中使用这个数值对象求解Ax=b(当然在稀疏矩阵表示中,Ax随着A的变化而变化.Ap和Ai保持不变)。INEACH迭代计算矩阵A的符号和数值因式分解(即随着A的变化一个新的数值对象)并使用这个新的数值对象求解Ax=b。以上哪种方式是正确的?对于上述两个过程,我得到完全不同的答案(正如预期的那样)。任何帮助或评论表示赞赏。谢谢。 最佳答案
我在数字代码中使用Boost的uBLAS,并有一个“重型”求解器:http://www.crystalclearsoftware.com/cgi-bin/boost_wiki/wiki.pl?LU_Matrix_Inversion该代码运行良好,但是速度非常慢。经过一番研究,我找到了UMFPACK,这是一个稀疏矩阵求解器(除其他外)。我的代码生成大型稀疏矩阵,我需要非常频繁地求逆(更正确地求解,逆矩阵的值无关紧要),因此UMFPACk和BOOST的Sparse_Matrix类似乎是美满的结合。UMFPACK请求由三个vector指定的稀疏矩阵:条目计数、行索引和条目。(Seeexamp
我正在使用BoostUBlas的数值库绑定(bind)来求解一个简单的线性系统。以下工作正常,除了它仅限于处理矩阵A(mxm)相对小“m”。在实践中,我有一个更大的矩阵,维度m=10^6(最多10^7)。是否存在有效使用内存的现有C++方法来解决Ax=b。#include#include#include#include#include//compileablewiththiscommand//g++-I/home/foolb/.boost/include/boost-1_38-I/home/foolb/.boostnumbind/include/boost-numeric-bindin