雅克比迭代法、高斯-赛德尔迭代法Word格式.doc
《雅克比迭代法、高斯-赛德尔迭代法Word格式.doc》由会员分享,可在线阅读,更多相关《雅克比迭代法、高斯-赛德尔迭代法Word格式.doc(10页珍藏版)》请在冰豆网上搜索。
一、实验目的
1.通过实验进一步掌握高斯消去法的基本思想;
2.通过上机实验进一步掌握高斯消去法的计算步骤,并能灵活运用;
3.通过对高斯消去法的调试练习,进一步体会他的特点;
4.通过上机调试运行,逐步培养解决实际问题的编程能力。
二、实习要求
1.熟悉TurboC的编译环境;
2.实习前复习雅可比迭代法、高斯—塞得儿迭代法的计算步骤。
三、实习设备
1.硬件设备:
单机或网络环境下的微型计算机一台;
2.软件设备:
DOS3.3以上炒作系统,TurboC2.0编译器。
四、实习内容
雅可比迭代法与高斯—塞得儿迭代法
用雅可比雅可比迭代法与高斯—塞得儿迭代法求解线性方程组Ax=b:
要求:
(1)写出程序的运行结果。
(2)写出迭代次数。
程序如下:
1、雅可比迭代法
#include<
stdio.h>
math.h>
#definen3
#defineMAX_N100
#defineeps1e-6
intyacobi(floata[n][n],floatb[n],floatx[n])
{
floatd,s,max;
floaty[n];
inti,j,k,flag;
k=0;
for(i=0;
i<
n;
i++)
x[i]=0.0;
while
(1)
{
max=0.0;
k++;
for(i=0;
{
s=0.0;
k++;
for(j=0;
j<
j++)
{
if(j==i)continue;
s=s+a[i][j]*x[j];
}
y[i]=(b[i]-s)/a[i][i];
d=fabs(y[i]-x[j]);
if(max<
d)max=d;
}
if(max<
eps)
flag=1;
break;
if(k>
=MAX_N)
flag=0;
for(i=0;
x[i]=y[i];
}
return(flag);
}
voidzg_matric(floata[n][n],floatb[n])
inti,j;
{for(j=0;
printf("
%10f"
a[i][j]);
%12f"
b[i]);
\n"
);
printf("
main()
floata[][n]={{6,2-1},{1,4,-2},{-3,1,4}};
floatb[n]={-3,2,4};
floatx[n];
inti,k;
zg_matric(a,b);
k=yacobi(a,b,x);
if(k==1)
printf("
x%d=%11.7f\n"
i+1,x[i]);
else
TheMethodisdisconvergent!
结果如图:
2、高斯—赛德尔迭代法
intseidel(floata[n][n],floatb[n],floatx[n])
floatd,s,max,temp;
temp=x[i];
x[i]=(b[i]-s)/a[i][i];
d=fabs(x[i]-temp);
voidmain()
floata[][n]={{6,2,-1},{1,4,-2},{-3,1,4}};
floatb[n]={-3,2,4};
k=seidel(a,b,x);
结果如下:
五、思考题:
(1)雅可比迭代法与高斯—塞得尔迭代法的基本思想是什么?
答:
雅可比迭代法基本思想为对于给定的线性方程组Ax=b,可以用不同的方法把它变为与之等价的,行为:
x=Bx+f的方程组。
选定初值,在反复的迭代中校正方程组根的近似值,并在此过程中求取符合计算精度要求的方程组的近似值。
高斯—塞得儿迭代法的基本思想与雅可比迭代法相似。
只是在雅可比迭代法中,每次迭代时只用到上次的值,尔高斯-塞得儿迭代法中充分利用了最新得到的值。
(2)观察右端项对迭代结果是否有影响?
它由消元与回代两个过程组成。