高斯-约旦消元法,这种方法是直接转换成单位矩阵求解,学过线性代数的话应该很容易理解,这种方法就是解矩阵的标准方法,只不过把单位化放到了最后一步
const double eps=1e-6;void Guass-Jordan(){
int r;double tmp;
for(int i=1;i<=n;++i){//i是列
r=i;//r记录该列最大元素的行的位置
for(int j=i+1;j<=n;++j)
if(fabs(a[r][i])<fabs(a[j][i]))
r=j;
if(r!=i)//把这一行换到第一行去
swap(a[r],a[i]);
if(fabs(a[i][i])<eps){//如果主元为0
p=0;
return;
}
//把列上除了最大元素那一行(对角线)的,其余的消光
for(int j=1;j<=n;++j)
if(j!=i){
tmp=a[j][i]/a[i][i];
a[j][i]=0;
for(int k=j+1;k<=n+1;++k)
a[j][k]-=a[i][k]*tmp;
}
}
//最后进行单位化
for(int i=1;i<=n;++i)a[i][n+1]/=a[i][i];
return;
}