数值分析B第三题.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文档。上传文档
查看更多
数值分析B第三题

《数值分析B》计算实习题目 刘鑫(ZY1205137) 第三题 一、算法设计 问题分析 求解的数值解,由于题中出现积分,可以利用复化积分法和高斯法求解; 采用复化梯形和复化Simpson法求解,需要将(-1,1)区域等分,且端点必须取为节点,将不同的节点代入原方程,就可以得到n个非齐次线性方程组; 若采用高斯法求解,可以采用GauseLegendre方法(对应的权函数,GauseLegendre的节点及节点系数已经由表6-6给出,可以直接使用)。将不同节点代入原方程,同样可以得到n个非齐次线性方程组; 利用高斯消去法求解每种方法所得到的非齐次线性方程组,得到每个节点的数值解,计算误差,得到满足误差要求的节点个数及节点的数值解。 具体算法 公式如下(n表示节点的总数,表示节点系数): Gause列主元求解线性方程组、复化梯形积分法、复化Simpson积分法、GauseLegendre方法及参见课本(£2.1.2)(6.12)(6.14)(6.30)。 二、讨论 三种方法都具有收敛性和数值稳定性; GauseLegendre积分法在精度要求上可以取很少的点就可以满足精度要求,且计算时间很短,而复化Simpson和复化梯形算法则需要较多点(复化梯形算法所需点最多),计算时间相对较长; 当所需精度不是很高,三种方法都可以采取,当所需精度要求较高时,建议采取Gause积分法求解,可以取较少点就可以满足精度要求,节省计算时间。 三、全部源程序 #includeiostream #includecmath #includeiomanip #includefstream using namespace std; double K(double x,double y) { return exp(x*y); } double u(double x) { return exp(4*x); } double G(double x) { return (exp(4*x)+(exp(x+4)-exp(-x-4))/(x+4)); } void setting(double **p,double *g,double x[],int a,double h)//复化梯形法赋值函数; { p[0][0]=1+K(x[0],x[0])*h/2; p[0][a-1]=K(x[0],x[a-1])*h/2; for(int j=1;ja-1;j++) { p[0][j]=K(x[0],x[j])*h; }//以上是给系数矩阵第一行赋值; p[a-1][a-1]=1+K(1,1)*h/2; p[a-1][0]=K(1,-1)*h/2; for(int j=1;ja-1;j++) { p[a-1][j]=K(1,x[j])*h; }//以上是给系数矩阵最后一行赋值; for(int i=1;ia-1;i++) { p[i][0]=K(x[i],x[0])*h/2; p[i][a-1]=K(x[i],x[a-1])*h/2; for(int j=1;ja-1;j++) { if(j==i) p[i][j]=1+h*K(x[i],x[j]); else p[i][j]=h*K(x[i],x[j]); } } for(int i=0;ia;i++) { g[i]=G(x[i]);//给等式右端列向量赋值; } } void Gause(double **p,double *g,double *y,int a)//a传递节点个数,高斯列主元方法; { double temp1;//临时变量; int temp;//temp 用于存储最大主元所在行; for(int i=0;ia-1;i++) { temp=i; temp1=p[i][i]; for(int j=i+1;ja;j++) { if(fabs(temp1)fabs(p[j][i])) { temp=j; temp1=p[j][i]; } }//比较得出最大列主元所在行; if(i!=temp)//交换列主元所在行元素与当前行元素; { temp1=g[i]; g[i]=g[temp]; g[temp]=temp1; for(int j=i;ja;j++) { temp1=p[i][j]; p[i][j]=p[temp][j]; p[temp][j]=temp1; } } for(int j=i+1;ja;j++) { temp1=p[j][i]/p[i][

文档评论(0)

专注于电脑软件的下载与安装,各种疑难问题的解决,office办公软件的咨询,文档格式转换,音视频下载等等,欢迎各位咨询!

1亿VIP精品文档

相关文档