如何快速计算C中6×6矩阵的行列式?

如何快速计算C中6×6矩阵的行列式?,第1张

概述在C中我需要非常快速地计算6×6矩阵行列式. 这是我如何为2×2矩阵执行此 *** 作: double det2(double A[2][2]) { return A[0][0]*A[1][1] - A[0][1]*A[1][0];} 我想要一个6×6矩阵的行列式的类似函数,但我不想手工编写,因为它包含6! = 720项,其中每个项是矩阵中6个元素的乘积. 因此我想使用莱布尼兹公式: stati 在C中我需要非常快速地计算6×6矩阵的行列式.

这是我如何为2×2矩阵执行此 *** 作:

double det2(double A[2][2]) {   return A[0][0]*A[1][1] - A[0][1]*A[1][0];}

我想要一个6×6矩阵的行列式的类似函数,但我不想手工编写,因为它包含6! = 720项,其中每个项是矩阵中6个元素的乘积.

因此我想使用莱布尼兹公式:

static int perms6[720][6];static int signs6[720];double det6(double A[6][6]) {  double sum = 0.0;  for(int i = 0; i < 720; i++) {     int j0 = perms6[i][0];     int j1 = perms6[i][1];     int j2 = perms6[i][2];     int j3 = perms6[i][3];     int j4 = perms6[i][4];     int j5 = perms6[i][5];     sum += signs6[i]*A[0]*A[j0]*A[1]*A[j1]*A[2]*A[j2]*A[3]*A[j3]*A[4]*A[j4]*A[5]*A[j5];  }  return sum; }

我如何找到排列和符号?

有没有什么方法可以让编译器完成更多的工作(例如C宏或模板元编程),这样功能会更快?

编辑:
我只是计时以下代码(Eigen):

Matrix<double,6,6>  A;// ... fill Afor(long i = 0; i < 1e6; i++) {    PartialPivLU< Matrix<double,6> > LU(A);    double d = LU.determinant();}

到1.25秒.所以使用LU或高斯分解绝对足够我的使用!

解决方法 使用 Eigen,可以找到一个例子 here. 总结

以上是内存溢出为你收集整理的如何快速计算C中6×6矩阵的行列式?全部内容,希望文章能够帮你解决如何快速计算C中6×6矩阵的行列式?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/langs/1215345.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存