- 最近线代的计算量越来越大了 网上的计算器 只能算低阶的行列式 .所以我自己就写了一个 最多可以计算20阶的行列式的 代码 计算结果总是会出问题,我发在这里 希望有谁能给我建议 .基于C语言 主要使用递归算法完成.
复制代码- #include "stdafx.h"
- float p[][20] = { 0 };
- void T(float(*a)[20], float(*p2)[20], int y, int x, int n)//把a中的数据 去掉第 y 行 第x列 后给p2
- {
- int k = 0, l = 0;
- for (int i = 0; i<n; i++)
- {
- if (i != y)
- {
- for (int j = 0; j<n; j++)
- {
- if (j != x)
- {
- p2[k][l] = a[i][j];
- if (++l == n - 1)
- {
- l = 0;
- }
- }
- }
- k++;
- }
- }
- }
- int cc(int i, int j)
- {
- if ((i + j) % 2 == 0)
- {
- return 1;
- }
- else
- return -1;
- }
- float Deter(float(*a)[20], int n)//计算行列式的主要函数
- {
- float s = 0;
- if (n == 2)
- {
- s = a[0][0] * a[1][1] - a[1][0] * a[0][1];
- }
- else
- {
- for (int i = 0; i<n; i++)
- {
- T(a, p, i, 0, n);
- s += a[i][0] * Deter(p, n - 1)*cc(i + 1, 1);
- }
- }
- return s;
- }
复制代码
|