版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、学 班 姓 学 实验日期 学 班 姓 学 实验日期 2015 年05月26日西安交通大学实验报告课程名称:数值分析上机实验实验名称:共轭梯度法院: 数学学院级名:自评成绩:97一、实验目的熟练掌握改进平方根法和共轭梯度法的迭代过程尝试使用自己熟悉的计算机语言解决数学中的问题通过上机实验来巩固课本中所学的知识、实验内容与结果题目 2:共轭梯度法源程序2#include using namespace std;double fl(double a10, double n)/构造第一个求和函数,简化主函数double s=0;int i; for(i=0;in;i+)s=s+a i* ai;retu
2、rn s;double f2(double r10, double a1010, int n)/构造第二个求和函数,简化主函数double b10,m=0;int i,j; for(i=0;in;i+)double s=0;for(j=0;jn;j+)s=s+rj *aji;bi=s;for(i=0;in;i+)m=m+b i* ri;return m;double *f3(double a1010, double b10, int n)/构造输出列向量的函数 double *r;r二new double 10;int i,j; for(i=0;in;i+)double s=0;for(j=0
3、;jn;j+)s=s+aij *bj;ri=s;return r;int main()int i,j,k,n;double a,b,e,A1010,B10,r10,rl10,x10,d10;double *ax;cou t请输入未知数的个数和计算精度:ne;cou t请输入起始向量endl; for(i=0;ixi;cou t请输入右端项:endl;for(i=0;iBi;cou t请输入矩阵:endl;for(i=0;in;i+)for(j=O;jAij;ax=f3(A,x,n);for(i=0;in;i+)ri=Bi-axi;di=ri;if (sqr t(f l(r,n)二e)for (
4、i=0;in;i+)coutxit;elsefor (k=0;kn;k+)a二fl(r,n)/f2(d,A,n);for (i=0;in;i+)xi=xi+a *di;ax=f3(A,x,n);for (i=0;in;i+)r1i=Bi-axi;if (sqr t(f l(rl,n)二e|k+l二二n)for(i=0;in;i+)coutxi=xin; break;else b=f1(r1,n)/f1(r,n);for(i=0;in;i+)di=r1i+b *di; ri=r1i;return 0;输入未知数的个数和计算精度;0.0001输入起始向量為天右端项:1 3输入矩阵:0 11 00
5、20=11)=12)=1按任意键继续.! C :wi n d cw ssystem.-Ax三、实验总结(列出实验的结论、收获和存在的问题,必写)! C :wi n d cw ssystem.-Ax通过这次实验,我对简化平方根法和共轭梯度法的计算过程和迭代格式有了熟练地掌握,让我学习到了很多,同时也是一个复习的过程。在刚开始编程序的时候,我真的是高估了自己的编程水平。我的 想法很简单,就是用C+语言按照书本上的过程编写程序就好了。但 在实际操作的过程中,我又发现了心得问题:比如说,矩阵的运算, 在书本上写出来就是一个连加求和符号,但在编程的时候却要用一个 单独的函数来实现它。而有的时候输出的值是
6、一个向量,这就要求我 们对向量的整体输入和输出有所了解。从这两个程序中,我们明显可 以看出第二个程序比第一个程序多运用了几个函数,这就大大的简化 了主函数的运算过程,使程序获得简化。其实我在第一个程序的时候 就想用函数来简化主函数的运算,但输出值总是出错,我就不得不放 弃了。但第二个程序的时候,对原来的知识有了记忆就编的比较得心 应手一些。再编写程序的过程中,我深刻的认识到了细心细节的重要性。在 编写第一个程序是,就因为把控制条件的大于号写成了小于号,导致 程序总是运行不出正确的结果。而且,寻找这一处错误花了我大概一 个星期的晚上空余时间。第一个程序编号后,我深刻的认识到了自己 的不足,在编写第二个程序的时候就下了很多功夫并且认真细致的编 写程序。使得第二个程序第一次运行就正确了。但是,在接下来的编 程中,我又遇到了各种五花八门的问题,有些已经解决了,但有些还 是存在着问题。还有,通过这次实验。我深深地感觉我们中国人应该有自己定义 的简化编程软件。能够更好地按照我们的思想去解决问题。我获得这个想法的源头是。有的程序用C+ (我相对熟悉)编写比较方便,但 有些程序用MATLAB反而比较简便。还有一些程序,让C+计算前 半部分然后再用MATLAB计算后半部分会更好,但这两个程序却不 能结合起来使用。所以有时候编程特别让我头疼,但我还是坚持自己 写下来了。因为MATLAB基
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论