数值实验研讨.doc

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数值分析实验报告 计1310 陈万全 学号:132852 实验一 一.实验内容: 用两种不同的顺序计算,分析其误差的变化。 二.实验目的: 1. 通过上机编程,复习巩固以前所学程序设计语言; 2. 通过上机计算,了解舍入误差所引起的数值不稳定性。 3. 通过上机计算,了解运算次序对计算结果的影响,从而尽量避免大数吃小数的现象。 三.算法描述 取float类型数据从大到和从小到大的累加。然后输入结果 四.源程序: /*********** 实验一 ********/ #include iostream using namespace std; float shunxi() { float sum=0; for(int i=1;i10001;i++) { sum=sum+1.0/float(i*i); } return sum; } float daoxu() { float sum=0; for(int i=10000;i0;i--) { sum=sum+1.0/float(i*i); } return sum; } int main() { cout.precision(10); cout第一个顺序方法的值:shunxi()endl; cout第二个倒序方法的值:daoxu()endl; return 0; } 五、程序结果 六.实验体会 这个程序还是比较简单的,仅仅需要一个循环就可以完成,只要细心就不会有错。从这个实验里我也看到了计算机毕竟不是万能的,由于机器字长的问题对于一些特殊的计算会出错——即大数吃小数这样的计算,这样会让人们在日常的生产生活中产生一些意想不到的问题。不过只要稍微对计算方法做一下改动就可以改正这种错误——改变算术的顺序。至于从哪个方向计算更好,那就要具体问题具体分析了. 对于程序上的解决了,cout输出的小数保留的位数。 实验二 一.实验内容: 1、拉格朗日插值 按下列数据 x -3.0 -1.0 1.0 2.0 3.0 y 1.0 1.5 2.0 2.0 1.0 作二次插值,并求x=-2,x=0,x=2.75时的函数近似值 2牛顿插值 按下列数据 x 0.30 0.42 0.50 0.58 0.66 0.72 y 1.04403 1.08462 1.11803 1.15603 1.19817 1.23223 作五次插值,并求x=0.46,x=0.55,x=0.60时的函数近似值. 二.实验目的: 掌握牛顿插值法。 掌握拉格朗日插值法。 三.算法描述 开始时判断输入的点是否在区间内,不在则退出 在则继续根据值选择节点 带入公式计算 四 源程序: 朗格朗日二次插值 #include iostream using namespace std; double inser(double x) { double sum1,sum2,sum3,sum; double xi[5]={-3.0,-1.0,1.0,2.0,3.0}; double yi[5]={1.0,1.5,2.0,2.0,1.0}; int i; int a,b,c; for (i=0;i5;i++) { if (xxi[i]xxi[i+1]||xxi[0]||xxi[4]) { a=i; b=(i+1)%5; c=(i+2)%5; break; } } sum1=yi[a]*(x-xi[b])*(x-xi[c])/((xi[a]-xi[b])*(xi[a]-xi[c])); sum2=yi[b]*(x-xi[a])*(x-xi[c])/((xi[b]-xi[a])*(xi[b]-xi[c])); sum3=yi[c]*(x-xi[b])*(x-xi[a])/((xi[c]-xi[b])*(xi[c]-xi[a])); sum=sum1+sum2+sum3; return sum; } int main() { cout朗格朗日二次插值-2.0的值:inser(-2.0)endl; cout朗格朗日二次插值0.0的值:inser(0.0)endl; cout朗格朗日二次插值2.75的值:inser(2.75)endl; return 0; } 牛顿插值 #include iostream using namespace std; #define N 6 double fi[N]; int chazhi(); double niudun(double x) { double xi[N]={0.3,0.42,0.5,0.58,0.66,0.72}; double yi[N]={1.04403,1.0

文档评论(0)

***** + 关注
实名认证
内容提供者

我是自由职业者,从事文档的创作工作。

1亿VIP精品文档

相关文档