高斯消元
用于求解如下的方程组:
时间复杂度 。
为精度。
int n,m;
double a[N][N],b[N],eps=1e-8;
int Gauss()
{
int ans=1;
for(int i=1;i<=n;i++){
for(int j=i;j<=m;j++)
if(fabs(a[j][i])>eps){
for(int k=1;k<=n;k++)
swap(a[i][k],a[j][k]);
swap(b[i],b[j]);
}
if(fabs(a[i][i])>eps){
for(int j=1;j<=m;j++){
if(i==j)
continue;
double rate=a[j][i]/a[i][i];
for(int k=i;k<=n;k++)
a[j][k]-=a[i][k]*rate;
b[j]-=b[i]*rate;
}
b[i]/=a[i][i];
for(int j=n;j;j--)
a[i][j]/=a[i][i];
}
}
for(int i=1;i<=m;i++){
bool f=1;
for(int j=1;j<=n;j++)
if(fabs(a[i][j])>eps)
f=0;
if(f)
if(fabs(b[i])>eps)
return -1;
else
ans=0;
}
return ans;
}
运行完后, 的返回值有以下三种可能:
- :有唯一解。
- :有多解。
- :无解。
若有唯一解,则解 在 中。

浙公网安备 33010602011771号