Jacobi 迭代法与GaussSeidel迭代法算法比较文档格式.docx

上传人:b****3 文档编号:15199846 上传时间:2022-10-28 格式:DOCX 页数:9 大小:138.73KB
下载 相关 举报
Jacobi 迭代法与GaussSeidel迭代法算法比较文档格式.docx_第1页
第1页 / 共9页
Jacobi 迭代法与GaussSeidel迭代法算法比较文档格式.docx_第2页
第2页 / 共9页
Jacobi 迭代法与GaussSeidel迭代法算法比较文档格式.docx_第3页
第3页 / 共9页
Jacobi 迭代法与GaussSeidel迭代法算法比较文档格式.docx_第4页
第4页 / 共9页
Jacobi 迭代法与GaussSeidel迭代法算法比较文档格式.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

Jacobi 迭代法与GaussSeidel迭代法算法比较文档格式.docx

《Jacobi 迭代法与GaussSeidel迭代法算法比较文档格式.docx》由会员分享,可在线阅读,更多相关《Jacobi 迭代法与GaussSeidel迭代法算法比较文档格式.docx(9页珍藏版)》请在冰豆网上搜索。

Jacobi 迭代法与GaussSeidel迭代法算法比较文档格式.docx

1.1Jacobi迭代法

若D为A的对角素构成的对角矩阵,且对角线元素全不为零。

可以将系数矩阵A分解为:

其中,D为系数矩阵A的对角元素构成的对角阵,L为严格下三角阵,U为严格上三角阵。

在迭代法一般形式中,取,,形成新的迭代公式

其中任取,则Jacobi迭代的迭代公式为:

(3)

式中:

;

称为Jacobi迭代矩阵.其计算公式为:

,(4)

如果迭代矩阵的谱半径,则对于任意迭代初值,Jacobi迭代法收敛;

如果‖GJ‖<

1,则Jacobi迭代法收敛;

如果方程组的系数矩阵是主对角线按行或按列严格占优阵,则用Jacobi迭代法求解线性方程组必收敛。

1.2Gauss-Seidel迭代法

从Jacobi迭代可以看出,用计算时,需要同时保留这两个向量。

事实上如果每次获得的分量能够在计算下一个分量时及时更新的话,既节省了存储单元,又能使迭代加速,这就是Gauss-Seidel方法。

对于非奇异方程组,若D为A的对角素构成的对角矩阵,且对角线元素全不为零;

系数矩阵A的一个分解:

(5)

其中任取,则Gauss-Seidel迭代法的迭代公式为:

(6)

上式中:

是其右端常数项;

为Gauss-Seidel迭代法的迭代矩阵,其计算公式为:

,(7)

若GS法收敛的充分必要条件是;

如果‖GG‖<

1,则GS法收敛;

如果线性方程组的系数矩阵A为主对角线按行或按列严格占优阵,或者为正定矩阵,则对于任意初值用GS法求解必收敛。

1.3逐次超松弛(SOR)迭代法

一般而言,因Jacobi迭代收敛速度不够快,所以在工程中用的并不是太多。

并且在Jacobi迭代收敛速度很慢的情况下,通常Gauss-Seidel迭代法也不会太快。

可以对Gauss-Seidel迭代公式做适度修改,提高收敛速度,这就是逐次超松弛迭代法。

设线性方程组的系数矩阵A满足,。

可将系数矩阵A分解为

(8)

其中实常数>

0称为松弛因子。

在迭代法一般形式中,取

得到迭代公式

,(9)

其中任取。

这就是逐次超松弛迭代法,当=1时该式就是高斯法。

SOR法迭代矩阵是

整理后得到SOR迭代法的实际计算公式为:

(10)

SOR方法收敛的充分必要条件是;

如果‖GS‖<

1,则SOR方法收敛;

SOR方法收敛的必要条件是;

