ImageVerifierCode 换一换
格式:DOCX , 页数:35 ,大小:290.75KB ,
资源ID:24972441      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/24972441.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数值计算方法实验报告.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数值计算方法实验报告.docx

1、数值计算方法实验报告 本科实验报告课程名称: 数值计算方法 实验地点: 计算机科学与技术学院506 专业班级: 学号: 学生姓名: * * * 年 月 日太原理工大学学生实验报告学院名称计算机科学与技术专业班级学号学生姓名实验日期成绩课程名称数值计算方法实验题目实验一 方程求解一、实验目的和要求熟悉使用、迭代法、牛顿法、割线法等方法对给定的方程进行根的求解。选择上述方法中的两种方法求方程:二分法f(x)=x3+4x2-10=0在1,2内的一个实根,且要求满足精度|x*-xn|0.510-5二、主要设备 PC,Windows操作系统,VC+6.0编程平台;三、实验内容和原理 函数f(x)在区间(

2、x,y)上连续,先在区间(x,y)确定a与b,若f(a),f(b)异号,说明在区间(a,b)内存在零点,然后求f(a+b)/2。假设F(a)0,ab,1如果f(a+b)/2=0,该点即为零点;2如果f(a+b)/20,则区间(a,(a+b)/2)内存在零点,(a+b)/2b;返回重新循环,不断接近零点。通过每次把f(x)的零点所在区间收缩一半的方法,使区间内的两个端点逐步逼近函数零点,最终求得零点近似值。四、操作方法与实验步骤 1. 二分法:#include#include#includeint main() double a=1.0, b=2.0; double x,s; while(1)

3、x=(a+b)/2; s=pow(x,3)+4*x*x-10; if (-0.000005 s & s 0.000005) break; else if(s 0) b=x; printf(%ft%fn,a,b); printf(%fn,x); printf(%fn,s); return 0;2. 割线法:#includestdio.h#includemath.hint main() float c,a=1.0,b=2.0; while(1) c=b-(b*b*b+4*b*b-10)*(b-a)/(b*b*b+4*b*b-(a*a*a+4*a*a); if(fabs(b-c)0.5*0.0000

4、1)break; b=c; printf(%fn,b); printf(%fn,c); 五、实验结果与分析 二分法 割线法 分析: 使用二分法和割线法均能计算出方程的根,但利用割线法要比二分法计算的次数少,并且能够较早的达到精度要求。并且割线法程序代码量较少,精简明了。六、讨论、心得 本次数值计算方法程序设计实验是在不断的习题练习中跳脱出来,直接面对实用性较强的程序代码编写。效果很好,不仅加深对二分法、割线法的理解,还加强了实际用运能力。将理论成功地转化成实践结果。实验地点北区多学科综合楼4506指导教师王峥太原理工大学学生实验报告学院名称计算机科学与技术专业班级学号学生姓名实验日期成绩课程名

5、称数值计算方法实验题目实验二 线性方程组的直接解法一、实验目的和要求合理利用Gauss消元法、LU分解法、追赶法求解下列方程组:1 2 3 1234 (n=5,10,100,)二、主要设备 PC,Windows操作系统,VC+6.0编程平台;三、实验内容和原理高斯消元法:将原方程组化为三角形方阵的方程组:lik=aik/akk aij= aij- lik* akj ( k=1,2,n-1 i=k+1,k+2, ,n j=k+1,k+2, ,n+1 )由回代过程求得原方程组的解: xn= ann+1/ ann xk=( akn+1-akj xj)/ akk 完全主元素消元法流程图: 列主元素消元

6、法: LU分解法:将系数矩阵A转化为A=L*U,L为单位下三角矩阵,U为普通上三角矩阵,然后通过解方程组l*y=b,u*x=y,来求解x。四、操作方法与实验步骤1. 完全主元素消元法:#include#include#includemath.hfloat a100101;float x10;int N; void shuchu() for(int i=1;i=N;i+) for(int j=1;j=N+1;j+) coutaij ; coutendl; void initdata() cout请输入矩阵阶数:N; cout请输入矩阵各项:endl; for(int i=1;i=N;i+) fo

