2

我想要一种可以解决 nxn 行列式并返回值的计算机算法。最推荐使用 C++ 语言,其中输入是 2D 数组,N,输出是值。

数学中有一种详尽的方法可以解决大小超过 3 x 3 的行列式。如果有人能找到解决行列式的代码片段,那将很有帮助。

考虑到“n”个线性方程组的系数,主要目的是求解“n”个变量。一旦 'n' 超过 4,这件事在纸上就会变得一团糟。有一种求解此类方程的“行列式”方法。虽然一旦'n'超过3,它在纸上也会变得凌乱,但如果我能找到计算机如何解决它,它是可行的。谢谢!

4

4 回答 4

3

数值配方中所述,行列式只是 LU 分解后对角元素的乘积。(这本书可以在线获得,并且有用于计算 LU 分解的代码)。

于 2012-04-09T16:58:20.530 回答
1

许多语言都内置了此功能。

例如,如果你创建一个 C# 程序,你可以使用Matrix.Determinant属性来立即得到它:

private Double determinantExample()
{
    Matrix myMatrix = new Matrix(5, 10, 15, 20, 25, 30);

    // Get the determinant, which is equal to -50.
    Double determinant = myMatrix.Determinant;

    return determinant;

}

如果这是一个教育练习,维基百科会在文章顶部向您展示如何解决行列式:http ://en.wikipedia.org/wiki/Determinant

于 2012-04-09T16:57:28.927 回答
1

维基百科有一个算法列表。LAPACK 和它的表兄弟是标准工具,看起来有一个C++ 版本

于 2012-04-09T16:58:31.643 回答
1

更简单的方法是通过应用 laplae 公式(http://en.wikipedia.org/wiki/Determinant#Laplace.27s_formula_and_the_adjugate_matrix)使用递归方法

在这里,您有一个实现 det() 函数的类 Matrix 看看。 http://www.dreamincode.net/forums/topic/55772-determinant-of-matrix-in-c/

这里给出了两种解决方案:http: //cboard.cprogramming.com/cplusplus-programming/30001-determinant-calculation.html

第一个不是递归的,第二个和第一个链接的解法基本相同。非递归方法基本上将您的矩阵转换为三角矩阵。三角矩阵的行列式是对角元素的乘法。见这里:http ://en.wikipedia.org/wiki/Determinant#Properties_of_the_determinant (规则6)

于 2012-04-09T17:18:05.870 回答