高斯消元
解决问题
高斯消元是用来解决n元一次方程组的,思路很简单,就是小学的加减消元与代入消元
首先我们先把第i行往下的每一行都减去该行的一个倍数,使得第i个未知数均被消去。
由于进度问题我们每次选取这些行中i的系数最大的交换为改行。
此时我们得到了一个所含未知数数量递减的方程组
之后我们把下面几行一一向上代入即可
点击查看代码
void gaosi(){
for(int i=1;i<=n;++i){
int p=i;
for(int j=i+1;j<=n;++j) if(fabs(a[p][i])<fabs(a[j][i])) p=j;
if(p!=i){
swap(a[p],a[i]);
swap(b[p],b[i]);
}
for(int j=i+1;j<=n;++j){
double qwe=a[j][i]/a[i][i];
for(int k=i;k<=n;++k){
a[j][k]-=a[i][k]*qwe;
}
b[j]-=b[i]*qwe;
}
}
for(int i=n;i>=1;--i){
for(int j=i+1;j<=n;++j) b[i]-=x[j]*a[i][j];
x[i]=b[i]/a[i][i];
}
}