7、r(int j=1;jaij; coutendl;void main() int z10; int maxi,maxj; initdata(); for(int i=1;i=N;i+) zi=i; for(int k=1;kN;k+) maxi=k;maxj=k;float maxv=abs(akk); for(i=k;i=N;i+) for(int j=k;jmaxv) maxv=abs(aij);maxi=i;maxj=j; if(maxi!=k) for(int j=1;j=N+1;j+) float t=akj;akj=amaxij;amaxij=t; if(maxj!=k) for(

8、i=1;i=N;i+) float t=aik;aik=aimaxj;aimaxj=t; int t=zk;zk=zmaxj;zmaxj=t; for(int i=k+1;i=N;i+) float l=aik/akk; for(int j=k;j0;i-) float s=0; for(int j=i+1;j=N;j+) s+=aij*xzj; xzi=(aiN+1-s)/aii; cout完全主元素消去法之后的矩阵为: endl; shuchu(); for(i=1;i=N;i+) coutxi=xiendl;2. 列主元素消元法:#includestdio.hint main() flo

9、at a34=1,2,3,14,0,1,2,8,2,4,1,13; float x3; float sum=0; int k,i,j; for(k=0;k2;k+) for(i=k+1;i3;i+) for(j=k+1;j4;j+) aij=aij-aik/akk*akj; for(i=0;i3;i+) for(j=0;j=0;k-) sum=0; for(j=k+1;j3;j+) sum+=akj*xj; xk=(ak3-sum)/akk; for(i=0;i3;i+) printf (x%d=%fn,i+1,xi); printf(n);3. LU分解法:#include #include

10、 #define L 30double aLL,bL,lLL,uLL,xL,yL;int main() int n,i,j,k,r; printf(请输入矩阵元次:n); scanf(%d,&n); printf(请输入矩阵各项:n); for(i=1;i=n;+i) for(j=1;j=n;+j) scanf(%lf,&aij); printf(请输入方程组的常数项:n); for(i=1;i=n;+i) scanf(%lf,&bi); for(i=1;i=n;+i) for(j=1;j=n;+j) lij=0; uij=0.0; for(k=1;k=n;+k) for(j=k;j=n;+j

11、) ukj=akj; for(r=1;rk;+r) ukj-=lkr*urj; for(i=k+1;i=n;+i) lik=aik; for(r=1;rk;+r) lik-=lir*urk; lik/= ukk; lkk=1.0; for(i=1;i=n;+i) yi = bi; for(j=1;j0;-i) xi = yi; for(j=i+1;j=n;+j) xi-=uij*xj; xi/= uii; for(i=1;i=n;+i) printf(%0.2lfn,xi); return 0;五、实验结果与分析完全主元素消元法: 列主元素消元法: LU分解法: 分析: 对于两种高斯解方程,完

12、全主元素跟列主元素都是先消元、再回代,由程序段可以发现,始终消去对角线下方的元素。即,为了节约内存及时效,可以不必计算出主元素下方数据。 列主元素消元法的算法设计上优于完全主元素消元法,它只需依次按列选主元素然后换行使之变到主元素位置,再进行消元即可。 列主元素消元法的耗时比完全主元素法少很多,常采用之。 对于LU分解法,分解矩阵为单位下三角阵L与上三角阵U的乘积,然后解方程组Ly=b,回代,解方程组Ux=y。其中的L为n阶单位下三角阵、U为上三角阵.六、讨论、心得 本次试验中,感觉是最难的一次,完全主元素消元法程序编写过程相对来说花了好长时间。纠正各种语法、算法、思路错误。最后勉强成功,但还

13、是有几处警告,不得解决之法。感到程序学习的不足,再加之对高斯的不甚了解。编写过程很是痛苦。 查阅各种内外部资料,这点有利有弊。突然觉得,应该再把数据结构之类的重新学习一下才行。以后多花时间在编程吧,重在理解。 必须反省一下自己的C、C+学习了,还是得多加练习,平时养成好的算法思路,免得再次不知所措。实验地点北区多学科综合楼4506指导教师王峥太原理工大学学生实验报告学院名称计算机科学与技术专业班级学号学生姓名实验日期成绩课程名称数值计算方法实验题目实验三 线性方程组的迭代解法一、实验目的和要求使用雅可比迭代法或高斯-赛德尔迭代法对下列方程组进行求解。 二、主要设备 PC,Windows操作系统

14、,VC+6.0编程平台;三、实验内容和原理设线性方程组 Ax=b的系数矩阵A可逆,且主对角元素a11,a22,ann均不为零,令D=diag(a11,a22,ann)并将A分解成 A=(A-D)+D从而线性方程组可写成 Dx=(D-A)x+b则有迭代公式x(k+1)=B1x(k)+f1其中,B1=I-D-1A,f1=D-1b。各自详细流程图如下所示:四、操作方法与实验步骤高斯赛德尔迭代法#include iostream#include iomanipusing namespace std;int main() int i,j,k=0,m,n; double t1,t2,e1,e2=0.0;

