C语言实现行列式计算 |
您所在的位置:网站首页 › c语言行列互换函数 › C语言实现行列式计算 |
C语言实现行列式计算
前言
行列式的计算有多种方法,其中按行(列)展开法最为直观,因此也最容易编写为程序.本文提供两种计算方法. 【方法一】 利用函数的递归,计算任意阶行列式的值。注意:本程序中,在计算行列式之前,需输入行列式的阶数. C语言在数学计算领域有诸多不便之处,例如数组的长度不可更改,这一点对于行列式的计算来说是极不方便的,因为余子式的阶数比原行列式的阶数要小,而在递归的过程中涉及到数组的长度.为此,设立两个函数,第一个函数DET为计算的主要部分,第二个函数Minor专门用于计算余子式的值,而第二个函数中会调用第一个函数. 【方法二】 利用高斯消元法把行列式化简为上三角形,再累乘对角线元素即可. 代码展示【方法一】: #include #include #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 int j, k,result; int arr2[MAX][MAX]; //以下为构造余子式的过程。由于C语言的特性,这个过程会比较复杂,需要观察余子式与原行列式的关系。 for (j = 0; j 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 scanf_s("%d", &arr1[a][b]); } } printf("%d", DET(arr1, n)); }【方法二】 注:此方法中数据类型为double型. #include #define MAX 20 void swap(double* a,double*b){ double tmp = *a; *a = *b; *b = tmp; } void swaparr(double arr[MAX][MAX],int a,int b,int n){ int i; for(i=0;i for(j=0;j //确保标准数不为0 swaparr(arr,i,i+(k++),n); sign++; } if(arr[i][i]==0.0&&i+k==n){ //整个一行都为0 printf("0"); return 0; } for(j=i+1;j tmp = -(double)arr[j][i]/arr[i][i]; //保存乘积因子 for(k=i;k |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |