超松弛迭代法解线性方程组(共7页).doc
精选优质文档-倾情为你奉上2013-2014(1)专业课程实践论文题目:超松弛迭代法解线性方程组一、算法理论逐次超松弛迭代法是Gauss-Seidel方法的一种加速方法,世界大型稀疏矩阵方程组的有效方法之一,它具有计算公式简单,程序设计容易,占用计算机内存较少等优点,但需要选择好的加速因子(即最佳松弛因子)设有方程组 (1)其中为非奇异矩阵,且设,分解为 (2) 设已知第次迭代向量,及第次迭代向量的分量,要求计算分量 首先用GaussSeidel迭代法定义辅助量 (3)再把取为某个平均值(即加权平均),即 (4)用式(3)代入式(4)即得到解方程组的逐次超松弛迭代公式 (5)其中为松弛因子,显然,当时,解式(1)的SOR方法就是Gauss-Seidel迭代法。 在SOR方法中,迭代一次主要的运算量是计算一次矩阵与向量的乘法。由式(5)可知,在计算机上应用SOR方法解方程组时只需一组工作单元,以便存放近似解。开始二、算法框图结束定义f(x) 输入x0 e1 e2 NK=1f(x)<e1x1=x0-x0/f¡¯(x0)X1-x2<e2?K=N?输出迭代失败标志输出奇异标志输出x1x0=x1K=k=1YESYESYESNONO三、算法程序#define N 3 / 线性方程组的阶数#include <iostream.h>#include <math.h>void main()double aNN=5,2,1,2,8,-3,1,-3,-6, /系数矩阵bN=8,21,1; /右端常数向量double x0N=1,1,1,xN; / 迭代初始向量和迭代向量double e=1e-5; / 精度要求int M=5000; /最大迭代次数int i,j,c_M=0; double sum,current_e;docurrent_e=0; for(i=0;i<N;i+)sum = 0;for(j=0;j<N;j+)if(j!=i)sum = sum + aij * x0j; xi = (bi - sum) / aii;/ 更新迭代向量c_M+; /迭代次数加1for(i=0;i<N;i+)if(fabs(xi-x0i)>current_e)current_e = fabs(xi-x0i); /计算当前误差for(i=0;i<N;i+)x0i = xi; /更新初始向量while(current_e>e&&c_M<M); /判断是否仍未达到精度要求且未达到最大迭代次数for(i=0;i<N;i+)cout << xi << endl; /输出结果cout << c_M << endl; /输出迭代次数四、算法实现例1用超松弛迭代法解方程组解:将方程组的系数放于ann中,将等号右端常数放入bn中。运行程序,即可得出结果例2用超松弛迭代法解方程组解:将方程组的系数放于ann中,将等号右端常数放入bn中。运行程序,即可得出结果专心-专注-专业