初等变换:通过初等行(列同理)变换把增广矩阵变为简化阶梯型矩阵的线性方程组求解算法
- 具体步骤:
- 枚举每一列,找到枚举的当前列绝对值最大数的所在行
- 将该行换到最上面一行(第r行)
- 将该行第一个数(该行第c列元素)消成1
- 将该行第一个元素(该行第c列元素)下面的所有非零元素消成0
- 重复上面的操作,直到枚举到最后一列,把矩阵消成简化阶梯型矩阵
目录
找到枚举当前列绝对值最大的数的所在行 (ps:fabs函数:求绝对值函数)
1.初等变换基本操作
复习:
- 用一个非零的数乘某一行
- 把其中一行的若干倍加到另一行上
- 交换两行的位置
在函数实现的时候无形之中会用到如上的三条操作,以下就不再证明。
2.具体函数实现
枚举每一列
for (c = 0, r = 0; c < n; c++)
找到枚举当前列绝对值最大的数的所在行 (ps:fabs函数:求绝对值函数)
int t = r;
for (int i = r + 1; i < n; i++)
if (fabs(a[t][c]) < fabs(a[i][c]))
t = i;
如果该列全为0,continue直接让c++(跳过这一列,开始处理下一列)
ps:由于浮点数加减乘除时候会有精度问题,所以这里认定:如果浮点数 < eps(eps是一个很小的数,其值为1e-6),就认为该浮点数的值为0
< eps 代表 == 0 ,> eps 代表 非零