文章目录
很久之前的课程小组作业,实际用处不大,因为有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\|
D=
147258369
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)ta1p1a2p2⋯anpn
1.2 - 矩阵定义
矩阵是一个数表,表现为有
m
×
n
{m}\times{n}
m×n个数
a
i
j
{a_{ij}}
aij(
i
=
1
,
2
,
⋯
,
m
;
j
=
1
,
2
,
⋯
,
n
i=1,2,{\cdots},m;j=1,2,{\cdots},n
i=1,2,⋯,m;j=1,2,⋯,n)排成
m
m
m行
n
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\}
A=⎩
⎨
⎧147258369⎭
⎬
⎫
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 - 菜单
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\|
D=
1234234134124123
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\} A=⎩ ⎨ ⎧423121−21−1⎭ ⎬ ⎫
05 - 源码下载
小组课程作业,链接:[百度网盘] https://pan.baidu.com/s/1cMruuruUp-m3v1yv1J2cBw 提取码:xt1m
06 - 总结
- 实现了行列式和矩阵的基本运算
- 输入比较麻烦,可以改一下文件读入的扫描方式
- 细节有问题,存在内存泄露的问题