高斯消元

解决问题

高斯消元是用来解决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];
	}
}
posted @ 2022-05-31 18:32  蒟蒻jht  阅读(41)  评论(0)    收藏  举报