基于我们在《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]; } }
时间: 2024-12-29 23:15:22