15、coute1; coutm; coutn; coutendl; double (*a)=new double *m;/生成二维动态数组 for(i=0;i=m;i+) ai=new doublen; double (*b)=new double m; double (*x)=new double n; cout请输入系数矩阵:endl; cout-endl; for(int num1=0;num1m;num1+) for(int num2=0;num2anum1num2; coutendl; cout输入的系数矩阵为:endl; for (int num3=0;num3m;num3+) for

16、(int num4=0;num4n;num4+) coutanum3num4 ; coutendl; cout-endl; cout请输入矩阵b:endl; cout-endl; for(int num5=0;num5bnum5; cout输入的矩阵b为:endl; for(int num6=0;num6m;num6+) coutbnum6 ; coutendl; cout-endl; for(int num7=0;num7n;num7+) xnum7=0.0000; do cout第k次迭代值:; e2=0.0; for(i=0;im;i+) double sum=0.0; for(j=0;

17、j=0?(xi)-t1:t1-(xi); e2=(e2=t2?e2:t2); coutsetprecision(8)xi ; cout=e1&k30); cout共迭代了k次; deletea; deleteb; deletex; return 0 ;雅克比迭代法:#include #include int main() float a33=10,-1,-2,-1,10,-2,-1,-1,5,b3=7.2,8.3,4.2; float x3=0,0,0,sum; int i,j,k,n=3; for(k=0;k10;k+) for(i=0;i3;i+) sum=0; for(j=0;jn;j+

18、) if(i=j)continue; sum=sum+aij*xj; xi=(bi-sum)/aii; for(i=0;in;i+) printf(x%d=%ft,i+1,xi); printf(n); 五、实验结果与分析高斯赛德尔迭代法:雅克比迭代: 分析: 使用高斯-赛德尔和雅克比迭代都可以求出方程组的解,但是利用高斯-赛德尔迭代法所需的迭代次数比雅克比迭代少,能够更早的达到精度要求。 从程序中可以看出,雅克比定义的sum只有一个,而高斯赛德尔需要两个。时效性上后者要好些。六、讨论、心得 这次试验算是比较成功,要归功于授课时候的认真听讲。程序编写之前,对书本的理论知识进行了进一步的探索。预

19、习准备工作很彻底,自然随后的一切也都很顺利。 好好学习,好好编程,好好思考。 希望,有所成。实验地点北区多学科综合楼4506指导教师王峥太原理工大学学生实验报告学院名称计算机科学与技术专业班级学号学生姓名实验日期成绩课程名称数值计算方法实验题目实验四 矩阵特征值与特征向量问题一、实验目的和要求使用幂法求A模为最大的特征值及其相应的特征向量。二、主要设备 PC,Windows操作系统,VC+6.0编程平台;三、实验内容和原理幂法:由已知的非零向量x0和矩阵A的乘幂构造向量序列xn以计算矩阵A的按模最大特征值及其特征向量的方法,称为幂法。在计算过程,每步迭代中把向量xk进行规范化,即用xk乘以一个

20、常数,使得其分量的模最大为1,这样,迭代公式变为: 其中,mk是yk模最大的第一个分量。结果可取: 幂法流程图:四、操作方法与实验步骤#include#include#define N 3#define eps 1e-6#define M 30float maxvalue(float x,int n) float Max=x0; int i; for(i=1;ifabs(Max) Max=xi; return Max;void matrix(float *A) float UN,VN,r1,r2,temp; int i,j,k=0; for(i=0;iN;i+) Ui=1; while(kM)

21、 k+; for(i=0;iN;i+) temp=0; for(j=0;jN;j+) temp+=*(A+i*N+j)*Uj; Vi=temp; for(i=0;iN;i+) Ui=Vi/maxvalue(V,N); if(k=1) r1=maxvalue(V,N); else r2=maxvalue(V,N); if(fabs(r2-r1)eps)break; r1=r2; printf(迭代次数:t%dn,k); printf(矩阵的特征值:t%fn,r2); printf(); for(i=0;iN;i+) printf(%ft,Ui); printf()n);int main() float ANN=2,-1,0,-1,2,-1,0,-1,2 ; matrix(A0);五、实验结果与分析 分析: 幂方法求解矩阵的最大特征值以及特征向量,最大优点是计算简单,容易在计算机上实现,对稀疏矩阵较为适合。但有时收敛速度很慢。六、讨论、心得 程序编写时详细分析了书上的求解过程,但最终结果还是有所出入。课本的迭代次数只用7次,而程序运行之后显示为12次。不明白那里原因。推测是由于精确位数的不同导 致。最后在程序中更改了一下,验证得之。 知识转化为“所

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1