数值计算方法 用逐次松弛法求方程组的解

中北大学理学院

课 程 设 计

题目:用逐次松弛法求方程组的解 课程:数值计算方法 成员: 1107014124 董强

1107014126 李迎 1107014128 冯梦文

已知方程组:

=1⎧2u 1-u 2

⎪-u +2u -u =0⎪123

-u +2u -u =1234⎪⎪-u 3+2u 4=0⎩

1T

取初值x (0)=(1,1,1,1),要求x (k )-x (k -1)≤⨯10-5。

2

一、问题分析

求解这个方程组,从题目中我们可以看出,有三种方法,雅可比迭代法、高赛德尔迭代法、逐次超松弛法。但是迭代发收敛速度太慢,就会增加计算量,而失去使用价值。逐次超松弛(Successive Over Relaxation)迭代法,简称SOR 迭代法,它是在GS 法基础上为提高收敛速度,采用加权平均而得到的新算法。它是大型解稀疏矩阵方程组的有效方法之一,具有计算公式简单,程序设计容易,占用计算机内存少等优点,但需要选择加速因子。 超松弛迭代法的理论基础

逐次超松弛(Successive Over Relaxation) 迭代法,简称SOR 迭代法,它是在GS 法基础上为提高收敛速度,采用加权平均而得到的新算法,设解方程(7.1.3)的GS 法记为

x

(k +1)

i -1n 1(k +1)

=(b i -∑a ij x j -∑a ij x (j k ) ), i =1, 2,... n (1)

j =1j =i +1a ii

再由与加权平均得

x i (k +1) =(1-w ) x i (k ) +w i (k +1) =x i (k ) +w (i (k +1) -x i (k ) ), i =1, 2,.... n 这里ω>0称为松弛参数,将(1)代入则得

x i

(k +1)

=(1-w ) x i

(k )

i -1n

w (k +1) (k ) +(b i -∑a ij x j -∑a ij x j ) a ii j =1j =i +1 (2)

该法称为SOR 迭代法,[WTBX]ω>0称为松弛因子,当ω=1时(2)式即为高斯-赛德尔迭代法,简记GS 法,将(2)写成矩阵形式,则得 Dx (k +1) =(1-w ) Dx (k ) +w (b +Lx (k +1) +Ux (k ) )

即 (D -wL ) x (k +1) =[(1-w ) D +wU ]x (k ) +wb 从而

x (k +1) =-(D +wL ) -1[(w -1) D +wU ]x (k ) +w (D +wL ) -1b k=0、1、2、、、、、 于是得SOR 迭代的矩阵表示

M SO R =-(D +wL ) -1[(w -1) D +wU ]

加速因子w 的选择

对于SOR 法,松弛因子的选择对于收敛速度影响较大,关于最优松弛因子W 的研究较为复杂,对此我们选用不同的松弛因子比较其收敛速度。

由SOR 法收敛,则0

二、问题求解

结果说明及分析:

不同松弛因子的收敛速度比较

注:w=1时,是高斯赛德尔迭代法。

最后对于不同的w 取值,我们进行计算并列表比较,可以发现不同w 取值迭代收敛速度不同,当w=1.3时,迭代收敛速度最快。

最终方程组的解为x =(1. 19999838, 1. 39999928, 1. 59999984, 0. 79999980) T 与精确

解x =(1, 20000000, 1. 40000000, 1. 60000000, 0. 80000000) T 接近,且满足题目所要求的精度

附录:计算程序

#include #include #include using namespace std;

#define kk 50 //定义最大方程元数 int n,i,c,j,ll,hh,gg,mm,f=1;

double A[kk][kk],x[kk][kk],b[kk],y[kk],a[kk],z[kk],m,nn,d,e=1,w,fff ;

