高斯消元法是用来求线性方程组的,一般的解法是
写出增广矩阵
通过列主消元法将增广矩阵化为上三角矩阵
根据增广矩阵的秩和系数矩阵的秩来决定解的个数
如果有唯一的解,通过迭代求出
下面是浮点数,有唯一解的情况
增广矩阵为m*(m+1)的矩阵
void Gauss(int S[maxn][maxn],int num)//增广矩阵为num*(num+1){
for(int i=1;i<=num;i++)//枚举每一行
{
int r=i;
for(int j=i+1;j<=num;j++)//找出那一列中系数最大的一行
{
if(fabs(S[j][i]-S[r][i])>=eps)
r=j;
}
if(r!=i)
{
for(int j=i;j<=num+1;j++)//交换
swap(S[r][j],S[i][j]);
}
for(int j=i+1;j<=num;j++)
{
double term=S[j][i]/S[i][i];
for(int k=i;k<=num+1;k++)
S[j][k]-=S[i][k]*term;
}
}//化成上三角矩阵
for(int i=num;i>=1;i--)
{
for(int j=i+1;j<=num;j++)
{
S[i][num+1]-=S[i][j]*S[j][j];
}
S[i][i]=S[i][num+1]/S[i][i];
}
}