《训练指南》——7.20

  基于我们在《Linear Algebra and Its Application》一书中对解线性方程组的高斯消元法的学习,这里给出线性方程组有唯一解的编程实现。

  参考代码如下:

typedef double Matrix[maxn][maxn];
//A[][]是增广矩阵,最终A[i][n]表示第i个变量的值
void gauss_elimination(Matrix A , int n)
{
     int i , j , k , r;

        for(i = 0;i < n;i++)//化成行阶梯型
        {
              r = i;
                for(j = i + 1;j < n;j++)//对第i行以下的行数消元的时候,把第i列非零的第r行数提到第i行
                     if(fabs(A[j][i]) > fabs(A[r][i]))  r= j;
                if(r != i)
                     for(j = 0;j <= n;j++)
                      swap(A[r][j],A[i][j]);

            for(k = i + 1;k < n;k++)//进行i+1~n行第i列的消元
            {
                  double f = A[k][i]/A[i][i];
                    for(j = i;j <= n;j++)  A[k][j] -= f * A[i][j];
            }
        }

        //基于行阶梯型,回代得到唯一的解向量
        for(i = n - 1;i >= 0;i--)
        {
               for(j = i+1;j < n;j++)
                  A[i][n] -= A[j][n] * A[i][j];
        A[i][n]  /=  A[i][i];
        }
}
原文地址:https://www.cnblogs.com/rhythmic/p/5689451.html