列主元素Gauss消去法在每一次消去过程中,会寻找主元素最大的一行作为消去其他主元素列的基元,从而规避了舍入误差过大的情况,计算结果具有良好的精度
一、顺序Gauss消去法
详见上一篇博文
二、算法核心:将主元素最大一行交换至最上面
/*
首先寻找最大的主元素,建立存储更大主元素以及所在行的临时变量:tmp_value, tmp_index
经过逐个比较之后,得到最大主元素以及所在行,矩阵行交换即可
*/
void elimination(vector< vector<double> >& a, vector<double>& b, vector< vector<double> >& m, int n){
/*
k--遍历主元素
i--遍历主元素下面的其他行
j--遍历每一行的剩余列元素
*/
int i, k, j, t,tmp_value, tmp_index;
for (k=0; k<n-1; k++){
//寻找最大主元素及所在行
tmp_value = fabs(a[k][k]);
for(t=k; t<n-1; t++){
if (fabs(a[t+1][k]) > tmp_value){
tmp_index = t+1;
tmp_value = fabs(a[tmp_index][k]);
}
}
//矩阵行交换
if(tmp_index != k){
for (int p=k; p<n; p++){
swap(a[tmp_index][p], a[k][p]);
}
swap(b[tmp_index], b[k]);
}
for(i=k+1; i<