我想在c#中找到4×4矩阵的行列式

可能重复:
在C#中计算NxN矩阵行列式

我想在c#中找到4×4矩阵的行列式

int ss = 4; int count = 0; int[,] matrix=new int[ss,ss]; ArrayList al = new ArrayList() {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 }; for (int i = 0; i < ss; i++) { for (int j = 0; j < ss; j++) { matrix[i, j] =Convert.ToInt32( al[count]); ++count; Response.Write(matrix[i, j] + " "); } Response.Write("
"); }

如果你被固定为4×4,最简单的解决方案就是硬编码公式。

  // assumes matrix indices start from 0 (0,1,2 and 3) public double determinant(int[,] m) { return m[0,3] * m[1,2] * m[2,1] * m[3,0] - m[0,2] * m[1,3] * m[2,1] * m[3,0] - m[0,3] * m[1,1] * m[2,2] * m[3,0] + m[0,1] * m[1,3] * m[2,2] * m[3,0] + m[0,2] * m[1,1] * m[2,3] * m[3,0] - m[0,1] * m[1,2] * m[2,3] * m[3,0] - m[0,3] * m[1,2] * m[2,0] * m[3,1] + m[0,2] * m[1,3] * m[2,0] * m[3,1] + m[0,3] * m[1,0] * m[2,2] * m[3,1] - m[0,0] * m[1,3] * m[2,2] * m[3,1] - m[0,2] * m[1,0] * m[2,3] * m[3,1] + m[0,0] * m[1,2] * m[2,3] * m[3,1] + m[0,3] * m[1,1] * m[2,0] * m[3,2] - m[0,1] * m[1,3] * m[2,0] * m[3,2] - m[0,3] * m[1,0] * m[2,1] * m[3,2] + m[0,0] * m[1,3] * m[2,1] * m[3,2] + m[0,1] * m[1,0] * m[2,3] * m[3,2] - m[0,0] * m[1,1] * m[2,3] * m[3,2] - m[0,2] * m[1,1] * m[2,0] * m[3,3] + m[0,1] * m[1,2] * m[2,0] * m[3,3] + m[0,2] * m[1,0] * m[2,1] * m[3,3] - m[0,0] * m[1,2] * m[2,1] * m[3,3] - m[0,1] * m[1,0] * m[2,2] * m[3,3] + m[0,0] * m[1,1] * m[2,2] * m[3,3]; } 

参考

  • 维基百科/行列式
  • EuclidianSpace.com/Determinant 4×4公式

您可能会在上次发布此完全相同的问题时查看答案 。

我不喜欢看似别人的作业,所以我会总结一些关于你的问题的想法,希望这比仅仅发布解决方案更具启发性。

您之前可能已经完成了3×3决定因素,并注意到该方法依赖于使用交叉行和列留下的单个2×2行列式。 然后乘以双交叉数,然后+/-交替。

因此,对于4×4矩阵,您只需扩展此算法即可。 然后,这将要求您在越过col +行后找到剩余3×3矩阵的行列式。

基本上,您需要一个执行此操作的递归程序。

此外,听起来这个问题是更大的算法设计课程的一部分,你应该意识到这个算法不是很可扩展,即对于较大的矩阵,它需要大量的计算。

根据我的记忆,LU分解是一种很好的选择,它允许矩阵求逆具有良好的缩放特性。

你需要的是LU分解的实现。

它将矩阵分解为两个三角矩阵L和U,使得A = L * U. L是下三角矩阵,U是上三角矩阵。

由于A = L * U,则det(A)= det(L)* det(U)。 现在,三角矩阵的行列式等于对角线上的乘积od元素的事实允许容易地计算det(L)和det(U)。

对于U,det(L)= diag_prod(L)相同

所以

det(A)= diag_prod(L)* diag_prod(U)

至于LU-Decomposition的实际算法,我推荐Doolittle算法。 这很容易理解,维基百科有描述。

http://en.wikipedia.org/wiki/LU_decomposition