高斯消元 [模板]

View Code
const int maxn = 111; //方程大小
int m, n; // 行号 列号
double a[maxn][maxn], x[maxn]; //x为结果

void Gauss() {
        double d = 0, t = 0, sum = 0;
        int k = 1, l = 0, i = 0, j = 0;
        while (k <= n) {
            //*****选主元素*****    
            
            d = a[k][k];
            l = k;
            
            for (i = k + 1; i <= n; i++) {
                if (fabs(a[i][k]) > fabs(d)) {
                    d = a[i][k];
                    l = i;
                }
            }
            
            if (l != k) {
                for (j = k; j <= n; j++) {
                    swap( a[l][j] , a[k][j]);
                }
                swap( x[k] , x[l]);
            }
            //*****消元*****//
            
            for (j = k + 1; j <= n; j++) {
                a[k][j] = a[k][j] / a[k][k];
            }
            x[k] = x[k] / a[k][k];
            
            
            for (i = k + 1; i <= n; i++) {
                for (j = k + 1; j <= n; j++) {
                    a[i][j] = a[i][j] - a[i][k] * a[k][j];
                }
                j = 1;
                x[i] = x[i] - a[i][k] * x[k];
            }
            k++;
        }
        
        //*****回代*****
        for (i = n - 1; i >= 1; i--) {
            sum = 0;
            for (j = i + 1; j <= n; j++) {
                sum = sum + a[i][j] * x[j];
            }
            x[i] = x[i] - sum;
        }
}

 

posted @ 2013-05-06 12:22  zhang1107  阅读(112)  评论(0编辑  收藏  举报