- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
高斯消解法实验报告
深 圳 大 学 实 验 报 告
课程名称: 计算方法
实验项目名称: 列主元Gauss消去法
学院: 计算机与软件学院
实验目的:理解线性方程组的直接法求解的基本思路;灵活运用求解线性方程组的直接法-Guass消元法、列主元消去法(或列主元Doolittle法),解决实例问题。并且能对计算结果和算法的性能,如误差、稳定性等进行分析。了解求线性方程组的精度还与问题的形态有关。
实验内容:
题目1:对教材PP.34- PP.35中例1或例2的数据分别使用Gauss消去法和Gauss列主元算法(或列主元Doolittle法教材PP.45)求解线性方程组Ax=b,比较、分析两种算法的结果。取10位小数计算。
题目2:使用Gauss列主元消去法,求解线性方程组Ax=b。对计算结果,给出你的判断和分析。其中A为教材PP.279中(4)的数据,对n=10分别取3位和10位小数计算。
实验要求:
Gauss消元法和Gauss列主元算法编写为独立的函数或过程,在主程序(主函数)中调用,数据的I/O也在其中实现。实验报告的具体要求,见 “上机作业总要求”。
开发环境
PC机一台PC微机
Windows 操作系统
Microsoft Visual Studio 8.0集成开发环境
模型建立(或算法简述)
用高斯消去法求解线性方程组的基本思想是设法消去方程组的系数矩阵A的主对角线下的元素,而将Ax=b化为等价的上三角形方程组,然后再通过回代过程便可以获得方程组的解。
这种解线性方程组的方法,常称为高斯消去法。
高斯消去法算法的构造:
消元:第一次消元,将方程各列数乘以各自的行乘A11/Ai1,然后第一列与各列相减,得到第一次消元结果。
第2值n-1次消元:将上一次第K-1次消元所得方程Akk作为主方程,k=1到n行各自乘以行乘数Akk/Aik,然后于主方程相减,得到第K次消元结果,以此类推,经过n-1次消元,得到一个上三角方程。
回代:Xn=Bn/Ann,
Xn-1=(Bn-1 - An-1*Xn)/An-1n-1
以此类推,得到Xi的解。
列主元高斯消去法算法的构造:
在高斯消去法的基础上,在每次消元之前,加一个选主元的步骤。
选主元:第1值n次选主元,第K次选主元,比较K到n行的Akk到Aik绝对值的大小,选出值为最大的一行,与第一行交换。
其他步骤与??选主元的高斯消去法相同。
模型求解
4.1 程序设计(方案)说明
根据上面模型,要设计一个消元的函数,一个回代求解的函数,还有一个选主元的函数。
4.2 源代码(关键代码要有注释)
选主元高斯消去的程序代码:
#include stdio.h
#include stdlib.h
#include stdafx.h
#include math.h
#define N 10 //矩阵大小范围
//使用已经求出的x,向前计算x(供getx()调用)
double getm(double a[N][N], double x[N], int i, int n)
{
double m = 0;
int r;
for(r=i+1; rn; r++)
{
m += double(int(a[i][r] * x[r]*10000000000+0.5)/1000000000);
}
return m;
}
// 解方程组,计算x
double getx(double a[N][N], double b[N], double x[N], int i, int n)
{
double result;
if(i==n-1) //计算最后一个x的值
result = double(int(b[n-1]/a[n-1][n-1]*1000000000+0.5)/1000000000);
else //计算其他x值(对于公式中的求和部分,需要调用getm()函数)
result = double(b[i]-int(getm(a,x,i,n)/a[i][i]*1000000000+0.5)/1000000000);
return result;
}
double choose( double a[N][N], double b[N], int j, int n)
{
double p1;
double p2;//定义p1和p2交换数
p1=a[j][j];
int k=j;
int l=j;
int r;
文档评论(0)