- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
实验题目:数值分析之高斯-赛德尔迭代
学生姓名:
专业:
学号:
完成日期:
实验题目:
学生姓名:学号:完成日期:2011.10.21
1实验目的
利用高斯-赛德尔迭代法求解线性方程组
2实验步骤
2.1算法原理
高斯-赛德尔迭代是计算x(*+1)的第i个分量x(*+,利用了已经计算出得最新分量
.高斯-赛德尔迭代法可以看作雅克比迭代法的一种改进.高斯-赛德尔迭代法没迭代一次只需计算一次矩阵与向量的乘法
2.2算法步骤
选取分裂矩阵M为A的下三角部分,即选取M=D-L(下一角矩阵),
A=M-N,于是得到解Ax=b的高斯-赛德尔(Gauss-Seidel)迭代法
(2.4)
其中B=1-(D-L)1A=(D-L)-U=G,f=(D-L)1b.称G=(D-L)-1U为解
Ax=b的高斯-赛德尔迭代法的迭代矩阵.
下面给出高斯-赛德尔迭代法的分量计算公式.记
由(2.4)式有
(D-L)x?+)=Ux*)+b,
或
Dx??+I=Lx(?-)+Ux??)+b,
即
于是解Ax=b的高斯-赛德尔迭代法计算公式为
2.3程序流程图
k=k+1
x,=Y
i=1,2...,n
开始
输入数据
y,=x,=x”
i=1,2...n
k=1
y∈(b,-Ea),)/a
i=1.2….n.
max|y,-x|ε?
k=N?
输出错误
结束
输出
V?,y?…V
3实验结果分析
E:\2\Debug\2.exe
1入一个矩阵a;
82
229
请输入矩阵b
1886
kB=1.428571
k1=8.821429
k2-0.16666?
k8=1.263606
x1=8.800383
x2=8.288883
xB=1.254862
x1=0.791149
x2=0.212011
x-1.254976
x1=0.790125
x2=8.212200
x0=1.255868
x1=8.79606?
x2=0.212192
迭代5次Pressanykeytocontinue
4实验结论
高斯-赛德尔迭代法是计算x1*的第i个分量x,利用了已经计算出得最新分量
,高斯-赛德尔迭代法可以看作雅克比迭代法的一种改进.
5实验心得体会
此次实验,我体会到了计算机与数学的紧密联系一利用计算机解决复杂的数学问题。
参考文献
白峰杉.数值分析引论.北京:高等教育出版社,2004.
李庆扬,王能超,易大义.数值分析.武汉:华中理工大学出版社,1986.
附录(源代码)
#includestdio.h
#includemath.h
#definem3
floata[m][m];
floatc[m];
voidgaosi();
voidmain()
|
inti,j;
floatx[m],x1[m],eps[m];
floats=0;
floatt=0;
intp=1;
intq=1;
intk=0;
floatepsl;
gaosi();
for(i=0;i=m-1;i++)
Tor(j=0:j=m-1:j++)
s=float(s+fabs(a[i][i]));
t=float(t+fabs(a[j][i])):
q=qk(s2*fabs(a[i][i]));
p=p(t2*fabs(a[i][i]));
s=0;
t=0;
if((p+q)=0)
printf(“ERROR!”);
else
for(i=0:i=m-1;i++)
(
x[i]=0:
xl[i]=0;
do
eps1=x[0]-x1[0]:
for(i=0;i=m-1;i++)
{
for(j=0:j=m-1:j++)s=s+a[i][j]*x[j];
x[i]=(c[i]+a[i][i]*x[i]-s)/a[i][i]:
s=0;
eps[i]=float(fabs(x[i]-x1[i])):
xl[i]=x[i];
epsl=(epsleps[i])?epsl:eps[i]:
printf(x%d=%f,i,x[i]):
printf(\n);
k=k+l;
while(epslle-3);
printf(“迭代%d次”,k);
voidgaosi()
inti,j;
floatb[m*m]
文档评论(0)