如果方程组的系数矩阵A是主对角线按行或者列严格占优阵,则用的SOR方法求解必收敛;

如果方程组的系数矩阵是正定矩阵,则用的SOR方法求解必收敛。

2算法分析

例1用雅可比迭代法求解下列方程组

解将方程组按雅可比方法写成

取初始值按迭代公式

进行迭代,其计算结果如表1所示。

表1

1

2

3

4

5

6

7

0

0.72

0.971

1.057

1.0853

1.0951

1.0983

0.83

1.070

1.1571

1.1853

1.1951

1.1983

0.84

1.150

1.2482

1.2828

1.2941

1.2980

例2用高斯——塞德尔迭代法求解例1.

解取初始值,按迭代公式

进行迭代,其计算结果如下表2

表2

1.04308

1.09313

1.09913

1.09989

1.09999

1.1

0.902

1.16719

1.19572

1.19947

1.19993

1.19999

1.2

1.1644

1.28205

1.29777

1.29972

1.29996

1.3

3结论

使用Gauss-Seidel迭代法迭代法,7次就可以求出方程的解,收敛速度要比Jacobi迭代法收敛快(达到同样的精度所需迭代次数少);

但是这个结论,在一定条件下才是对的,甚至有这样的方程组,雅可比方法收敛,而高斯—塞德尔迭代法却是发散的.

4附录程序

/*求解线性方程组--Gauss-Seidel迭代法*/

#include<

iostream>

cmath>

usingnamespacestd;

/*二维数组动态分配模板*/

template<

classT>

T**Allocation2D(intm,intn)

{

T**a;

a=newT*[m];

for(inti=0;

i<

m;

i++)

{

a[i]=newT[n];

}

returna;

}

/*一维数组动态分配模板*/

T*Allocation1D(intn)

T*a;

a=newT[n];

/*求矩阵的一范数*/

floatmatrix_category(float*x,intn)

floattemp=0;

for(inti=0;

n;

temp=temp+fabs(x[i]);

returntemp;

intmain()

constintMAX=1000;

//最大迭代次数

inti,j,k;

//循环变量

intn;

//矩阵阶数

float**a;

//增广矩阵

float*x_0;

//初始向量

float*x_k;

//迭代向量

floatprecision;

//精度

cout<

<

"

输入精度e:

;

cin>

>

precision;

/*动态生成增广矩阵*/

endl<

输入系数矩阵的阶数,N:

a=Allocation2D<

float>

(n,n+1);

/*输入增广矩阵的各值*/

输入增广矩阵的各值:

\n"

for(i=0;

for(j=0;

j<

n+1;

j++)

{

cin>

a[i][j];

}

/*生成并初始化初始向量*/

x_0=Allocation1D<

(n);

输入初始向量:

cin>

x_0[i];

/*生成迭代向量*/

x_k=Allocation1D<

floattemp;

/*迭代过程*/

for(k=0;

k<

MAX;

k++)

for(i=0;

temp=0;

for(j=0;

i;

{

temp=temp+a[i][j]*x_k[j];

}

x_k[i]=a[i][n]-temp;

for(j=i+1;

temp=temp+a[i][j]*x_0[j];

x_k[i]=(x_k[i]-temp)/a[i][i];

/*求两解向量的差的范数*/

x_0[i]=x_k[i]-x_0[i];

if(matrix_category(x_0,n)<

precision)

break;

else

for(i=0;

x_0[i]=x_k[i];

/*输出过程*/

if(MAX==k)

cout<

迭代不收敛\n"

迭代次数为:

k<

endl;

解向量为:

x"

i<

:

"

x_k[i]<

return0;

参考文献

[1]颜庆津.数值分析[M].北京:

航空航天大学出版社,1999.

[2]黎建玲,简金宝,李群宏.数值分析与实验[M].北京:

科学出版社,2012.

[3]宋叶志.MATLAB数值分析与应用[M].北京:

机械工业出版社,2013.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1