- 1、本文档共9页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
迭代法求线性方程组
数学与计算科学学院
实 验 报 告
实验项目名称 迭代法求线性方程组
所属课程名称 数值方法A
实 验 类 型 验证型
实 验 日 期 2011.11.03
班 级
学 号
姓 名
成 绩
一、实验概述: 【实验目的】
1、了解线性方程组Ax=b迭代法的一些基本理论思想;
2、通过三对角形线性方程组的解法,体会稀疏线性方程组解法的特点;
3、学习Gauss-Seidel迭代法和松弛迭代法的使用方法;
4、掌握迭代法的格式及收敛条件,判别迭代法收敛的基本方法及运用。
【实验原理】
1、Gauss–Seidel迭代法
迭代格式:
(若可逆)
,
,,为初始向量(矩阵形式)
,(分量形式)
2、弛迭代法(简称SOR)
迭代格式:
在Seidel迭代公式中,
=,
。
若在修正项前加上一个参数w ,便得到松弛法的迭代公式:
,,k=0, 1, 2, …
将上式写成矩阵形式得
, k=0, 1, 2, …
其中w 叫做松弛因子, 当w 1时叫做超松弛, w 1时叫做低松弛。
注:(1)w =1时就是Seidel迭代法;
(2)适当选取松弛因子w , 可加快收敛速度;
(3)关于迭代格式(3),引进收敛速度概念:
【实验环境】
Microsoft visual C++6.0 二、实验内容: 【实验方案】
1、明确实验要求任务:
(1) 用Gauss-Seidel迭代法求解下列方程组,当满足时
结束迭代。
(2)用松弛迭代法(取)求解下列方程组,当满足时结束迭代,说明迭代的收敛性。
并讨论初值的变化对收敛的影响。
2、确定具体解决算法;
3、选择一门可行计算机语言进行编程;
4、对程序进行调试、改进和验证。
【实验过程】(实验步骤、记录、数据、分析)
打开Microsoft visual C++6.0编程软件;
编写Gauss-Seidel迭代法的程序对第一个方程组进行运算,并显示出迭代结果;
松弛因子SOR方法;结论(结果)
2、由SOR迭代法求解的程序运行结果可知初值的选取影响迭代格式的收敛快慢。
(1) 取初值为(1,1,1),结果如下:
(2) 取初值为(1,2,1),结果如下:
SOR方法的收敛速度很快,但是就其自身而言,选取不同的w对于方程组得求解来说是非常不同的,选取适当的松弛因子会使方程收敛的速度提高很多。 【实验小结Gauss-Seidel迭代法和松弛迭代法的使用方法;掌握迭代法的格式及收敛条件,判别迭代法收敛的基本方法及运用。数学和编程的分析、处理能力也加强了。
三、指导教师评语及成绩: 评 语 评语等级 优 良 中 及格 不及格 1.实验报告按时完成,字迹清楚,文字叙述流畅,逻辑性强 2.实验方案设计合理 3.实验过程(实验步骤详细,记录完整,数据合理,分析透彻) 4实验结论#includeiostream
#includecmath
#include iomanip
using namespace std;
#define n 3
int main()
{
double A[n][n],B[n],b[n][n],m[n],X[n],Y[n],sum1,max;
int i,j,count=1;
cout请输入矩阵A:endl;
for(i=0;in;++i)
for(j=0;jn;++j)
{cinA[i][j];}
cout请输入矩阵B:endl;
for(i=0;in;++i)
{cinB[i];}
cout请输入x初始值:endl;
for(i=0;in;++i)
{cinX[i];}
for(i=0;in;++i)
{
for(j=0;jn;++j)
{
if(i==j) b[i][j]=0;
else
b[i][j]=A[i][j]/A[i][i];
}
B[i]=B[i]/A[i][i];
}
cout迭代值表:endl;
coutksetw(9)X1ksetw(9)X2ksetw(9)X3kendl;
do{
for(i=0;in;++i)
{sum1=0;
for(j=0;jn;++j)
{
sum1
文档评论(0)