有效地求解Ax = b,其中A是4x4对称矩阵,b是4x1向量

C. *_*ang 2 c++ opencv linear-equation

我将解决一个小的线性系统Ax = b,其中A一个4乘4的对称矩阵存储了16个double数字(实际上其中10个足以表示它),b是4乘1的向量.问题是,我必须运行这种系统数百万次.所以我正在寻找最有效的库来解决它.我尝试了cv::solve()方法OpenCV,但我仍觉得它很慢.

由于矩阵A是对称的,我记得Conjugate Gradient算法因其效率而可能是一个很好的候选者.但是,我还没有找到它的库(英特尔MKL似乎有一个,但它是专为稀疏矩阵设计的,不适合我的问题).

任何人都可以帮助我吗?

Haa*_*hii 5

由于矩阵维数是固定的,我认为你最好,直接实现逆.这项任务有一个现成的公式.你有:

逆矩阵公式

条目由B下式给出: 计算B_ij

两个配方师都来自这个网站.

您应该能够利用您的矩阵是对称的事实进一步简化这些条目的计算.如果你这样做,我认为你会比任何一般矩阵逆实现更快.

那么你仍然需要申请A^-1你的b,这是一个简单的矩阵向量乘法,你也应该硬编码,以获得最佳性能.

所有这些都假设您确实需要针对此特定问题的最佳性能.如果矩阵维度发生变化,或者这不是算法中最关键的部分,请查看Eigen,Lapack/Blas或任何其他线性代数库.解决密集线性系统是基本任务,应该包含在任何这样的库中.

  • 记得在一些其他解决方案(例如openCV逆垫解决方案)上测试随机矩阵上的代码,以避免在硬编码时出现索引错误;) (2认同)