1、超松弛迭代法解线性方程组讲课稿超松弛迭代法解线性方程组2013-2014(1)专业课程实践论文题目:超松弛迭代法解线性方程组一、算法理论逐次超松弛迭代法是Gauss-Seidel方法的一种加速方法,世界大型稀疏矩阵方程组的有效方法之一,它具有计算公式简单,程序设计容易,占用计算机内存较少等优点,但需要选择好的加速因子(即最佳松弛因子)设有方程组 (1)其中为非奇异矩阵,且设,分解为 (2) 设已知第次迭代向量,及第次迭代向量的分量,要求计算分量 首先用GaussSeidel迭代法定义辅助量 (3)再把取为某个平均值(即加权平均),即 (4)用式(3)代入式(4)即得到解方程组的逐次超松弛迭代公
2、式 (5)其中为松弛因子,显然,当时,解式(1)的SOR方法就是Gauss-Seidel迭代法。 在SOR方法中,迭代一次主要的运算量是计算一次矩阵与向量的乘法。由式(5)可知,在计算机上应用SOR方法解方程组时只需一组工作单元,以便存放近似解。二、算法框图三、算法程序#define N 3 / 线性方程组的阶数#include #include 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; / 精度要
3、求 int M=5000; /最大迭代次数 int i,j,c_M=0; double sum,current_e; do current_e=0; for(i=0;iN;i+) sum = 0; for(j=0;jN;j+) if(j!=i) sum = sum + aij * x0j; xi = (bi - sum) / aii; / 更新迭代向量 c_M+; /迭代次数加1 for(i=0;icurrent_e) current_e = fabs(xi-x0i); /计算当前误差 for(i=0;ie&c_MM); /判断是否仍未达到精度要求且未达到最大迭代次数 for(i=0;iN;i+) cout xi endl; /输出结果 cout c_M endl; /输出迭代次数四、算法实现例1用超松弛迭代法解方程组解:将方程组的系数放于ann中,将等号右端常数放入bn中。运行程序,即可得出结果例2用超松弛迭代法解方程组解: 将方程组的系数放于ann中,将等号右端常数放入bn中。运行程序,即可得出结果