高斯消元
Posted lhm-
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高斯消元相关的知识,希望对你有一定的参考价值。
高斯消元用来求解线性方程组
构造增广矩阵,然后对增广矩阵消元
每次选取这一列绝对值最大的值作为主元,可以避免精度误差,如果发现这一列都为(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];
}
以上是关于高斯消元的主要内容,如果未能解决你的问题,请参考以下文章