超松弛迭代法解线性方程组讲课稿

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
c_M++; //迭代次数加1
for(i=0;i<N;i++)
{
if(fabs(x[i]-x0[i])>current_e)
current_e = fabs(x[i]-x0[i]);
} //计算当前误差
for(i=0;i<N;i++)
x0[i] = x[i]; //更新初始向量
}while(current_e>e&&c_M<M);//判断是否仍未达到精度要求且未达到最大迭代次数
{
double a[N][N]={5,2,1,2,8,-3,1,-3,-6},//系数矩阵
b[N]={8,21,1};//右端常数向量
double x0[N]={1,1,1},x[N];//迭代初始向量和迭代向量
double e=1e-5;//精度要求
int M=5000;//最大迭代次数
int i,j,c_M=0;
解:
将方程组的系数放于a[n][n]中,将等号右端常数放入b[n]中。运行程序,即可得出结果
超松弛迭代法解线性方程组
2013-2014(1)专业课程实践论文
题目:超松弛迭代法解线性方程组
一、算法理论
逐次超松弛迭代法是Gauss-Seidel方法的一种加速方法,世界大型稀疏矩阵方程组的有效方法之一,它具有计算公式简单,程序设计容易,占用计算机内存较少等优点,但需要选择好的加速因子(即最佳松弛因子)
设有方程组 (1)
其中 为非奇异矩阵,且设 ,分解 为
(2)
设已知第 次迭代向量 ,及第 次迭代向量 的分量 ,要求计算分量
首先用Gauss—Seidel迭代法定义辅助量
(3)
再把 取为 某个平均值(即加权平均),即
(4)
用式(3)代入式(4)即得到解方程组 的逐次超松弛迭代公式
(5)
其中 为松弛因子,显然,当 时,解式(1)的SOR方法就是Gauss-Seidel迭代法。
double sum,current_e;
do{
current_e=0;
for(i=0;i<N;i++)
{
sum = 0;
for(j=0;j<N;j++)
{
if(j!=i)
{
sum = sum + a[i][j] * x0[j];
}
}
x[i] = (b[i] - sum) / a[i][i];
}//更新Hale Waihona Puke Baidu代向量
在SOR方法中,迭代一次主要的运算量是计算一次矩阵与向量的乘法。由式(5)可知,在计算机上应用SOR方法解方程组时只需一组工作单元,以便存放近似解。
二、算法框图
三、算法程序
#define N 3//线性方程组的阶数
#include<iostream.h>
#include<math.h>
void main()
for(i=0;i<N;i++)
cout << x[i] << endl; //输出结果
cout << c_M << endl;//输出迭代次数
}
四、算法实现
例1.用超松弛迭代法解方程组
解:
将方程组的系数放于a[n][n]中,将等号右端常数放入b[n]中。运行程序,即可得出结果
例2.用超松弛迭代法解方程组
相关文档
最新文档