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型.

#include <stdio.h>
#define MAX 20void 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<n;i++)swap(&arr[i][a],&arr[i][b]);
}int main(){int i,j,k;int n;                //阶数 int sign=0;           //行列式交换一次需要改变符号,此变量记录交换次数 double tmp;            //暂存乘积因子 double arr[MAX][MAX];double sum=1.0;     //结果 scanf("%d",&n);for(i=0;i<n;i++){for(j=0;j<n;j++)scanf("%lf",&arr[i][j]);}for(i=0;i<n-1;i++){k=1;while(arr[i][i]==0.0&&i+k<n){  //确保标准数不为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<n;j++){if(arr[j][i]==0.0)            //如为0则那一行不用化简 continue;else{tmp = -(double)arr[j][i]/arr[i][i];        //保存乘积因子 for(k=i;k<n;k++)arr[j][k] += (tmp*arr[i][k]);}}}for(i=0;i<n;i++)sum *= arr[i][i];if(sign%2==0)                //交换偶数次符号仍为正 printf("%f",sum);elseprintf("-%f",sum);    return 0;
}

C语言实现行列式计算相关推荐

  1. n阶行列式计算----c语言实现(完结)

    花了半天时间,写了这个n阶行列式计算的程序,应该算是比较优美吧,有很多地方多次做了优化,程序占用内存不是很大,要是说小吧,也不合适,因为里边有一个递归,而且递归的深度还比较深.时间复杂度具体没有细看, ...

  2. C语言展开法和全排列法实现n阶行列式计算

    在这里向大家介绍两种实现n阶行列式计算的方法 目录 1.展开法 2.全排列法 一.展开法: 展开法的实现思想就是利用递归不断将行列式某一行或者某一列的n-1个(假设行列式为n行n列)置为0,剩余一个置 ...

  3. C语言行列式计算--高万禄

    //不计算2阶行列式 //如需计算二阶,请改进 /* 姓名:高万禄 日期:2020/2/29 名称:行列式计算器 */ #include<stdio.h> #include<stdl ...

  4. C语言用代数余子式计算行列式

    本章主要介绍利用代数余子式计算行列的原理及代码实现 除了代数余子式法,其他计算行列式的方法如下: 1)利用高斯法计算行列式 2)利用LU分解法计算行列式 目录 1.代数余子式计算行列式的原理 二阶行列 ...

  5. MyMathLib系列(行列式计算2)

    /// <summary>/// 行列式计算,本程序属于MyMathLib的一部分.欢迎使用,參考,提意见./// 有时间用函数语言改写,做自己得MathLib,里面的算法经过验证,但没经 ...

  6. 数学/线性代数 {行列式, 行列式变换,行列式操作,行列式计算}

    数学/线性代数 {行列式, 行列式变换,行列式操作,行列式计算} @LOC_COUNTER: 5 行列式 定义 给定方形矩阵S [ a b c d ] \begin{bmatrix} a & ...

  7. OpenCv Java Mat的基本使用-行列式计算(6)

    矩阵在形式上和行列式是一样 的,这两天看Mat,想起之前学历的行列式,那么我们如何求解一个矩阵对应的行列式的求解方法 行列式计算: 最简单的二维的行列式: 哈哈,上面是一个简单的计算的规则,希望你勾起 ...

  8. R语言sd函数计算数值标准差实战(Standard Deviation)

    R语言sd函数计算数值标准差实战(Standard Deviation) 目录 R语言sd函数计算数值标准差实战(Standard Deviation) #基本语法 #sd

  9. R语言自定义函数计算dataframe每列中的缺失值NA的个数、缺失值问题及其填充示例

    R语言自定义函数计算dataframe每列中的缺失值NA的个数.缺失值问题及其填充示例 目录

  10. R语言Eta squared计算实战:Eta squared表示可以用模型中给定的变量解释的方差的比例、拟合方差分析模型(two-way ANOVA)、计算Eta Squared

    R语言Eta squared计算实战:Eta squared表示可以用模型中给定的变量解释的方差的比例.拟合方差分析模型(two-way ANOVA).计算Eta Squared 目录

最新文章

  1. 通过js判断不同终端类型,跳转到不同的页面
  2. Hybrid框架UI重构之路:三、工欲善其事,必先利其器
  3. dos窗口ping命令测试实战
  4. mysql 6.2使用_2. MYSQL基本使用(2)
  5. 洛谷 - P5192 Zoj3229 Shoot the Bullet|东方文花帖|【模板】有源汇上下界最大流(有源汇有上下界的最大流)
  6. CRM WebClient UI里Sales area的保存原理
  7. leetcode题解108-将有序数组转换为二叉排序树
  8. java supplier_Java 函数式编程
  9. Linux内核深入理解中断和异常(7):中断下半部:Softirq, Tasklets and Workqueues
  10. mysql front的使用注意要点
  11. oracle获取字符串长度函数length()和hengthb()
  12. 哪所985计算机专业招文科,4张表看透36所985大学自主招生专业,收藏起来做备考材料!...
  13. python基础项目 --爬取金山词霸翻译功能
  14. 微商城应该怎样选择?
  15. 国内外最顶级的12大看板工具
  16. mysql面试题学校三表查询_mysql经典面试题之学生成绩表
  17. 智比奈特万兆光口网卡 ZB-10G-1F 驱动安装和带宽测试
  18. 学好mysql教材_MySQL基础学习
  19. 不用任何软件,批量转化图片格式
  20. 这样做团建,还担心员工离职吗?

热门文章

  1. 空间分析——SatScan软件简明教程
  2. YOLOv2——中文版翻译
  3. keevi源地址_2019年越狱源地址排行是怎样的?
  4. java ipa签名_iOS苹果应用IPA一键签名工具及重签教程
  5. pmp 第六版 模拟卷1疑难问题
  6. coreldraw快速撤回_CorelDRAW快捷键:常用快捷键(1)
  7. 端到端的含义,统计学习、机器学习和深度学习的区别与联系
  8. 计算机人工智能专业大一新生入学前做点什么
  9. TTL与CMOS电路
  10. AICreateMeeting-遇见未来