|
- 最近線代的計算量越來越大了 網(wǎng)上的計算器 只能算低階的行列式 .所以我自己就寫了一個 最多可以計算20階的行列式的 代碼 計算結(jié)果總是會出問題,我發(fā)在這里 希望有誰能給我建議 .基于C語言 主要使用遞歸算法完成.
復(fù)制代碼- #include "stdafx.h"
- float p[][20] = { 0 };
- void T(float(*a)[20], float(*p2)[20], int y, int x, int n)//把a(bǔ)中的數(shù)據(jù) 去掉第 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)//計算行列式的主要函數(shù)
- {
- 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;
- }
復(fù)制代碼
|
|