对于定维稠密线性系统(N=9) (矩阵是对称的、正半定的),您建议采用哪种算法快速求解?
类型为32位浮点数和64位浮点数。
这样的系统将被解决数百万次,因此算法在维数(n=9)方面应该是相当快的。
鲁棒 C++实现的实例值得赞赏。
( 1)你所说的“解决百万次”是什么意思?相同的系数矩阵,有一百万种不同的右项,还是有一百万个不同的矩阵?
上百万不同的矩阵。
2)正_semi_definite表示矩阵可以是奇异的(对机器精度而言)。你想怎么处理这个案子?只是提出一个错误,还是试图返回一些明智的答案?
提高误差是可以的。
发布于 2012-11-14 07:14:06
矩阵是对称的,正半定的,Cholesky分解严格优于LU分解.(大约比LU快两倍,不管矩阵的大小如何。资料来源: Trefethen和Bau的“数值线性代数”。
事实上,对于小型密集矩阵(来源:我在计算数学中做了一个PhD ),迭代方法的效率低于直接方法,除非系统变得足够大(快速的经验法则没有任何意义,但这一点总是好的:在任何现代计算机上,任何小于100*100的矩阵绝对是一个需要直接方法的小矩阵,而不是迭代方法)。
现在,我不建议你自己去做。有很多优秀的图书馆已经过了彻底的测试。但如果我要推荐你的话,那就是本征:
顺便说一句,在这里的文档中,您可以在一个很好的、简洁的表格中了解到它们的7个直接线性求解器的各种优缺点。在你的例子中,LDLT (Cholesky的变体)似乎赢了
发布于 2012-11-13 23:06:27
一般来说,最好是使用现有的库,而不是自己的方法,因为在追求快速、稳定的数字实现时,有许多繁琐的细节需要处理。
这里有几个可以让你开始:
艾根图书馆(我个人的喜好):
标头
鲤鱼:http://arma.sourceforge.net/
四处搜寻,你会发现很多其他人。
发布于 2012-11-13 23:55:08
我建议LU分解,特别是如果“解决数百万次”的意思是“解决一次并应用于数百万个向量”。您将创建LU分解,保存它,并对尽可能多的r.h.s应用前向回替代。如你所愿。
如果你使用旋转,它在圆角面前会更稳定。
https://stackoverflow.com/questions/13369468
复制相似问题