? 迭代法
雅可比迭代法
算法:设方程组Ax=b系数矩阵的对角线元素aii?0(i?1,2,?,n),M为迭代次数容许的最大值,ε为容许误差。
①取初始向量x=(x1,x2,?,xn),令k=0。 ②对i=1,2,…,n 计算
n1)?(bi??aijx(kj) aiij?1j?i(0)(0)(0)Tx(k?1)i③如果
?xi?1n(k?1)i?xi(k)??,则输出x(k?1),结束;否则执行④。
④如果k≥M,则不收敛,终止程序;否则k?k?1,转②。 程序与实例
例4 用雅可比迭代法解方程组
?5x1?2x2?x3?8??2x1?8x2?3x3?21 ?x?3x?6x?123?1结果为
迭代次数为20 X[0]= 1.000000 X[1]= 2.000000 X[2]=-1.000000
#include
double** newMatrix(int row,int col){
double **p=new double* [row]; //行 for(int i=0;i void delMatrix(double** p,int row){ for(int i=0;i void inputMatrix(double** p,int row,int col){ for(int i=0;i cout<<\输入第\行:\ for(int j=0;j void dispMatrix(double** p,int row,int col){ for(int i=0;i void dispVector(double* q,int n){ for(int i=0;i cout<<\ cout< double sumRow(double** A,double* x1,int row,int col){ double sum=0; for(int i=0;i sum+=(A[row][i]*x1[i]); } return sum; } void iterat(double** A,double* b,double* x1,double* x2,int row){ for(int i=0;i x2[i]=(b[i]-sumRow(A,x1,i,row))/A[i][i]; } bool blow_error(double* x1,double* x2,int row,double e){ double sum=0; for(int i=0;i if(sum int main() { cout<<\输入方阵大小 n :\ int n=0; cin>>n; cout<<\ cout<<\开始录入方阵数据.....\ double** A=newMatrix(n,n); //开辟矩阵A inputMatrix(A,n,n); //录入数据到A中 cout<<\录入方阵数据完毕......\ cout<<\ cout<<\开始录入列阵.....\ cout<<\输入列阵:\ double* b=new double[n]; //开辟向量b for(int i=0;i cin>>b[i]; //录入数据到b中 cout<<\录入列阵数据完毕.....\ cout<<\ cout<<\输入迭代次数容许的最大值:\ int M=0; cin>>M; cout<<\输入容许误差:\ double e=0; cin>>e; cout<<\ double* x1=new double[n]; //开辟x1向量 double* x2=new double[n]; //开辟x2向量 cout<<\输入初始向量:\ for(int i=0;i cout<<\ int k=0; //迭代计数器 for(;;){ iterat(A,b,x1,x2,n); //迭代一次 if(blow_error(x1,x2,n,e)){ dispVector(x2,n); cout<<\迭代次数为:\ return 0; }else{ if(k>=M){ cout<<\不收敛\ return 0; }else{ k++; for(int i=0;i //释放空间 delMatrix(A,n); delete[] b; delete[] x1; delete[] x2; } ? 高斯-塞尔德迭代法 算法:设方程组Ax=b的系数矩阵的对角线元素,aii?0(i?1,2,?,n),M为迭代次数容许的最大值,ε为容许误差 (0)(0)(0)T①取初始向量x?(x1,x2,?,xn),令k=0。 ②对i=1,2,…,n计算 x(k?1)ii?11?(bi??aijx(jk?1)?aiij?1j?i?1?anijx(jk)) ③如果 ?xi?1n(k?1)i?xi(k)??,则输出x(k?1),结束;否则执行④。 ④如果k?M,则不收敛,终止程序;否则k?k?1,转②。 程序与实例 例5 用高斯-塞尔德迭代法解方程组 ?8x1?3x2?2x3?20??4x1?11x2?x3?33 ?6x?3x?12x?3623?1