c - 无加速结果的高斯消去法

标签 c algorithm math gaussian determinants

我正在开发一个 C 库(对于我自己来说,代码: https://github.com/BattlestarSC/matrixLibrary.git )来处理矩阵函数。这主要是一个学习/练习事件。

我的挑战之一是有效地求出矩阵的行列式。由于我目前的尝试失败了,我想采取不同的方法。我正在从麻省理工学院文档中阅读此方法: Determinants 这很有意义。

我遇到的问题是如何达到上述目的。由于高斯消元法适用于多变量方程组,因此我的矩阵不是由方程构建的,因此不是系统的一部分。如图所示,每个方程没有任何设定结果,并且不符合 this paper 的形式。 .

从这一点来看,我不知道如何继续使用此方法。

按照麻省理工学院论文中所述,从每组方程中获取枢轴点很有意义,但是我应该如何设置矩阵才能使所述结果有效?

最佳答案

当您执行高斯消除时,您交换行并重复从另一行中减去一行的倍数以生成上三角形式。

当您在方程组或“增广矩阵”上执行此操作时,您不会使用结果列中的任何信息。无论结果列中的数字是什么,关于交换哪些行以及用什么乘数减去哪些行的决定都将完全相同。

由于未使用“结果列”,因此可以对普通方阵执行相同的过程。由于这些操作不会改变行列式(如果每次交换时对一行取负),因此最终会得到一个与原始矩阵具有相同 det 的上三角矩阵。

MIT 作者在开头附近的示例中调用函数 lu 来执行此操作。这对矩阵进行 L-U 分解,返回“U”部分中的高斯消除矩阵:https://en.wikipedia.org/wiki/LU_decomposition .

L-U 分解非常酷。这就像进行高斯消元法来一次性求解具有相同“矩阵部分”的所有系统,您也可以这样做,因为该过程根本不需要查看结果列。

从矩阵M开始,得到LU,使得LU = M。这意味着,如果你想解决:

Mx = y

...其中(x 和 y 是列 vector ),您有:

LUx = y

求解Lv=y,这很容易(只需替换),因为L是下三角的。那么你就有了:

Ux = v

...这很容易解决,因为 U 是上三角形。

关于c - 无加速结果的高斯消去法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55434303/

相关文章:

c - C中奇怪的printf输出

c - 链表实现段错误

c - 随机乱序内存泄漏

javascript - URL 的错误检测算法

actionscript-3 - 如何将curveTo()转换为点列表?

c - 将函数定义放在 main() 之后是否比将它们放在 main() 之前有任何优势?

c++ - IntelliSense:类型 "const char *"的参数与类型 "LPCWSTR"的参数不兼容

java - Minimax 算法不返回最佳移动

javascript - 我如何完成这个百分比问题

math - 将 99 位长的大素数分解的问题