东南大学计算方法与实习上机实验一_第1页
东南大学计算方法与实习上机实验一_第2页
东南大学计算方法与实习上机实验一_第3页
东南大学计算方法与实习上机实验一_第4页
全文预览已结束

下载本文档

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

文档简介

东南大学计算方法与实习实验报告学院:电子科学与工程学院学号:06A姓名:指导老师:实习题14、设Sn=N编制按从大到小的顺序计算Sn的程序;编制按从小到大的顺序计算Sn的程序;⑶按两种顺序分别计算s1000,s10000,s30000,并指出有效位数。解析:从大到小时,将sn分解成sn-1=sn-,在计算时根据想要得到的值取合适的最大的值作为首项;同理从小到大时,将Sn=Sn-1+,则取S2=1/3。则所得式子即为该算法的通项公式。(1)从大到小算法的C++程序如下:/*从大到小的算法*/#include<iostream>#include<iomanip>#include<cmath>usingnamespacestd;constintmax=34000; //根据第(3)问的问题,我选择了最大数为34000作为初值voidmain()(intnum;charjus;doublecor,sub;A:coutvv”请输入你想计算的值"<<'\t';cin>>num;doublesmax=1.0/2.0*(3.0/2.0-1.0/max-1.0/(max+1)),temps;doubleS[max];//coutvv"s["vvmaxvv"]="vvsetprecision(20)vvsmaxvv'\n';for(intn=max;n>num;){temps=smax;S[n]=temps;n--;smax=smax-1.0/((n+1)*(n+1)-1.0);}cor=1.0/2.0*(3.0/2.0-1.0/num-1.0/(num+1.0)); //利用已知精确值公式计算精确值sub=fabs(cor-smax); //double型取误差的绝对值coutvv"用递推公式算出来的s[”vvnvv”]=”vvsetprecision(20)vvsmaxvv'\n';coutvv"实际精确值为"vvsetprecision(20)vvcorvv'\n';coutvv"则误差为”vvsetprecision(20)vvsubvv'\n';coutvv"是否继续计算S[N],是请输入丫,否则输入N!"vvendl;cin>>jus;if((int)jus==89ll(int)jus==121)gotoA;从小到大算法的C++程序如下:/*从小到大的算法*/#include<iostream>#include<iomanip>#include<cmath>usingnamespacestd;voidmain()(intmax;A:cout<<”请输入你想计算的数,注意不要小于2"<<'\t';cin>>max;doubles2=1.0/3.0,temps,cor,sub;charjus;doubleS[100000];for(intj=2;j<max;)(temps=s2;S[j]=temps;j++;s2+=1.0/(j*j-1.0);}cor=1.0/2.0*(3.0/2.0-1.0/j-1.0/(j+1.0)); //利用已知精确值公式计算精确值sub=fabs(cor-s2); //double型取误差的绝对值coutvv”用递推公式算出来的s[”vvjvv”]=”vvsetprecision(20)vvs2vv'\n';cout<<"实际精确值为"vvsetprecision(20)vvcorvv'\n';coutvv"则误差为”vvsetprecision(20)vvsubvv'\n';coutvv"是否继续计算S[N],是请输入丫,否则输入N!"vvendl;cin>>jus;if((int)jus==89ll(int)jus==121)gotoA;}(3)i.选择从大到小的顺序计算S1000、S10000、S3的值需要计算的项S1000 S10000 S30000 计算值0.749000499500496630.749900004999502380.74996666722220395实际精确值0.749000499500499520.749900004999500050.74996666722220373误差2.886579864025407*10-152.3314683517128287*10-152.2204460492503131*10-16有效数字171717(注:因为程序中setprecision(20)表示输出数值小数位数20,则程序运行时所得到的有效数字在17位左右)ii.选择从小到大的顺序计算S“M、S”g、Sgm的值需要计算的项计算值10000.74900049950049996S七0000 需要计算的项计算值10000.74900049950049996S七0000 0.74966672220370571实际精确值误差有效数字0.749000499500499524.4408920985006262*10-16170.749900004999500055.6621374255882984*104517〜30000 0.749966667222207280.749966667222203733.5527136788005009*10-1517附上部分程序运行图:"D:\PnogramFi1es\kticrosoftVisualStudio\IVyProiects\AENA普推公式算出来言继续计算g】.是请输沁,否则输沁!TOC\o"1-5"\h\z普推公式算出来言继续计算g】.是请输沁,否则输沁! 5jsL100B1=0.74900049950049996刘值为鼠749 9EeW49952"'4.4408920985B06262e-016膏式算出来言春续计算S[N],膏式算出来言春续计算S[N],是请输我丫,否则输沁!^jsL100B01=0.749¥00004999S0S71用值为瓦?499朝鸣时闩4999SBK05''5.6621374255882984e-015计算的融注意不要小于2 30000a隹公式算出来 勺s[300001=0.a隹公式算出来|^^0?74996666722220373^J3.5S27136788a05B09e-01S继绶计算gINI,是请输沁,否则输汉N!iii.实验分析通过C++程序进行计算验证采用从大到小或者从小到大的递推公式算法得到的数值基本稳定且误差不大。而相比之下,从大到小比从小到大的误差更加小,则证明从大到小的算法更加好。需要说明的是C++程序所计算的结果事实上也同实际数值有些许误差。在实验过程中发现S2=1/3化成小数应该为0.3关于3的无限循环,而利用C++程序计算的结果为0.33333333333333337,说明了其与实际数值依然存在有误差。但是毕竟利用递推公式和计算所给的精确值公式时都将计算机的误差计算进去了,所以理论上可以忽略这部分误差。值得一提的是上文从大到小的算法程序中,我采取了34000作为最大值的初始值,而不是用其他相对于比较容易取的特殊的值,譬如30000,50000,甚至于100000。事实上在选取该值的时候比较犹豫,于是采取了试值的方法,结果发现50

温馨提示

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

最新文档

评论

0/150

提交评论