《牛顿插值法.doc》由会员分享,可在线阅读,更多相关《牛顿插值法.doc(6页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精品文档,仅供学习与交流,如有侵权请联系网站删除南昌工程学院 课程设计 姓名: 邓力群 班级: 08信息与计算科学 学号: 2008101183 课题名称: 牛顿法插值法 指导老师: 龚建华 2011年 6月 4日牛顿法牛顿插值法摘要: 插值法利用函数f (x)在某区间中若干点的函数值,作出适当的特定函数,在这些点上取已知值,在区间的其他点上用这特定函数的值作为函数f (x)的近似值。如果这特定函数是多项式,就称它为插值多项式。利用插值基函数很容易得到拉格朗日插值多项式,公式结构紧凑,在理论分析中甚为方便,但当插值节点增减时全部插值基函数均要随之变化,整个公式也将发生变化, 这在实际计算中是很
2、不方便的,为了克服这一缺点,提出了牛顿插值。 牛顿插值通过求各阶差商,递推得到的一个公式: f(x)=fx0+fx0,x1(x-x0)+fx0,x1,x2(x-x0)(x-x1)+.fx0,.xn(x-x0).(x-xn-1)+Rn(x)关键字:牛顿 插值法 函数牛顿插值法具体算法步骤1:输入节点(xj,yj),精度,计值点xx,f0p,1T,1i;步骤2:对k=1,2,i依次计算k阶均差fxi-k,xi-k+1,xi = (fxi-k+1,xi- fxi-k,xi)/( xi -xi-k )步骤3:(1)、若| fx1,xi- fx0,xi-1| ,则p为最终结果Ni-1(x),余项Ri-1
3、= fx0,xi(xx-xi-1)T。(2)、否则(xx-xi-1)*TT,p+ fx0,xi*Tp,转步骤4。步骤4:若in,则i+1i,转步骤2;否则终止。程序清单/牛顿插值程序/2004-10-23#include#include#define n 6void main()double xn,fn;double qnn;double temp,g,xx;cout请输入(Xi,Fi):endl;for(int i = 0;i6;i+)cout请输入Xi,Fixifi;coutxx;for(i = 0;in;i+)qi0 = fi;for(i = 1;in;i+)for(int j = 1;
4、j=i;j+)qij = (qij-1-qi-1j-1)/(xi-xi-j);for(i = 0;in;i+)for(int j = 0;j=i;j+)coutqij ;coutendl;temp = 1.00;g = q00;for(i = 1;in;i+)temp = temp*(xx-xi-1);g = g+qii*temp;coutF(xx)=g;coutendl;【程序测试】牛顿插值法具体实例设设在给定点处对函数进行二次逼近。二次逼近q如下定义:令是使的点,并重复这个过程: k=0,1,2,该过程当或者时停止,其中是一个很小的数。该方法只能用于二次可微函数,(1)取误差限0.01,从
5、x=4开始,用牛顿法极小化f(x)=由于。应用牛顿迭代法,得迭代计算格式,(k= 0,1,2,)取x0= 4为初值,输入初始值x0:4输入精确值accurate:0.01x1=4.000000 f(x1)=24.000000x2=-1.000000 f(x2)=-1.000000例(2)取误差限0.01,从x=4开始,用牛顿法极小化步骤:(1) 选一个接近于x的真实根的近似根x1;(2) 通过令是使的点求;(3) 并重复(2)过程: k=0,1,2,该过程当或者时停止(4) 一直求下去,直到接近真正的根。当两次求出的根之差就停止牛顿迭代公式是:输入初始值x0:4输入精确值accurate:0.
6、01x1=4.000000 f(x1)=-512.000000x2=2.800000 f(x2)=-96.588800x3=2.012500 f(x3)=-16.607539x4=1.507817 f(x4)=-1.794416x5=1.204385 f(x5)=0.675821x6=1.051791 f(x6)=0.982773x7=1.004643 f(x7)=0.999870例(3)取误差限0.01,从x=0.6开始,重做(2)。讨论用该方法会发生什么现象。输入初始值x0:0.6输入精确值accurate:0.01 输入初始值x0:0.6输入精确值accurate:0.01 x1=0.6
7、00000 f(x1)=0.475200 x2=-0.600000 f(x2)=-0.475200 x3=-0.827608 f(x3)=-0.860023 x4=-1.158643 f(x4)=-0.815152 x5=-1.598022 f(x5)=3.240444 x6=-2.122156 f(x6)=22.616865 x7=-2.699757 f(x7)=80.664133 x8=-3.308431 f(x8)=214.573428 x9=-3.935325 f(x9)=475.738982 x10=-4.573380 f(x10)=929.789032 x11=-5.218623
8、f(x11)=1656.580672 x12=-5.868713 f(x12)=2750.195941 x13=-6.522204 f(x13)=4318.940133 x14=-7.178162 f(x14)=6485.341129 x15=-7.835963 f(x15)=9386.149140 x16=-8.495174 f(x16)=13172.336610 x17=-9.155487 f(x17)=18009.098183 x18=-9.816676 f(x18)=24075.850691 x19=-10.478573 f(x19)=31566.233158 x20=-11.1410
9、50 f(x20)=40688.106800 x21=-11.804007 f(x21)=51663.555035 x22=-12.467368 f(x22)=64728.883480 x23=-13.131069 f(x23)=80134.619961 x24=-13.795062 f(x24)=98145.514509陷入死循环附录例题(1)程序#include #include double f(double x)return pow(x,2)+2*x;double g(double x)return 2*x+2;double h(double x)return 2; void main
10、()int i,j;double x0,accurate,x1000,Abc;printf(输入初始值x0:);scanf(%lf,&x0);printf(输入精确值accurate:);scanf(%lf,&accurate);i=1;x0=x0;x1=x0-g(x0)/h(x0); Abc=xi-xi-1;if(fabs(Abc)accurate) doxi+1=xi-g(xi)/h(xi);i+; Abc=xi-xi-1; while(fabs(Abc)accurate);for(j=0;ji;j+)printf(x%d=%lf f(x%d)=%lfn ,j+1,xj,j+1,f(xj)
11、;例题(2)程序#include #include double f(double x) if(x0)return 4*pow(x,3)-3*pow(x,4);if(x0)return 12*pow(x,2)-12*pow(x,3);if(x0)return 24*x-36*pow(x,2);if(xaccurate) doxi+1=xi-g(xi)/h(xi);i+; Abc=xi-xi-1; while(i100);for(j=0;ji;j+)printf(x%d=%lf f(x%d)=%lfn ,j+1,xj,j+1,f(xj);五. 参考文献1龙熙华.数值分析M.西安:陕西科学技术出版社,2000.20-22.2数值分析简明教程-2 Editon -高等教育出版社 -page 136 -算法流程图3 谭浩强 C程序设计M 清华大学出版社 1999年12月第2版4 数值计算方法,冯天祥编著.四川科技出版社.20035 百度百科 牛顿迭代法 6 数值计算方法 杨一都编著. 高等教育出版社 2008.4【精品文档】第 6 页
限制150内