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

在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 A;

// ... fill A

for(long i = 0; i < 1e6; i++) {

PartialPivLU< Matrix > LU(A);

double d = LU.determinant();

}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值