在c++中更高效、更快速地反转矩阵(大矩阵和小矩阵)
More efficient and fast way of inverting matrices in c++ (big and small)
编辑。既然有人问我这个问题,我就获得了求解断层扫描线性方程组的博士学位。由于这个问题仍然有很多流量,我想强调@selliptize回答的第一句话:没有简单的答案。它在很大程度上取决于矩阵的性质,而且几乎总是不想反转矩阵。
现在,对于这个非常无辜的人提出的最初的问题,他认为这很容易得到回答。。。
在谷歌搜索矩阵求逆算法时,我发现关于如何在代码中做到这一点,有几种方法(和意见!(。我想知道哪种方法是最快的,还是性能最好的,但试图找到答案却一无所获。
我知道在某些情况下,可以计算伪逆(使用SVD、cholevsky…(,我实际上在代码中使用了其中的一些,我知道有好几次逆根本不存在,等等。很容易找到特定问题的具体答案,但对于矩阵求逆这一大问题(巨大!(,却不是一般的直觉。
所以我的问题是:
对于小矩阵,什么方法的性能最好?精度如何?大矩阵呢
我个人的例子是一个6x6(编辑:symmetric(矩阵,它必须反转数千次(是的,是的,有不同的值(,我需要高精度,但速度肯定会非常方便。
请注意,我不是在寻找代码,我会自己编写最适合我的答案,但我认为这是很多程序员都想知道的问题。
没有简单的答案。确保你已经阅读并理解了这篇文章。
对于2x2矩阵,可以用一个涉及行列式的简单公式来计算逆。但对于任何更大的因子分解,我更喜欢因子分解,例如一个枢轴LU因子分解。如果您关心性能并处理大型稀疏矩阵,迭代求解器可能是合适的。或者,您可以尝试MUMPS(多平面体量并行解算器(并测量性能。迭代求解器的问题是,它们的收敛速度在很大程度上取决于反问题的条件以及你是否找到了好的预处理器。
也许您应该从Eigen库开始,并首先尝试透视LU因子分解。
- C++中高效的大型稀疏块压缩线性方程
- C++中的高效循环缓冲区,它将被传递给C样式数组函数参数
- 如何在C++中高效地构造随机骰子
- 如何实现高效的算法来计算大型数据集的多个不同值?
- 更高效地在微控制器上对C++进行基准测试
- 从C++无序集合中高效提取元素
- 高效的字符串截断算法,按顺序删除相等的前缀和后缀
- C++中特征对角矩阵类型的高效存储
- 高效简单的结构比较运算符
- 使用 Rcpp 的高效矩阵子集
- C++ 包含特征矩阵的类的高效算术运算符重载
- CUDA 高效的 nd-array(张量)切片
- 大多数基本类型的高效二进制序列化
- RAM高效C++属性
- 如何为球形物体和三角形地形提供高效的碰撞检测和响应
- 如何实现四个 i8 元素组的高效_mm256_madd_epi8点积
- 如何在嵌套映射(C++)中高效地查找密钥
- 在C++中高效地保存许多连续记录的图像
- C++ - 将函数链接到触发器的有效和高效方法
- C/C++ 中的高效 pcap 解析器