预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共23页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

20.(上机题)舍入误差与有效数 设,其精确值为。 (1)编制按从小到大的顺序,计算的通用程序。 (2)编制按从大到小的顺序,计算的通用程序。 (3)按两种顺序分别计算,并指出有效位数。(编制程序时用单精度) (4)通过本上机题,你明白了什么? c++代码: #include<iostream.h> #include<fstream.h> voidmain(){ floatS1,S2,S=0.0,N,j; fstreammyfile;//定义文件 myfile.open("chap0.txt",ios::in|ios::out); for(inti=0;i<3;i++) { do//读入三组数据 { cout<<"请输入N值:"; cin>>N; cout<<endl; myfile<<"当N="<<N<<"时"<<endl<<endl; }while(N<2); S=(float)((1.5-(1.0/N)-(1.0/(N+1)))/2); myfile<<"精确值S=:"<<S<<endl<<endl; S1=0.0;S2=0.0; for(j=2;j<=N;j++)S1=S1+(float)(1.0/(j*j-1.0)); for(j=N;j>=2;j--)S2=S2+(float)(1.0/(j*j-1.0)); myfile<<"按从大到小的顺序求和结果S1=:"<<S1<<endl<<endl; myfile<<"按从小到大的顺序求和结果S2=:"<<S2<<endl<<endl; } myfile.close(); } 输出结果: 当N=100时 精确值S=:0.740049 按从大到小的顺序求和结果S1=:0.740049有效位数6 按从小到大的顺序求和结果S2=:0.74005有效位数5 当N=10000时 精确值S=:0.7499 按从大到小的顺序求和结果S1=:0.749852有效位数4 按从小到大的顺序求和结果S2=:0.7499有效位数4 当N=1000000时 精确值S=:0.749999 按从大到小的顺序求和结果S1=:0.749852有效位数4 按从小到大的顺序求和结果S2=:0.749999有效位数6 体会:通过本题,我认识到了舍入误差对计算结果的影响,所以必须选择合适的计算方法,尽量减少这种误差的影响。 习题2 20.(上机题)NEWTON迭代法 (1)给定初值及容许误差,编制Newton法解方程根的通用程序。 (2)给定方程,易知其有三个根。 1.由Newton方法的局部收敛性可知存在,当时,Newton迭代序列收敛于根。试确定尽可能大的。 2。试取若干初值,观察当时Newton序列是否收敛以及收敛于哪一个根。 (3)通过本上机题,你明白了什么? c++代码: #include<iostream.h> #include<math.h> #defineh0.000001 floatxo=0.0,x1,x2,e,a,b; floatf(floatx){//原函数 floatf1=(float)(a*x*x*x+b*x); returnf1; } floatg(floatx){//导函数 floatg1=(float)(3*a*x*x+b); returng1; } inttest(floatxk){//求收敛于0的最大的 intr,flag=0; floatxkplus1; while(flag==0) { xkplus1=xk-f(xk)/g(xk); if(xkplus1==xk)flag=1; elsexk=xkplus1; }; if(xk==0)r=1;elser=0; returnr; } voidmain() { cout<<"请输入初值X0:"; cin>>x1; cout<<endl; cout<<"请输入容许误差E:"; cin>>e; cout<<endl; cout<<"请输入三次系数A,一次系数B:"; cin>>a>>b; cout<<endl; x2=(float)(x1-f(x1)/g(x1));//牛顿迭代法求根 while(fabs(x2-x1)>=e) { x1=x2; x2=(x1-f(x1)/g(x1)); } cout<<"方程的根X为:"<<x2<<endl<<endl; while(test(xo)==1){xo+=h;}//求根x=0最大的迭代区间 cout<<"X=0的最大迭代区间为(-"<<xo<<","<<xo<<")"<<endl<<endl; } 输出结果: X=0的最大迭代区间为(-0.774597,0.774597);0.000000000