东南大学数值分析上机题上_第1页
东南大学数值分析上机题上_第2页
东南大学数值分析上机题上_第3页
东南大学数值分析上机题上_第4页
东南大学数值分析上机题上_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 数值分析上机报告 姓名: 学号: 专业: 2013年10月27日第一章舍入误差与有效数设,其精确值为。(1)编制按从大到小的顺序,计算的通用程序。(2)编制按从小到大的顺序,计算的通用程序。(3)按两种顺序分别计算,并指出有效位数。(编制程序时用单精度)(4)通过本上机题,你明白了什么?解:(1)#include<stdio.h>void main()float n,i,s;printf("please input n=");scanf("%f",&n);for(i=2,s=0;i<=n;s+=1/(i*i-1),i+);pr

2、intf("s=%fn",s);(2)#include<stdio.h>void main()float n,i,s;printf("please input n=");scanf("%f",&n);for(i=n,s=0;i>=2;s+=1/(i*i-1),i-);printf("s=%fn",s);(3) 按从大到小顺序:=0.740049 有效位数6位 =0.749852 有效位数3位 =0.749852 有效位数3位 按从小到大顺序:=0.740050 有效位数5位 =0.7499

3、00 有效位数6位 =0.749999 有效位数6位(4) 通过上述实验数据可以看出此次算法使用从小到大的顺序进行得到的数据相对而言更精确,可以得到这样的启示:在计算数值时,要先分析不同算法对结果的影响,避免大数吃小数的现象,找出能得到更精确的结果的算法。第二章(上机题)Newton迭代法(1)给定初值及容许误差,编制Newton法解方程根的通用程序。(2)给定方程,易知其有三个根,。1由Newton方法的局部收敛性可知存在,当时,Newton迭代序列收敛于根。试确定尽可能大的。2试取若干初始值,观察当,时Newton序列是否收敛以及收敛于哪一个根。(3)通过本上机题,你明白了什么?解:(1)

4、#include<iostream.h>#include<math.h>#define eps 0.000001 float f(float x) float f;f=x*x*x/3-x; return(f);float df(float x) float df;df=x*x-1; return (df);void main(void)float x0,x1,a;int k=0;cout<<"请输入初值x0:"cin>>x0;doa=-f(x0)/df(x0);x1=x0+a;k+;x0=x1;while(fabs(a)>

5、;eps);cout<<k<<'t'<<x0;(2)1 #include<iostream.h>#include<math.h>void delay(int n) for(n=10000;n>0;n-);#define eps 0.01float f(float x) float f;f=x*x*x/3-x; return(f);float df(float x) float df;df=x*x-1; return (df);int judgement(float z)int count=5;float x0,x

6、1,type,type1;x0=z;while(count->0) x1=x0-f(x0)/df(x0);type=fabs(x1); type1=fabs(x1-x0); cout<<"count="<<count<<'t'<<"type="<<type<<'t'<<"type1="<<type1<<'n'if(fabs(x1-x0)<eps)return 1;x0=

7、x1;delay(30000); return 0; void main(void)float delta=0;int flag=1;while(flag=1)cout<<"方程的根为:"<<'n'delta+=eps;flag=judgement(delta);cout<<"输出方程根收敛的区间值:n"cout<<delta-eps; /输出收敛的区间值 取esp=0.1,即步长为0.1时,由程序算出=0.78。所以当(-,)时,迭代序列收敛于根。(2)2#include<stdio

8、.h>#include<math.h>#define eps 0.01float f(float x)float f;f=x*x*x/3-x;return f;float df(float x)float df;df=x*x-1;return df;float ddf(float x)float ddf;ddf=2*x;return ddf;main()float x0,x1,a,dt=0;int k=0;dodt=dt+eps;k+;while(f(-dt)*f(dt)<0)&&(df(dt)!=0)&&(2*dt>=-f(-dt

