数值方法实验(求解线性微分方程组).doc

数值方法实验(求解线性微分方程组).doc

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数值方法实验(求解线性微分方程组)

Implement Gaussian Elimination With Pivoting Method 项嘉玮 年级:2010 学号小组:4组 数值方法与格式描述 本次实验的目的是解决以下形式的线性方程组 首先我们令A= x= b= 由于上三角方程组的求解很简单。所以若能将方程组化为上三角方程组,那就很容易得到方程的解,高斯消去法则是一种简洁高效的方法,可以将方程组化为上三角方程组,但是这种方法必须满足每一步时才能求解,还有当绝对值很小时,作分母会引起较大的舍入误差。因此在消元过程中应尽量选择绝对值较大的系数作为主元素。 所以列主元消去法很好的解决这一问题。 将的系数中绝对值最大者作为主元素,交换第一行和此元素所在的行,然后主元消去非主元项的系数,。一般的,在的一些相关系数之前,先从中选出绝对值最大者作为主元素,交换第k行和次主元素所在的行,再消去的一些相关系数,只要方程组A非奇异(若A的行列式的值是0的话,方程组有无穷多组解),则每个主元定不为0,故消元过程一定能将方程组化为上三角方程组。 将方程用增广矩阵表示。 最后通过回带就可以解出方程组的解了。 流程图 消元过程 For i=0,2,...,n-1 1.选主元,对于j=i,i+1,...,n-1,找到最大的的fabs(a[jm][i]) 2.若最大值任为0,则矩阵A为奇异阵,程序结束,否则执行下一步。 3.交换第jm行与第i行对应的元素位置。 4.消元,对于j=i,i+1,...,n-1对计算m=a[j][i]/a[i][i]; 对k=0,1,2,...,n-1计算a[j][k]=a[j][k]-m*a[i][k],b[j]=b[j]-m*b[i]。 回代过程 ,对计算 代码实现过程 int GaussPivoting( double **a, double b[], int n, double x[] ) { int i,j,k,l; double c,m,d; for(i=0;in;i++) { d=0; //寻找主元的位置 for(j=i;jn;j++) { if(fabs(a[j][i])d) { d=fabs(a[j][i]); l=j; } } //判断是否为奇异阵 if(d==0) return 0; //交换主元位置 for(k=0;kn;k++) { c=a[i][k]; a[i][k]=a[l][k]; a[l][k]=c; } c=b[i]; b[i]=b[l]; b[l]=c; //消元过程 for(j=i+1;jn;j++) { m=a[j][i]/a[i][i]; for(k=0;kn;k++) a[j][k]=a[j][k]-m*a[i][k]; b[j]=b[j]-m*b[i]; } } //回代过程 for(i=n-1;i=0;i--) { c=0; for(j=i+1;jn;j++) c=c+x[j]*a[i][j]; x[i]=(b[i]-c)/a[i][i]; } return 1; } 数值例子与分析 例子1:线性方程组的矩阵为b[5][5]={ {1., 3., 2.,5.,4. }, {2., 4., 3.,1.,5. }, {1.5, 2.,3.3,6.,4. }, {4.1, 2.,7.,3.,9. }, {5.1, 3.,7.,2.,10.} }, Right hand:c[5]={53.,48.,59.4, 86.1,90.1 } 该线性方程组的程序运算结果是: 例子2: 该线性方程组的程序运算结果为:

文档评论(0)

haihang2017 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档