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

程序实现:

double MaxOfList(vector<double>x){  
    double max=x[0];  
    int n=x.size();  
    for(int i=0;iif(x[i]>max) max=x[i];  
    return max;  
}
//雅可比迭代公式  
void Jacobi(vectordouble> > 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;idouble sum=0;  
            for(int j=0;jif(i!=j) sum += A[i][j]*X[j];  
            }  
            Y[i]=(B[i]-sum)/A[i][i];  
            cout<8)<" ";  
        }  
        cout<for(int a=0;awhile( MaxOfList(D)>0.00001 || MaxOfList(D)<-0.00001);  
      
    return ;  
}  

//高斯赛让德迭代公式  
void GaussSeidel(vectordouble> > 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;idouble sum=0;  
            for(int j=0;jif(i!=j) sum += A[i][j]*X[j];  
            }  
            X[i]=(B[i]-sum)/A[i][i];  
            cout<8)<" ";  
        }  
        cout<for(int a=0;awhile( 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

你可能感兴趣的:(#公式与实现# Jacobi迭代 Gauss-Seidel迭代)