#公式与实现# Jacobi迭代 Gauss-Seidel迭代

程序实现:

double MaxOfList(vector<double>x){  
    double max=x[0];  
    int n=x.size();  
    for(int i=0;i<n;i++)  
        if(x[i]>max) max=x[i];  
    return max;  
}
//雅可比迭代公式  
void Jacobi(vector<vector<double> > A,vector<double> B,int n){  
    vector<double> X(n,0);  
    vector<double> Y(n,0);  
    vector<double> D(n,0);  
    int k=0; //记录循环次数  
    do{   
        X=Y;  
        for(int i=0;i<n;i++){  
            double sum=0;  
            for(int j=0;j<n;j++){  
                if(i!=j) sum += A[i][j]*X[j];  
            }  
            Y[i]=(B[i]-sum)/A[i][i];  
            cout<<left<<setw(8)<<Y[i]<<" ";  
        }  
        cout<<endl;  
        k++;  
          
        for(int a=0;a<n;a++){  
            D[a]=X[a]-Y[a];  
        }  
    }while( MaxOfList(D)>0.00001 || MaxOfList(D)<-0.00001);  
      
    return ;  
}  

//高斯赛让德迭代公式  
void GaussSeidel(vector<vector<double> > A,vector<double> B,int n){  
    vector<double> X(n,0);  
    vector<double> Y(n,0);  
    vector<double> D(n,0);  
    int k=0; //记录循环次数  
    do{   
        Y=X;  
        for(int i=0;i<n;i++){  
            double sum=0;  
            for(int j=0;j<n;j++){  
                if(i!=j) sum += A[i][j]*X[j];  
            }  
            X[i]=(B[i]-sum)/A[i][i];  
            cout<<left<<setw(8)<<X[i]<<" ";  
        }  
        cout<<endl;  
        k++;  
          
        for(int a=0;a<n;a++){  
            D[a]=X[a]-Y[a];  
        }  
    }while( MaxOfList(D)>0.00001 || MaxOfList(D)<-0.00001);  
      
    return ;  
}  

对比

Jacobi

Gauss-Seidel

对应程序实现中,只需用新生成的X值,直接覆写掉原来的X值即可,但是最后为了查看是否达到迭代精度,需要暂存一趟迭代的结果。

程序引用:
【数值分析】迭代法解方程:牛顿迭代法、Jacobi迭代法
http://blog.csdn.net/xiaowei_cqu/article/details/8585703

很好的讲义地址
华东师范大学 矩阵计算 讲义
http://math.ecnu.edu.cn/~jypan/Teaching/MatrixComp/index.html

另一个程序引用:
Jacobi迭代法的思想及C语言编程
http://wenku.baidu.com/link?url=hF1RZMfra4htZ33k6HY8rHXkEQ2hAZGREnOBUSB12zfChPPTJomCgd3pEcHhNNO69s4ahW3wUy6aI6ctB_6HXsLtNAMOF6bHAP6u-IvZVMW
Gauss-seidel迭代法的思想及C语言编程
http://wenku.baidu.com/link?url=QYNW-VS5YrLnbjaQH-LIwky7FIOv8GbcQpDq5NFNFQUATIgTDwW2ANSuKYQZ5RGtdSCWtm1SIqLGsAXc8zEKDSd-Bsca5UxcNiaMJz3gzGe

原文地址:https://www.cnblogs.com/daijkstra/p/4103582.html