void main() {

cout

**********************************************************************"

cout

cout

**********************************************************************">n;

cout>A[i][j];

cout>b[i];

cout>fff;

cout>mm;

for(i=0;i

b[i]=b[i]/A[i][i];

for(j=0;j

if(i==j)

{

x[i][i]=0; } else {

x[i][j]=-A[i][j]/A[i][i]; } } }

//*****************************赋迭代初值*********************************** cout>y[i];

//***********************************逐次超松弛法********************************

dd: cout>w; if(w>=2) {

cout>w; }

if(w

cout>w; }

cout

cout

cout

cout

coutfff) {

for(i=0;i

{

z[i]=y[i];

nn=0;

for(j=0;j

{

nn=nn+x[i][j]*y[j];

y[i]=(1-w)*z[i]+w*(nn+b[i]);

}

e=fabs(z[0]-y[0]);

if(fabs(z[i]-y[i])>e)

e=fabs(z[i]-y[i]);

if(i==0)

{

cout

cout

cout

cout

}

cout

cout

if(f>mm)

{

cout

cout

exit(1);

}

}

cout

cout

cout

cout

for(i=0;i

{

cout

cout

}

exit(1);

}

10

中北大学理学院

课 程 设 计

题目:用逐次松弛法求方程组的解 课程:数值计算方法 成员: 1107014124 董强

1107014126 李迎 1107014128 冯梦文

已知方程组:

=1⎧2u 1-u 2

⎪-u +2u -u =0⎪123

-u +2u -u =1234⎪⎪-u 3+2u 4=0⎩

1T

取初值x (0)=(1,1,1,1),要求x (k )-x (k -1)≤⨯10-5。

2

一、问题分析

求解这个方程组,从题目中我们可以看出,有三种方法,雅可比迭代法、高赛德尔迭代法、逐次超松弛法。但是迭代发收敛速度太慢,就会增加计算量,而失去使用价值。逐次超松弛(Successive Over Relaxation)迭代法,简称SOR 迭代法,它是在GS 法基础上为提高收敛速度,采用加权平均而得到的新算法。它是大型解稀疏矩阵方程组的有效方法之一,具有计算公式简单,程序设计容易,占用计算机内存少等优点,但需要选择加速因子。 超松弛迭代法的理论基础

逐次超松弛(Successive Over Relaxation) 迭代法,简称SOR 迭代法,它是在GS 法基础上为提高收敛速度,采用加权平均而得到的新算法,设解方程(7.1.3)的GS 法记为

x

(k +1)

i -1n 1(k +1)

=(b i -∑a ij x j -∑a ij x (j k ) ), i =1, 2,... n (1)

j =1j =i +1a ii

再由与加权平均得

x i (k +1) =(1-w ) x i (k ) +w i (k +1) =x i (k ) +w (i (k +1) -x i (k ) ), i =1, 2,.... n 这里ω>0称为松弛参数,将(1)代入则得

x i

(k +1)

=(1-w ) x i

(k )

i -1n

w (k +1) (k ) +(b i -∑a ij x j -∑a ij x j ) a ii j =1j =i +1 (2)

该法称为SOR 迭代法,[WTBX]ω>0称为松弛因子,当ω=1时(2)式即为高斯-赛德尔迭代法,简记GS 法,将(2)写成矩阵形式,则得 Dx (k +1) =(1-w ) Dx (k ) +w (b +Lx (k +1) +Ux (k ) )

即 (D -wL ) x (k +1) =[(1-w ) D +wU ]x (k ) +wb 从而

x (k +1) =-(D +wL ) -1[(w -1) D +wU ]x (k ) +w (D +wL ) -1b k=0、1、2、、、、、 于是得SOR 迭代的矩阵表示

M SO R =-(D +wL ) -1[(w -1) D +wU ]

加速因子w 的选择

对于SOR 法,松弛因子的选择对于收敛速度影响较大,关于最优松弛因子W 的研究较为复杂,对此我们选用不同的松弛因子比较其收敛速度。

由SOR 法收敛,则0

二、问题求解

结果说明及分析:

不同松弛因子的收敛速度比较

注:w=1时,是高斯赛德尔迭代法。

最后对于不同的w 取值,我们进行计算并列表比较,可以发现不同w 取值迭代收敛速度不同,当w=1.3时,迭代收敛速度最快。

最终方程组的解为x =(1. 19999838, 1. 39999928, 1. 59999984, 0. 79999980) T 与精确

解x =(1, 20000000, 1. 40000000, 1. 60000000, 0. 80000000) T 接近,且满足题目所要求的精度

附录:计算程序

#include #include #include using namespace std;

#define kk 50 //定义最大方程元数 int n,i,c,j,ll,hh,gg,mm,f=1;

double A[kk][kk],x[kk][kk],b[kk],y[kk],a[kk],z[kk],m,nn,d,e=1,w,fff ;

void main() {

cout

**********************************************************************"

cout

cout

**********************************************************************">n;

cout>A[i][j];

cout>b[i];

cout>fff;

cout>mm;

for(i=0;i

b[i]=b[i]/A[i][i];

for(j=0;j

if(i==j)

{

x[i][i]=0; } else {

x[i][j]=-A[i][j]/A[i][i]; } } }

//*****************************赋迭代初值*********************************** cout>y[i];

//***********************************逐次超松弛法********************************

dd: cout>w; if(w>=2) {

cout>w; }

if(w

cout>w; }

cout

cout

cout

cout

coutfff) {

for(i=0;i

{

z[i]=y[i];

nn=0;

for(j=0;j

{

nn=nn+x[i][j]*y[j];

y[i]=(1-w)*z[i]+w*(nn+b[i]);

}

e=fabs(z[0]-y[0]);

if(fabs(z[i]-y[i])>e)

e=fabs(z[i]-y[i]);

if(i==0)

{

cout

cout

cout

cout

}

cout

cout

if(f>mm)

{

cout

cout

exit(1);

}

}

cout

cout

cout

cout

for(i=0;i

{

cout

cout

}

exit(1);

}

10


相关内容

  • 稀疏线性方程组求解的逐次超松弛迭代法
  • 第24卷 第4期 2006年10月 沈阳师范大学学报(自然科学版) Journal of S henyang Norm al U niversity (N atural Science ) V ol 124, N o. 4Oct. 2006 文章编号:1673-5862(2006) 04-0407- ...

  • 三维泊松方程数值模拟的多重网格方法
  • 第24卷第1期 2009年2月(页码:154-158) 地球物理 IN 学进展 v01.24,No.1 Feb.2009 PRoGRESSGEOPHYSICS 鲁晶津,吴小平,KlausSpitzer.三维泊松方程数值模拟的多重网格方法.地球物理学进展,2009,24(1):154-158 Lu J ...

  • 数值分析讲义--线性方程组的解法
  • 第三章 线性方程组的解法 3.0 引 言 重要性:解线性代数方程组的有效方法在计算数学和科学计算中具有特 殊的地位和作用. 如弹性力学.电路分析.热传导和振动.以及社会科学及定量分析商业经济中的各种问题. 分类:线性方程组的解法可分为直接法和迭代法两种方法. (a) 直接法:对于给定的方程组,在没有 ...

  • 最优化基础理论与方法
  • 目录 1.最优化的概念与分类 ................................................................................................................. 2 2. 最优化问题的求解方法 ..... ...

  • Matlab算法集锦
  • 1.高斯消去法:function (x,det,flag)=Gauss(A,b),A为方程组的系数矩阵:b为右端项:det为系数矩阵行列式的值:x为方程组的解. 2.高斯-约当消去法:function (x,flag)=Gau_Jor(A,b),flag='ok'表示计算成功. 3.画函数图表的语法 ...

  • 有限差分法
  • 有限差分法 有限差分法 finite difference method 微分方程和积分微分方程数值解的方法.基本思想是把连续的定解区域用有限个离散点构成的网格来代替, 这些离散点称作网格的节点:把连续定解区域上的连续变量的函数用在网格上定义的离散变量函数来近似:把原方程和定解条件中的微商用差商来近 ...

  • 有化学反应的气体的非平衡数值模拟
  • 第18卷 第5期航 空 学 报V o l . 18N o. 5 1997年 9月A CTA A ERONAU T I CA ET A STRONAU T I CA S I N I CA Sep. 1997 有化学反应的气体的非平衡数值模拟 蔡元虎 张凯院 毛根旺 (西北工业大学航空发动机系, 西安, ...

  • 深圳大学信息工程学院
  • 深圳大学信息工程学院 <数值理论与技术方法>课程教学大纲 一.课程基本信息 课程编号:2313100201, 2313100202 课程名称:数值理论与技术方法 课程类别:综合选修课 适用专业:信息工程学院电子信息工程 先修课程:高等数学.线性代数 开课学期:2011-2012学年度第一 ...

  • 线性方程组的迭代解法及收敛分析
  • 河南科技学院 2015届本科毕业论文 论文题目:线性方程组的三种迭代解法 及收敛分析 学生姓名: 韦成州 所在院系: 数学科学学院 所学专业: 信息与计算科学 导师姓名: 李巧萍 完成时间: 2015年5月20日 线性方程组的三种迭代解法及收敛分析 摘 要 对于线性方程组的迭代解法,本文重点讨论雅可 ...