GaussSeidel迭代法求解线性方程组.docx

上传人:b****5 文档编号:14519627 上传时间:2023-06-24 格式:DOCX 页数:11 大小:82.74KB
下载 相关 举报
GaussSeidel迭代法求解线性方程组.docx_第1页
第1页 / 共11页
GaussSeidel迭代法求解线性方程组.docx_第2页
第2页 / 共11页
GaussSeidel迭代法求解线性方程组.docx_第3页
第3页 / 共11页
GaussSeidel迭代法求解线性方程组.docx_第4页
第4页 / 共11页
GaussSeidel迭代法求解线性方程组.docx_第5页
第5页 / 共11页
GaussSeidel迭代法求解线性方程组.docx_第6页
第6页 / 共11页
GaussSeidel迭代法求解线性方程组.docx_第7页
第7页 / 共11页
GaussSeidel迭代法求解线性方程组.docx_第8页
第8页 / 共11页
GaussSeidel迭代法求解线性方程组.docx_第9页
第9页 / 共11页
GaussSeidel迭代法求解线性方程组.docx_第10页
第10页 / 共11页
GaussSeidel迭代法求解线性方程组.docx_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

GaussSeidel迭代法求解线性方程组.docx

《GaussSeidel迭代法求解线性方程组.docx》由会员分享,可在线阅读,更多相关《GaussSeidel迭代法求解线性方程组.docx(11页珍藏版)》请在冰点文库上搜索。

GaussSeidel迭代法求解线性方程组.docx

GaussSeidel迭代法求解线性方程组

一.问题描述

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

由Jacobi迭代法中,每一次的迭代只用到前一次的迭代值。

使用了两倍的储藏空间,浪

费了储藏空间。

若每一次迭代充分利用当前最新的迭代值,即在计算第

i个重量xi(k1)

时,

用最新重量x1

,x2

(k1)

(k)

(k1)

(k1)

xi-1代替旧重量x1(k),x2

(k)

xi-1,可以起到节约储藏

空间的作用。

这样就获取所谓解方程组的

Gauss-Seidel迭代法。

二.

算法设计

将A分解成A

L

D

U,则Ax

b等价于(LD

U)x

b

则Gauss-Seidel迭代过程

Dx(k1)bLx(k1)Ux(k)

(DL)x(k1)bUx(k)

若设(DL)1存在,则

x(k1)(DL)1Ux(k)(DL)1b

G(DL)1U,f(DL)1b

则Gauss-Seidel迭代公式的矩阵形式为

x(k1)Gx(k)f

其迭代格式为

x(0)

(x1(0),x2(0),,xn(0))T

(初始向量),

(i1)1

xi(bi

也许

xi(k1)xi(k)

xi(i1)

i1

i1

aijx(jk1)

aijx(jk))(k0,1,2,;i

0,1,2,n)

j1

ji1

xi

(kk0,1,2,;i

0,1,2,n)

1(bi

i1

i1

aijx(jk1)

aijx(jk))

aii

j1

ji1

三.程序框图

 

开始

 

读入数据n,初始向量,增广矩阵

 

1k

i1

i1

(bi

aijx(jk1)

aijx(jk))/aiiyi

j1

ji1

maxxiyi?

 

k1k

yixik=N

i1,2,3,n

 

输出迭代失

败标志

 

结束

 

四.结果显示

TestBench

利用Gauss-Seidel迭代法求解以下方程组

5x1

2x2

x3

12

x1

4x2

2x3

20,

其中取x(0)

1。

2x1

3x2

10x3

3

 

输出

y1,y2yn

运行程序

依次输入:

1.方阵维数

2.增广矩阵系数

3.初始向量

 

获取:

迭代12次后算出

x[1]=

x[2]=

x[3]=

 

五.程序

#include<>

#include<>

#include<>

#include<>

#defineMAX_n100

#definePRECISION

#defineMAX_Number1000

voidVectorInput(floatx[],intn)//输入初始向量

{

inti;

for(i=1;i<=n;++i)

{

printf("x[%d]=",i);

scanf("%f",&x[i]);

}

}

voidMatrixInput(floatA[][MAX_n],intm,intn)//输入增广矩阵

{

inti,j;

printf("\n输入系数矩阵:

\n");

for(i=1;i<=m;++i)

{

printf("增广矩阵行数%d:

",i);

for(j=1;j<=n;++j)

scanf("%f",&A[i][j]);

}

}

voidVectorOutput(floatx[],intn)

{

//输出向量

inti;

for(i=1;i<=n;++i)

printf("\nx[%d]=%f",i,x[i]);

}

 

intIsSatisfyPricision(floatx1[],floatx2[],intn)//判断可否在规定精度内

{

inti;

for(i=1;i<=n;++i)

if(fabs(x1[i]-x2[i])>PRECISION)return1;

return0;

}

intJacobi_(floatA[][MAX_n],floatx[],intn)

{

//详尽计算

floatx_former[MAX_n];

inti,j,k;

printf("\n初始向量x0:

\n");

VectorInput(x,n);

k=0;

do{

for(i=1;i<=n;++i)

{

printf("\nx[%d]=%f",i,x[i]);

x_former[i]=x[i];

}

printf("\n");

for(i=1;i<=n;++i)

{

x[i]=A[i][n+1];

for(j=1;j<=n;++j)

if(j!

=i)x[i]-=A[i][j]*x[j];if(fabs(A[i][i])>PRECISION)

x[i]/=A[i][i];

else

return1;

}

++k;

}while(IsSatisfyPricision(x,x_former,n)&&k

if(k>=MAX_Number)

return1;

else

{

printf("\nGauss-Seidel迭代次数为%d次",k);

return0;

}

}

intmain()//主函数

{

 

intn;

floatA[MAX_n][MAX_n],x[MAX_n];

printf("\n方阵维数n=");

scanf("%d",&n);

if(n>=MAX_n-1)

{

printf("\n\007nmust<%d!

",MAX_n);

exit(0);

}

MatrixInput(A,n,n+1);

if(Jacobi_(A,x,n))

printf("\nGauss-Seidel迭代失败!

");

else

{

printf("\n结果:

");

VectorOutput(x,n);

}

printf("\n\n\007Pressanykeytoquit!

\n");

getch();

}

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

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2