标签:pre n+1 构造 矩阵消元 mat 方程组 || line eps
高斯消元用来求解线性方程组
构造增广矩阵,然后对增广矩阵消元
每次选取这一列绝对值最大的值作为主元,可以避免精度误差,如果发现这一列都为\(0\),则方程无解
然后将主元系数化为\(1\),矩阵化为上三角矩阵后,便可以回代求解
\(code:\)
void gauss()
{
for(int i=1;i<=n;++i)
{
int ma=i;
for(int j=i+1;j<=n;++j)
if(fabs(a[j][i])>fabs(a[ma][i]))
ma=j;
swap(a[ma],a[i]);
if(fabs(a[i][i])<eps) continue;
double tmp=a[i][i];
for(int j=1;j<=n+1;++j) a[i][j]/=tmp;
for(int j=1;j<=n;++j)
{
if(i==j) continue;
double tmp=a[j][i];
for(int k=1;k<=n+1;++k)
a[j][k]-=a[i][k]*tmp;
}
}
for(int i=1;i<=n;++i)
{
int num=0;
for(int j=1;j<=n+1;++j)
if(fabs(a[i][j])<eps)
num++;
if(num==n+1) inf_flag=true;
if(num==n&&fabs(a[i][n+1])>=eps) no_flag=true;
}
if(inf_flag||no_flag) return;
for(int i=n-1;i;--i)
for(int j=i+1;j<=n;++j)
a[i][n+1]-=a[j][n+1]*a[i][j];
}
标签:pre n+1 构造 矩阵消元 mat 方程组 || line eps
原文地址:https://www.cnblogs.com/lhm-/p/12229653.html