9、)/df(-dt)&&(2*dt>=f(dt)/df(dt); printf("请输入x0:");scanf("%f",&x0);if(x0<-1) doa=-f(x0)/df(x0);x1=x0+a;k+;x0=x1;while(fabs(a)>eps);else if(x0>-1&&x0<-dt)doa=-f(x0)/df(x0);x1=x0+a;k+;x0=x1;while(fabs(a)>eps);else if(x0>-dt&&x0<dt)d

10、oa=-f(x0)/df(x0);x1=x0+a;k+;x0=x1;while(fabs(a)>eps);else if(x0>dt&&x0<1)doa=-f(x0)/df(x0);x1=x0+a;k+;x0=x1;while(fabs(a)>eps);else if (x0>1)doa=-f(x0)/df(x0);x1=x0+a;k+;x0=x1;while(fabs(a)>eps);printf("收敛域=%f,迭代次数=%dn",dt,k);printf("根=%fn",x0);-1000-0.9

11、5-0.7500.791.5-100-0.90-0.500.8210-10-0.84-0.100.88100-8-0.81000.90500-2-0.800.300.951000-1.2-0.790.7500.9910000由上表可以看出, 在(-,-1)内收敛于,在内收敛于,在(1,+)内收敛于,但在内和均可能收敛于和。(3)在用迭代法进行计算的时候,初值的选择很关键,所选择的初值必须在一定的范围内,如果超出这个范围,将得不出正确的结果。第三章39.列主元三角分解法对于某电路的分析,归结为求解线性方程组RI=V,(1)编制解n阶线性方程组Ax=b的列主元三角分解法的通用程序;(2)用所编制的

12、程序解线性方程组RI=V,并打印出解向量,保留五位有效数;(3)本编程之中,你提高了哪些编程能力?解:(1)#include<iostream.h>#include<math.h>void main(void)int i,j,n,k,q;float a1011,s10,s110;cout<<"请输入n的值:"cin>>n;cout<<"输入数组a:"<<endl;for(i=1;i<=n;i+)for(j=1;j<=(n+1);j+)cin>>aij; for

13、(i=1;i<=n;i+)for(j=1;j<=(n+1);j+)cout<<aij<<'t'cout<<'n' cout<<"'''''''''''''''''''''''''"<<'n'int t=1;for(i=1;i<=n;i+)si=ai1;f

14、loat max=fabs(s1);for(i=2;i<=n;i+)if(fabs(si)>max)max=fabs(si);t=i;for(j=1;j<=(n+1);j+)float b=a1j;a1j=atj;atj=b; for(i=2;i<=n;i+)ai1=ai1/max; for(i=1;i<=n;i+)for(j=1;j<=(n+1);j+)cout<<aij<<'t'cout<<'n'cout<<"'''''

15、9;'''''''''''''''''''"<<'n'for(k=2;k<=n;k+)for(i=k;i<=n;i+)float sum=0;for(q=1;q<k;q+)sum+=aiq*aqk;s1i=aik-sum;int l=k;float m=fabs(s1k);for(i=k;i<=n;i+)if(fabs(s1i)>m)m=fabs(s1i);l=i; for(j

16、=1;j<=n+1;j+) float s2=akj;akj=alj;alj=s2;for(j=k;j<=n+1;j+)float sum1=0;for(q=1;q<k;q+)sum1+=akq*aqj;akj=akj-sum1;for(i=k+1;i<=n;i+)float sum2=0;for(q=1;q<k;q+)sum2+=aiq*aqk;aik=(aik-sum2)/(akk); for(i=1;i<=n;i+)for(j=1;j<=(n+1);j+)cout<<aij<<'t'cout<<

17、'n'float x10;for(i=n-1;i>=1;i-)xn=ann+1/ann;float sum3=0;for(j=i+1;j<=n;j+)sum3+=aij*xj;xi=(ain+1-sum3)/aii; for(i=1;i<=n;i+)cout<<'x'<<i<<'='<<xi<<endl; (2)方程的解为:x1= -0.28923,x2= 0.34544,x3= -0.71281,x4= -0.22061,x5= -0.43040,x6= 0.1543

18、1,x7= -0.057823,x8= 0.20105,x9= 0.29023。(3) 在此次编程过程中,用到了多次for循环结构,有多层嵌套,程序较为复杂。此外在解方程组过程中,数组起了很大的作用,可以更加方面的写出程序。我提高了分步解决问题的能力,并且更加熟悉循环语句的运用,40逐次超松弛迭代法(1)编制解n阶线性方程组Ax=b的SOR方法的通用程序(要求);(2)对于39题中所给的线性方程组,取松弛因子,容许误差,打印松弛因子、迭代次数、最佳松弛因子及解向量。解:#include<iostream.h>#include<math.h>#define eps 0.5

19、e-5 void main(void)int i,j,l;float w,t;float m9;float sum;float a99=31,-13,0,0,0,-10,0,0,0,-13,35,-9,0,-11,0,0,0,0,0,-9,31,-10,0,0,0,0,0,0,0,-10,79,-30,0,0,0,-9,0,0,0,-30,57,-7,0,-5,0,0,0,0,0,-7,47,-30,0,0,0,0,0,0,0,-30,41,0,0,0,0,0,0,-5,0,0,27,-2,0,0,0,-9,0,0,0,-2,29;float b9=-15,27,-23,0,-20,12,-7

20、,7,10;float max(float m9);for(t=1;t<=99;t+)l=0;float x09=1,1,1,1,1,1,1,1,1;float x19=1,1,1,1,1,1,1,1,1;w=t/50;dofor(i=0;i<9;i+)x0i=x1i;for(i=0;i<9;i+)sum=0;for(j=0;j<i;j+)sum=sum+aij*x1j;for(j=i+1;j<9;j+)sum=sum+aij*x0j;x1i=(1-w)*x0i+w*(bi-sum)/aii;for(i=0;i<9;i+)mi=x1i-x0i;l+;whil

21、e(max(m)>=eps);if(max(m)<=eps)cout<<"迭代次数="<<l<<'t'<<"w="<<w<<'n'for(i=0;i<9;i+)cout<<"x1"<<""<<i<<""<<'='<<x1i<<'t'cout<<"-"<<'n'float max(float m9)float k;k=(fabs(m0);for(int i=1;i<9;i+)if(fabs(mi)>k)k=fabs(mi);return k; 迭代次数 迭代次数 迭代次数 迭代次数0.02 12910.04 7000.06 4860.08 3730.10 3030.12 2550.14 2210.16 1940.18 1730.20 1560.22 1420.24 1300.26 1200.28 1110.30 1030.32 960.34 900.36 850.38 800

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论