数值计算-算法的稳定研究.doc_第1页
数值计算-算法的稳定研究.doc_第2页
数值计算-算法的稳定研究.doc_第3页
数值计算-算法的稳定研究.doc_第4页
数值计算-算法的稳定研究.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

误差传播与算法稳定性试验报告数值计算方法专业班级 软件08-1 姓 名 熊文成 学 号 08083117 时 间 2010年10月20日星期三 一 实验目的体会稳定性在选择算法中的地位,误差扩张的算法是不稳定的,是我们所不期望的;误差衰减的算法是稳定的,是我们努力寻求的,这是贯穿本课程的目标。二 问题的提出考虑一个简单的由积分定义的序列 显然 当时,。当时,利用部分积分易得 另一方面,有三 试验内容 依次用一下两种迭代方法计算指定范围内的序列值。 ()、, ()、四 主程序流程五 源程序#include #include /根据初始值origin按照递推公式I(n)=1-nI(n-1)/计算各项的值,并输出/1/e=0.3678794412void funcOne(double origin)int i,n=0;/迭代次数,及下标号char oper;/操作符号double value;value=origin;while (1)for (i=0;i=-10e6&value=10e6)printf(tI(%d)=%.7f,n+1,value);elseprintf(tI(%d)=%e,n,value); /这个数太大就用科学记数n+;/次数加一value=1-n*value;if (n%2=0)printf(n); /每两行一输出printf(tq停止迭代或按其他任意键继续:);oper=getch();printf(n);if (oper=q|oper=Q)break; /如果放弃了,则退出迭代return; /根据参数n确定初值I(n)=0/计算n-1、n-2.0的值void funcTwo(int n)int i; /循环变量char oper; /操作符double value=0; /初始值为0while (1)for (i=1;i1)value=(1-value)/n;else return; /如果n为0可以直接返回n-; /个数减一printf(tq停止迭代或按其他任意键继续:);oper=getch();printf(n);if (oper=q|oper=Q)break;/如果放弃了,则退出迭代/测试第一个迭代函数void testFunOne()printf(nt*初值是5位有效数字*n);funcOne(0.36788);printf(nt*初值是6位有效数字*n);funcOne(0.367879);printf(nt*初值是7位有效数字*n);funcOne(0.3678794);/测试第二个迭代函数void testFunTwo()int originN; /N的初始值printf(nt输入N的值(I(N)=0):);scanf(%d,&originN);if(originN99)funcTwo(99); /如果N的值太小,直接用99代替else funcTwo(originN);void main()char sel; /选项while(1)printf(nt选择迭代公式:);printf(nt1.迭代公式:I(n)=1-n*I(n-1);printf(nt2.迭代公式:I(n-1)=(1-I(n)/nnt);sel=getch();if (sel=1)testFunOne();else testFunTwo();printf(nt按任一键继续:);getch();六 程序运行结果1、第一种迭代方式(1)、五位有效数字:程序运行,选择要测试的函数,选择第一个:程序在迭代的过程中每次输出6项的值,如上图所示,初值I(1)=0.36788,可以看到,到此就已经存在误差较大的值,因为我们研究的积分序列一定满足0I(n)1的,下面继续迭代,给出前30项的值,如下图所示。 从以上的各项中更可以看出,I(n)的迭代值已经出现严重的扭曲,简而言之,由于初值I(1)的误差,使得按它计算的其他项的误差是放大的,下面给出初值是六位的迭代过程。(2)、六位有效数字:尽管6位有效数字比5位的精确,但是计算的各项仍然出现严重的扭曲,出现误差放大。下面给出有效数字是7位的结果。(3)、七位有效数字:由此可以得出和六位有效数字时一样的结论,虽然7位有效数字较5位或6位的要精确,但是结果中仍然有误差放大现象,结果出现严重失真。(4)、迭代方式一的结论:综合上面的(1)、(2)、(3)三点可知方式一的递推形式是不稳定的。2、第二种迭代方式运行结果如下图所示,给出N的值,从N开始计算N-1,N-2,1各项的值,每次计算输出10项,按退出输出。这里我输入N=200下面截取其中的一部分结果,130-101项的。70-51项的值:最后给出20-1的值:可以看出计算I(1)的结果与精确值=0.3678794相当,为了保证结论的可靠性,可以输入其他的N值来估计I(1)的值。总之,算法二的递推形式是稳定的。七 结论与分析(1)、分别用算法(),()计算,在计算中分别采用5位,6位,7位有效数字,结果已经在上面的程序结果中给出。有结果我们知道算法()是不稳定的算法,而算法()是稳定的。(2)、比较两种算法的优劣,从理论上推导结果。对算法()中:的计算误差为,由递推计算的误差是;算法()中的的计算误差为,有向前递推计算的误差为,如果在上述两种算法中都假定后面的计算不再引入其他的误差,下面给出与的关系和与的关系。 设的准确值为,则有 将上面两式想减可得: 也即, 从而, 由此结论可知,当初始值产生的误差会经过迭代之后不断的放大,最终估计的值将失真,即误差对后面的影响是扩张的。因此算法()是不稳定的算法。 对算法()有,设的准确值为,则有,将以上两式相减可得,从而可知,有这个公司可以看出,当给出初值时,由于存在误差,当向前递推时,误差会逐级缩小,而且当N较大是往后的误差将趋向于0,误差不会放大,误差对后面的影响是衰减的,故此算法是稳定的。八 收获与感想这次试验通过一个积分式所对应的两种递推计算方法,从具体的数据出发,深刻的

温馨提示

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

评论

0/150

提交评论