c++课程设计报告书-高斯消元.docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
c课程设计报告书-高斯消元

求线性代数方程组的解(高斯消去法) 二、设计思路 1、总体设计 ⅰ、该程序是用于求解元数较少的线性方程组,其中利用了高斯消元法,求解线性方程组。(说明一下,为何只把此运算扩大到十阶,因为一般在我们运算较大的矩阵时一般选择“分块矩阵”的方式求解,元数较大的方程组时最好用我在“对程序提出完善方案”中提到的拉默克求解法再配合分块矩阵求解的方法,进行求解,既可以简化运算过程,又节约计算资源。) ⅱ、系统总体结构:程序总体分为三个大部分、五个小部分: ①输入部分,由input构成,其中a[][]负责系数矩阵的数据输入及保存,b[]负责方程值的数据输入及保存。 ②消元部分,由clear构成,并有调用sort函数进行换行,其中运算公式是核心,换行是保障运算顺利进行的必要条件。 ③输出部分,由output构成,并有调用back函数进行回代运算求方程的解,其中回代部分是求解的核心,最终方程有没有唯一解或者唯一解是什么,都要从这里输出才能被运行程序者识别,直观辨别出方程组的解,计算结果存放在x[]当中。 ④换行部分,由sort构成,负责运算过程中出现主对角线元比同列数据小时换行。 ⑤回代部分,由back构成,负责运算最后求得满足条件的方程组的解,核心是运算公式。 2、各功能模块的设计:说明各功能模块的实现方法 ①输入函数(input):利用循环的嵌套,将二维数组数据输入计算机,并保存在a[][]当中,而方程组中各个方程的值则由一个循环记录在一维数组b[]当中。 ②消去(clear):此部分是程序的难点之一,首先我们要考虑在消去过程中会出现由于找不到非零主元素而造成的计算中断(详见“3、设计中的主要困难及解决方案 3)计算中断”。),又要考虑如何进行循环将系数矩阵化为上三角矩阵。利用循环嵌套,对消去公式进行相应次数的循环即可达到目标(详见“3、设计中的主要困难及解决方案 1)简化矩阵”)。 ③换行(sort):在判断满足换行的条件后,利用中间变量t即可完成相应数据的交换。 ④回代(back):主要问题依然是寻找回代公式,利用上步所得,即可求下一数据的值。 ⑤输出(output):对所求得的结果进行有序输出,利用一个简单的循环即可,但要考虑到计算过程中如果出现计算中断,要输出“原方程组没有唯一解”的字样,以说明方程组的情况。 3、设计中的主要困难及解决方案 1)简化矩阵:如何利用高斯消元的方法将方程组的系数矩阵,简化为上三角阵的方法。 如图: 这部分的难点主要是寻找消元的通项公式 我们把第k行分别乘上某一系数,加到它以下的各行中使得与第k行同列的数据化为0,反复向下循环,即可得到最终的上三角阵。 其具体运算公式是: a[i][j]=a[i][j]-a[i][j]*a[k][j]/a[k][k] 下面是一种典型的错误编写:(也是本人犯过的) for(int k=0;kn-1;k++) for(int i=k+1;in;i++) for(j=k;jn;j++) a[i][j]=a[i][j]-a[i][k]*a[k][j]/a[k][k]; 这样写出公式,直接利用循环内套循环,再套循环是不对的,因为循环内层要用到最外层的变量,直接用,是不可以的,所以要借助参量c来完成。 下面是正确的编写: for(int k=0;kn-1;k++) for(int i=k+1;in;i++) { c=a[i][k]/a[k][k]; for(j=k;jn;j++) a[i][j]=a[i][j]- c*a[k][j]; } 2)回代: 这部分的主要工作依然是寻找运算的规律,总结归纳出求解的一般公式。 x[k]=(b[k]- ∑x[i]*a[k][i])/a[k][k]; 其中 ∑x[i]*a[k][i] 依然需要我们借助一个for循环来完成. 3)计算中断:要考虑在消去过程中,以及在消去完毕后出现的计算中断的情况,这时我们要给与及时提示,指出方程组没有唯一解,中断解的输出。给予下面程序必要的终止运行。 即系数矩阵为奇异的: ①消元过程中发现没有找到零主元素,计算中断。 ②消元过程能够进行到底,但最终得到的主对角线元为零(a[n-1][n-1]==0) 4)计算机的实际运算是有误差的,因此在实际人工运算结果与计算机运算有可能存在细小的差别,有可能造成a[][]几乎为0,但不等于0,但是实际应计算为0,所以在编写程序时,我们应该注意到这一点,在判定是否为零时给出相应合理的判断,我们可以设定精度值来达到目的。 比如程序中应用到的:(float)(int)(a[k][k]*10000)/10000= =0 4、高斯消元法的运算次数的计算、比较、评价 在实际运

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档