在编程中,求行列式有多种方法,以下是一些常见的方法及其C语言实现:
1. 按行(列)展开法
选择矩阵的某一行(列),将该行(列)的每个元素与其对应的代数余子式相乘,然后求和。代数余子式是去掉第i行和第j列后的子矩阵的行列式,乘以$(-1)^{(i+j)}$。
```c
include include double determinant(double matrix, int n) { double det = 0.0; int i, j, k; if (n == 1) { return matrix; } if (n == 2) { return matrix * matrix - matrix * matrix; } double submatrix = (double )malloc((n - 1) * sizeof(double *)); for (i = 0; i < n - 1; i++) { submatrix[i] = (double *)malloc((n - 1) * sizeof(double)); } for (i = 0; i < n; i++) { for (j = 1; j < n; j++) { for (k = 0; k < n; k++) { if (k == i) { continue; } submatrix[i][j - 1] = matrix[j][k]; } } det += ((-1) } for (i = 0; i < n - 1; i++) { free(submatrix[i]); } free(submatrix); return det; } double minor(double matrix, int n, int i) { int submatrix = (double )malloc((n - 1) * sizeof(double *)); for (int j = 0; j < n - 1; j++) { submatrix[j] = (double *)malloc((n - 1) * sizeof(double)); } for (int row = 0, col = i + 1; row < n; row++, col++) { for (int k = 0, sub_col = 0; k < n; k++, sub_col++) { if (k == i) { continue; } submatrix[row][sub_col] = matrix[row][k]; } } double det = determinant(submatrix, n - 1); for (int j = 0; j < n - 1; j++) { free(submatrix[j]); } free(submatrix); return det; } int main() { double matrix = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; double matrix_ptr = (double )malloc(3 * sizeof(double *)); for (int i = 0; i < 3; i++) { matrix_ptr[i] = matrix[i]; } printf("Determinant: %f\n", determinant(matrix_ptr, 3)); free(matrix_ptr); return 0; } ``` 2. 高斯消元法 通过初等行变换将矩阵化为上三角矩阵,然后将对角线元素相乘得到行列式。