【应用C】C语言实现行列式与矩阵的运算系统(+源代码)


很久之前的课程小组作业,实际用处不大,因为有Matlab的存在,虽然现在已经不提倡从轮子造起,但是从轮子开始了解是必须的,记录

01 - 行列式和矩阵

1.1 - 行列式定义

  行列式是一个数值,表现为有n2个数,排成n行n列的数表
D = 1 2 3 4 5 6 7 8 9 D= \left\| \begin{matrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \end{matrix} \right\|

  n个取自不同行不同列的n个元素乘积的代数和称为行列式
( 1 ) t a 1 p 1 a 2 p 2 a n p n \sum {(-1)^t}{a_{1p_1}}{a_{2p_2}}{\cdots}{a_{np_n}}

1.2 - 矩阵定义

  矩阵是一个数表,表现为有 m × n {m}\times{n} 个数 a i j {a_{ij}} i = 1 2 m j = 1 2 n i=1,2,{\cdots},m;j=1,2,{\cdots},n )排成 m m n n 列,矩阵是一个整体,总是加一个括弧表示
A = { 1 2 3 4 5 6 7 8 9 } A= \left\{ \begin{matrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \end{matrix} \right\}

02 - 基本运算

  不像Matlab这么强大,C语言只实现基本功能就可以,因为再复杂的运算都由基本功能组成

2.1 - 行列式基本运算

  1、行列式的值
  2、转置行列式
  3、行列式中第i行(列)乘以k
  4、互换行列式的两行 (列)
  5、行列式化为上三角
  6、第(i,j)元的代数余子式
  7、第j行(列)乘以k后,加到第i行(列)上
  8、检查行列式D是否能拆分成D1+D2(行/列)

2.2 - 矩阵基本运算

  1、逆矩阵
  2、转置矩阵
  3、矩阵的秩
  4、两个矩阵相乘
  5、两个矩阵相加
  6、交换矩阵的两行
  7、矩阵的某行乘以k
  8、常数k与矩阵相乘
  9、矩阵化为行阶梯型
  10、矩阵化为行最简型
  11、矩阵对应的行列式的值
  12、矩阵的第i行乘以k,加到第j行

03 - 数据结构

  抽象出行列式和矩阵的相似点,构建以下结构体

typedef struct DetOrMar
{
	//通用
	NuDe con[Defaul_size][Defaul_size];	
	char type;			//m-矩阵,d-行列式
	int row;			//行数 
	int col;			//列数 
	
	//行列式相关
	int value;			//行列式的值
	int Aij_value;		//代数余子式的值
}DorM;

  NuDe其实是一个分子分母分开存放的结构体(不知道为什么当初用这个英文,这是躶体的意思,看到结构体后就知道,原来是分子/分母英文缩写的组合nude,奇葩),分子分母分开存放的原因是防止精度丢失,能使用整数运算就不要使用浮点数

typedef struct Elem	 
{
	int deno;			//分母 
	int nume;			//分子 
}NuDe;

04 - 结果测试

4.1 - 菜单

Alt

数据导入
  

Alt

类型选择
  

Alt

行列式运算
  

Alt

矩阵运算
  

4.2 - 行列式

D = 1 2 3 4 2 3 4 1 3 4 1 2 4 1 2 3 D= \left\| \begin{matrix} 1 & 2 & 3 & 4\\ 2 & 3 & 4 & 1 \\ 3 & 4 & 1 & 2 \\ 4 & 1 & 2 & 3 \end{matrix} \right\|
Alt

Alt

4.3 - 矩阵

A = { 4 1 2 2 2 1 3 1 1 } A= \left\{ \begin{matrix} 4 & 1 & -2 \\ 2 & 2 & 1 \\ 3 & 1 & -1 \end{matrix} \right\}

Alt

Alt

Alt

05 - 源码下载

  小组课程作业,链接:百度网盘  提取码:xt1m

06 - 总结

  • 实现了行列式和矩阵的基本运算
  • 输入比较麻烦,可以改一下文件读入的扫描方式
  • 细节有问题,存在内存泄露的问题

猜你喜欢

转载自blog.csdn.net/Hxj_CSDN/article/details/86224781
今日推荐