C语言实现行列式计算
生活随笔
收集整理的這篇文章主要介紹了
C语言实现行列式计算
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
C語言實現行列式計算
前言
行列式的計算有多種方法,其中按行(列)展開法最為直觀,因此也最容易編寫為程序.本文提供兩種計算方法.
【方法一】
利用函數的遞歸,計算任意階行列式的值。注意:本程序中,在計算行列式之前,需輸入行列式的階數.
C語言在數學計算領域有諸多不便之處,例如數組的長度不可更改,這一點對于行列式的計算來說是極不方便的,因為余子式的階數比原行列式的階數要小,而在遞歸的過程中涉及到數組的長度.為此,設立兩個函數,第一個函數DET為計算的主要部分,第二個函數Minor專門用于計算余子式的值,而第二個函數中會調用第一個函數.
【方法二】
利用高斯消元法把行列式化簡為上三角形,再累乘對角線元素即可.
代碼展示
【方法一】:
#include <stdio.h> #include <math.h> #define MAX 20 //最大計算階數,可以更改//兩個函數的聲明 int DET(int arr1[MAX][MAX], int n); int Minor(int arr1[MAX][MAX], int i, int n);int DET(int arr1[MAX][MAX], int n) {int i, M, sum = 0;//i是第一行的列指標,M是余子式的值,sum是行列式的計算值if (n == 1)//一階行列式直接得出結果return arr1[0][0];else if (n > 1){for (i = 0; i < n; i++)//按第一行展開{M = Minor(arr1, i, n);sum += pow(-1, i + 2) * arr1[0][i] * M;}}return sum; }int Minor(int arr1[MAX][MAX],int i,int n) {int j, k,result;int arr2[MAX][MAX];//以下為構造余子式的過程。由于C語言的特性,這個過程會比較復雜,需要觀察余子式與原行列式的關系。for (j = 0; j < n - 1; j++){for (k = 0; k < n - 1; k++){if (k < i)arr2[j][k] = arr1[j + 1][k];else if (k >= i)arr2[j][k] = arr1[j + 1][k + 1];}}return DET(arr2, n - 1);//構造完后,余子式是一個新的行列式,返回DET函數進行計算。 }int main() {int arr1[MAX][MAX];int a,b,n;printf("請輸入行列式階數:");scanf_s("%d", &n);printf("請輸入行列式:\n");for (a = 0; a < n; a++) {for (b = 0; b < n; b++) {scanf_s("%d", &arr1[a][b]);}}printf("%d", DET(arr1, n)); }【方法二】
注:此方法中數據類型為double型.
總結
以上是生活随笔為你收集整理的C语言实现行列式计算的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IP及端口号
- 下一篇: java 设置pdf 编码格式_Java