高斯消元
高斯消元
高斯消元适用于求解线性方程组。
一般的,对于线性方程组:
我们用下面这个矩阵来表示这个线性方程组:
我们循环一个变量
先在矩阵中找到一行(设这行是第
然后用这一行矩阵,用简单行变换的方式将矩阵其他行的第
最后我们就得到一个“阶梯矩阵”,然后就可以愉快地求解了。
-
Code
#include<iostream> #include<cstdio> #include<cmath> using namespace std; const int maxn = 1e3 + 5; double a[maxn][maxn],b[maxn]; int n; int main() { scanf("%d",&n); for (int i=1; i<=n; i++) { for (int j=1; j<=n; j++) scanf("%lf",&a[i][j]); scanf("%lf",&b[i]); } for (int i=1; i<=n; i++) { for (int j=i; j<=n; j++) if (fabs(a[j][i]) > 1e-10) { for (int k=1; k<=n; k++) swap(a[i][k],a[j][k]); swap(b[i],b[j]); break; } for (int j=1; j<=n; j++) { if (j == i) continue; double rate = a[j][i] / a[i][i]; for (int k=1; k<=n; k++) a[j][k] -= rate * a[i][k]; b[j] -= rate * b[i]; } } for (int i=1; i<=n; i++) printf("x%d = %.2lf\n",i,b[i] / a[i][i]); return 0; }