《计算方法》课程设计报告学生姓名:张学阳学号:1009300132陈洋1009300109刘睿1009300122 学院:理学院班级: 数学101题目: 分段线性及三次埃尔米特插值通用程序指导教师:宋云飞职称:讲师朱秀丽讲师尚宝欣讲师2012年12月30日目录目录 (I)一、摘要 (1)二、算法设计 (1)2.1分段线性插值 (1)2.2分段三次埃尔米特插值 (1)2.3功能框图 (1)三、例题计算 (1)四、误差及结果分析 (9)4.1例题误差分析 (1)4.2结点个数对插值结果的影响 (1)五、总结及心得体会 (12)参考文献 (13)源程序 (14)一、摘要分段线性插值与分段定义的线性插值,在相邻插值节点的区间上对应的是同一个线性函数。
由于它们的表现形式不一样从而产生为两种不同的计算方法,相应的误差表现形式也不一样.拉格朗日插值余项利用f(x)的二阶导数,要f(x)的二阶导数存在,对于二阶导数不存在的情况不能估算出它的误差,所以适用范围比较小.现在我们可以利用一阶导数就估算出误差,给计算带来许多的方便。
为了避免高次插值可能出现的大幅度波动现象,在实际应用中通常采用分段低次插值来提高近似程度,比如可用分段线性插值或分段三次埃尔米特插值来逼近已知函数,但它们的总体光滑性较差。
为了克服这一缺点,一种全局化的分段插值方法——三次样条插值成为比较理想的工具。
在代数插值过程中,人们为了获得较好的近似效果,通常情况下是增加插值节点数.由于二次插值比线性插值近似效果好,因此容易错误地认为插值多项式次数越高越好.事实上,随着插值节点的增多,插值多项式不一定收敛到被插值函数.。
通过分段低次插值或样条插值可以得到较好的近似逼近函数,分段低次插值具有公式简单、运算量小、稳定性好、收敛性有保证等优点.随着子区间长度h取得足够小,分段低次插值总能满足所要求的精度.因此分段低次插值应用十分广泛.。
分段线性插值是分段低次插值中常见的方法之一,在本文中对函数在(-5,5)上进行分段线性插值,取不同节点个数n,得到不同分段线性插值函数.并用MATLAB编写分段线性插值函数,最后比较用不同节点数所得插值函数与真实函数的误差,从而得出节点数与插值效果的关系。
二、算法设计2.1 分段线性插值分段线性插值就是通过插值点用折线段连接起来的逼近函数)(x f 。
设已知节点b x x x a n =<<= 10上的函数值,,,,10n f f f 记,1k k k x x h -=+,max k h h =求一折线函数)(x I h 满足:(1)];,[)(b a C x I h ∈(2));,,1,0()(n k f x I k k h ==(3))(x I h 在每个小区间],[1+k k x x 上是线性函数. 则称)(x I h 为分段线性插值函数。
由定义可知)(x I h 在每个小区间],[1+k k x x 上可表示为.1,,1,0,,)(11111-=≤≤--+--=+++++n k x x x f x x x x f x x x x x I k k k kk kk k k k h分段线性插值的误差估计可利用插值余项公式)()()()(11112x l y x l y x l y x L k k k k k k ++--++=得到|))((|max 2|)()(|max 1211+≤≤≤≤--≤-+=k k x x x h x x x x x x x M x I x f k k kx k 或228|)()(|max h M x I x f h bx a ≤-≤≤ 其中.|)(''|max 2x f M bx a ≤≤=由此还可得到)()(lim 0x f x I h h =→在],[b a 上一致成立,故)(x I h 在],[b a 上一致收敛到)(x f 。
2.2 分段三次埃尔米特插值分段线性插值函数)(x I h 的导数是间断的,若在节点),,1,0(n k x k =上除已知函数值kf 外还给出导数值),,1,0('n k m f k k ==这样就可构造一个导数连续的分段插值函数),(x I h 它满足条件:(1)];,[')(b a C x I h ∈(2)),,1,0(')(',)(n k f x I f x I k k h k k h ===; (3))(x I h 在每个小区间],[1+k k x x 上是三次多项式。
根据两点三次插值多项式可知,)(x I h 在区间],[1+k k x x 上的表达式为111211211)21()()21()()(+++++++--+--+--+--=k k x k k k k k k k k x k k h f x x x x x x x x f x x x x x x x x x I')()(')()(1121211+++++---+---+k k kk k k k k k k f x x x x x x f x x x x x x上式对于1,,1,0-=n k 成立。
利用三次埃尔米特插值多项式的余项可得误差估计],[|,)(|max 3841|)()(|1)4(41+≤≤∈≤-+k k z x x k h x x x x f h x I x f k k 其中k k k x x h -=+12.3功能框图程序可以通过输入插值函数,插值结点个数,来实现插值,还可以选择插值方式,具体框图如下三、例题计算1.插值函数为1xf=x)(2+输入6个节点的分段线性插值输入6个节点的分段三次埃尔米特插值请输入插值函数:x^2+1请选择插值法(1为分段线性插值,2为分段三次埃尔米特插值):>> 1 请输入插值节点数N=6是否继续(1为继续):1请输入插值函数:x^2请选择插值法(1为分段线性插值,2为分段三次埃尔米特插值):>> 2 请输入插值节点数N=6是否继续(1为继续):22.插值函数为)fx(xcos()输入节点为8的分段线性插值输入节点为8的分段三次埃尔米特插值请输入插值函数:cos(x)请选择插值法(1为分段线性插值,2为分段三次埃尔米特插值):>> 1 请输入插值节点数N=8是否继续(1为继续):1请选择插值法(1为分段线性插值,2为分段三次埃尔米特插值):>> 2 请输入插值节点数N=83.插值函数为x e(x)f输入节点为10的分段线性插值输入节点为10的分段线三次埃尔米特插值请输入插值函数:exp(x)请选择插值法(1为分段线性插值,2为分段三次埃尔米特插值):>> 1 请输入插值节点数N=10是否继续(1为继续):1请选择插值法(1为分段线性插值,2为分段三次埃尔米特插值):>> 2 请输入插值节点数N=10四、误差及结果分析4.1例题误差分析1. 1)(2+=x x f 误差n 值取8,由分段线性插值余项公式|))((|max 2|)()(|max 1211+≤≤≤≤--≤-+=k k x x x h x x x x x x x M x I x f k k kx k 可得误差限为25.18102)(''max =⨯x f 由插值图像和误差可知误差结果较大由分段三次埃尔米特插值余项公式],[|,)(|max 3841|)()(|1)4(41+≤≤∈≤-+k k z x x k h x x x x f h x I x f k k 可得误差限为00)(384141=⨯-+k k x x 误差为零因此分段三次埃尔米特插值较为精确2. )cos()(x x f =误差n 值取10,分段线性插值误差限为2110102)(''max =⨯x f 分段三次埃尔米特插值误差限为38411)(384141=⨯-+k k x x 由误差结果可知分段三次埃尔米特插值得到的结果更为精确3. x e x f =)(误差n 值取12,分段线性插值误差限为61.838812512102)(''max 5==⨯e x f 分段三次埃尔米特插值误差限为0.1864)65(3841)(384154541=⨯⨯=⨯-+e e x x k k 由误差结果可知分段三次埃尔米特插值得到的结果更为精确综上可知,同等条件下分段三次埃尔米特插值得到的结果更为精确4.2结点个数对插值结果的影响为了进一步研究误差与插值节点的关系,我们以例题3的分段三次埃尔米特插值为例n 值取4时,误差为15.0974,插值图像如下n值取5时,误差为6.1839,插值图像如下n值取6时,误差为2.9822,插值图像如下n值取8时,误差为0.9436,插值图像如下通过误差限和得到的图像可知,插值节点越多,得到的图像越精确。
五、总结及心得体会刚看到题目时,心里一片茫然不知该如何下手,因为计算方法的课程设计和之前做的课程设计有很大的不同,特别是不知论文该写哪些东西,后来通过查阅书籍和网络搜索同类论文了解了它的写作内容。
总是有很多的问题存在,只是大多时候都隐藏了起来,当我们发现问题时,应该以平常的心态去对待,着急是没有用的,我们要做的就是在最短的时间内找出解决的办法。
在学习计算方法课程的时候,发现它确实不好学,只是应付考试就尚且有些费劲,要想真正弄精就更是困难了,不过这也是没有办法的事,毕竟就是有很多东西很难理解甚至是理解不了的,要想比别人更厉害,就得花些时间在难以理解的问题上。
在做课设时有些同学做了界面现一想还急火攻心,开始自己也想着做一下界面,可是有难度,不得不佩服那些能人,既然那东西不会,就只能乖乖用自己会的了。
有时候我不得不再次钦佩自己的团队协作能力,同样又是和不同的人组队,依旧是碰撞出激情的火花,我只想说团结就是力量。
我们最大的敌人是我们自己,我一直深信,在做的过程中,脑海中一直在想别人做的怎么样了,是不是比自己做的更好,当静下心来时,才恢复过来,管别人干什么,尽自己最大的努力把东西最好不就可以了吗,相信自己一定能做好。
有一个伟人曾说过如果给他一把斧头用六个小时去砍柴,他会用四个钟头取磨这把斧头,课设前的准备是很重要的,还好,通过学习计算方法了解了许多计算方法的知识。
我们学习的知识有很多是模糊的,当在规定的时间去完成任务是,我们所要做的就是把可能用到的知识拾起来或是尽快学会一种方法来解决它,这是一种能力,是需要我们通过锻炼去提高的。
参考文献[1]李庆扬,王能超,易大义.数值分析(第5版).北京:清华大学出版社,2008.[2]李庆扬,关治,白峰杉.数值计算原理.北京:清华大学出版社,2000.[3]李海,邓樱.MATLAB程序设计教程.北京:高等教育出版社,2002.[4]张学敏,倪虹霞. MATLAB基础及应用. 中国电力出版社,2009.[5]易大义, 沈云宝, 李有法. 计算方法[M]. 浙江大学出版社, 2002.源程序c=1;while(c==1)syms f x lx;f=input('请输入插值函数');B=input('请选择插值法(1为分段线性插值,2为分段三次埃尔米特插值):'); if B==1N=input('请输入插值节点数N=');xx=-5:10/N:5;ff=zeros(1,length(xx));for i=1:(N+1)x=xx(i);ff(i)=eval(f);endM = -5:0.01:5;output = zeros(1,length(M));n = 1;for i=2:N+1for x=-5:0.01:5if x<xx(i) && x>=xx(i-1)lx(1)=ff(i-1)*(x-xx(i))/(xx(i-1)-xx(i));lx(2)=ff(i)*(x-xx(i-1))/(xx(i)-xx(i-1));output(n) = lx(1)+lx(2);n = n+1;endendendezplot(f,[-5,5])hold onA =-5:0.01:5;plot(A,output,'r');endif B==2N=input('请输入插值节点数N=');f1=diff(f);xx=-5:10/N:5;ff=zeros(1,length(xx));for i=1:(N+1)x=xx(i);ff(i)=eval(f);ff1(i)=eval(f1);endM = -5:0.01:5;output = zeros(1,length(M));n = 1;for i=2:N+1for x=-5:0.01:5if x<xx(i) && x>=xx(i-1)lx(1)=ff(i-1)*(x-xx(i))^2/(xx(i-1)-xx(i))^2*(1+2*(x-xx(i-1))/(xx(i)-xx(i-1)));lx(2)=ff(i)*(x-xx(i-1))^2/(xx(i)-xx(i-1))^2*(1+2*(x-xx(i))/(xx(i-1)-xx(i)));lx(3)=ff1(i-1)*(x-xx(i))^2/(xx(i-1)-xx(i))^2*(x-xx(i-1));lx(4)=ff1(i)*(x-xx(i-1))^2/(xx(i)-xx(i-1))^2*(x-xx(i));output(n) = lx(1)+lx(2)+lx(3)+lx(4);n = n+1;endendendezplot(f,[-5,5])hold onA =-5:0.01:5;plot(A,output,'r');endif B~=1&&B~=2disp('输入有误,请重新输入')endc=input('是否继续(1为继续):');closeend注:设计报告撰写说明一、正文内容要求:正文内容层次序号为:1、1.1、1.1.1……。