高斯消元-浮点

说明

使用高斯消元法求解浮点数方程组

使用方法

  1. equvar赋值,分别表示等式个数(行数),变量个数(列数)
  2. 系数矩阵放在a[][]中,a[0~equ-1][var]存放结果
  3. int tmp = Gauss(); 返回0表示无解,1表示有解
  4. 答案存放在x[0~var-1]中

模版

//kuangbin
const double eps=1e-9;
const int maxn=220;
double a[maxn][maxn],x[maxn];//方程的左边的矩阵和等式右边的值,求解之后x存的就是结果 
int equ,var;//方程数和未知数个数
int Gauss()     //返回0表示无解,1表示有解
{
    int i,j,k,col,max_r;
    for(k=0,col=0; k<equ&&col<var; k++,col++)
    {
        max_r=k ;
        for(i=k+1; i<equ; i++)
            if(fabs(a[i][col])>fabs(a[max_r][col]))
                max_r=i ;
        if(fabs(a[max_r][col])<eps)
            return 0;
        if(k!=max_r)
        {
            for(j=col; j< var; j++)
                swap(a[k][j],a[max_r][j]);
            swap(x[k],x[max_r]);
        }
        x[k]/=a[k][col];
        for(j=col+1; j<var; j++)
            a[k][j]/= a[k][col];
        a[k][col]=1;
        for(i=0; i<equ; i++)
            if(i!=k)
            {
                x[i]-=x[k]*a[i][k];
                for(j=col+1; j<var; j++)
                    a[i][j]-=a[k][j]*a[i][col];
                a[i][col]=0;
            }
    }
    return 1;
}

results matching ""

    No results matching ""