高斯-赛德尔算法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数值计算方法实验报告

班级:09医软1班 指导教师:金力

工作组成员:谢清泉(负责程序主体部分的编写) 魏月圆(负责流程图和实验报告的书写)

项波波(负责程序的调试和修改) 王兆德(负责材料的收集和整理)

一 实验名称

高斯—塞德尔迭代法

二 实验目的

理解高斯塞德尔算法的基本思想,及公式的推导过程,会用此公式解简单线性方程组。 三 实验原理

在雅可比迭代中,总是用前次近似分量x 1(k ),x 2(k )

,..

….x i-1(k)

,x i (k)

, (x)

n

(k)去计算当前分量x i

k+1

(i=1,2,……,n )。实际上此刻前i-1个分量x 1,x 2,…..x i-1

的新近似值x 1(k+1),x 2(k+1),……x i-1(k+1)代替x 1(k),x 2(k),……

X i-1(k)去计算x i (k+1)可能会得到更满意的效果。据此得到迭代公式就是高斯—塞德尔公式,即

X i

(k+1)

=(b i - 1

1

1

+-=∑k j

i j ij

x

a

- )

(1

k j

n

i j ij

x a

∑+=)/a ii (i=1,2,……n)

四 流程图

输入线性方程行数n ,输入系数矩阵a ,常数矩阵b ,精度m

K=1

i=0

X i

(k+1)

=(b i - 11

1

+-=∑k j

i j ij

x a

- )

(1

k j n

i j ij

x a

∑+=)/a ii X i

i

Y

N

Y

开始

|x i+1-x i ︳

K<10001

输出此次迭代失败

结束

i++

输出结果

K++

Y

N

N

五程序代码

#include"string.h"

#include"math.h"

#define N 100

float Table(int n,float a[N][N],float b[N]) /*定义数组并分配值*/ {

int i,j;

printf("请输入系数矩阵a:\n");

label:for(i=0;i

{

printf("行%d:",i+1);

for(j=0;j

scanf("%f",&a[i][j]); /*二维数组分配值*/ }

printf("请输入常量向量b:");

for(i=0;i

scanf("%f",&b[i]); /*一维数组分配值*/

printf("联合矩阵为:\n");

for(i=0;i

{

for(j=0;j

printf("%10.5f",a[i][j]);

printf("%10.5f",b[i]);

printf("\n");

}

}

float init_vec(int n,float x[N]) /*获取初始值*/

{

int i;

printf("请输入初始解x:");

for(i=0;i

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

}

float gs(int n,float a[N][N],float b[N],float x[N]) /*迭代的实现*/

{

int i,j,k;

float m;

float tmp1,tmp2,x2[N];

printf("请输入精度m:");

scanf("%f",&m);

for(k=0;k<10001;k++) /*设定最大迭代次数不能超过1000*/

{

for(i=0;i

x2[i]=x[i];

for(i=0;i

{

tmp1=0.0;

tmp2=0.0;

for(j=0;j

tmp1+=a[i][j]*x[j];

for(j=i+1;j

tmp2+=a[i][j]*x2[j];

x[i]=(b[i]-tmp1-tmp2)/a[i][i];

}

for(i=0,j=0;i

if(fabs(x2[i]-x[i])

{

printf("\n Gauss-Seidel 迭代已完成!");

printf("最终迭代次数: %d",k+1);

break;

}

if(k==499)

{

printf("\n此次迭代求解无法完成!");

break;

}

printf("迭代次数: %d \n",k+1 );

for(i=0;i

printf("%12.7f ",x[i] );

printf("\n");

}

printf("\n结果:\n");

for(i=0;i

相关文档
最新文档