资源描述
《计算方法》课程设计报告
学生姓名:
张学阳
学 号:
1009300132
陈 洋
1009300109
刘 睿
1009300122
学 院:
理学院
班 级:
数学101
题 目:
分段线性及三次埃尔米特插值通用程序
指导教师: 宋云飞 职称: 讲师
朱秀丽 讲师
尚宝欣 讲师
2012年12月30日
- 2 -
目 录
目 录 I
一、 摘要 1
二、 算法设计 2
2.1分段线性插值 2
2.2 分段三次埃尔米特插值 2
2.3 功能框图 3
三、 例题计算 4
四、误差及结果分析 9
4.1 例题误差分析 9
4.2 结点个数对插值结果的影响 9
五、总结及心得体会 12
参考文献 13
源程序 14
一、 摘要
分段线性插值与分段定义的线性插值,在相邻插值节点的区间上对应的是同一个线性函数。由于它们的表现形式不一样从而产生为两种不同的计算方法,相应的误差表现形式也不一样.拉格朗日插值余项利用f(x)的二阶导数,要f(x)的二阶导数存在,对于二阶导数不存在的情况不能估算出它的误差,所以适用范围比较小.现在我们可以利用一阶导数就估算出误差,给计算带来许多的方便。
为了避免高次插值可能出现的大幅度波动现象,在实际应用中通常采用分段低次插值来提高近似程度,比如可用分段线性插值或分段三次埃尔米特插值来逼近已知函数,但它们的总体光滑性较差。为了克服这一缺点,一种全局化的分段插值方法——三次样条插值成为比较理想的工具。
在代数插值过程中,人们为了获得较好的近似效果,通常情况下是增加插值节点数.由于二次插值比线性插值近似效果好,因此容易错误地认为插值多项式次数越高越好.事实上,随着插值节点的增多,插值多项式不一定收敛到被插值函数.。通过分段低次插值或样条插值可以得到较好的近似逼近函数,分段低次插值具有公式简单、运算量小、稳定性好、收敛性有保证等优点.随着子区间长度h取得足够小,分段低次插值总能满足所要求的精度.因此分段低次插值应用十分广泛.。分段线性插值是分段低次插值中常见的方法之一,在本文中对函数在(-5,5)上进行分段线性插值,取不同节点个数n,得到不同分段线性插值函数.并用MATLAB编写分段线性插值函数,最后比较用不同节点数所得插值函数与真实函数的误差,从而得出节点数与插值效果的关系。
二、算法设计
2.1 分段线性插值
分段线性插值就是通过插值点用折线段连接起来的逼近函数。设已知节点上的函数值记求一折线函数满足:
(1)
(2)
(3)在每个小区间上是线性函数.
则称为分段线性插值函数。
由定义可知在每个小区间上可表示为
分段线性插值的误差估计可利用插值余项公式
得到
或
其中由此还可得到
在上一致成立,故在上一致收敛到。
2.2 分段三次埃尔米特插值
分段线性插值函数的导数是间断的,若在节点上除已知函数值外还给出导数值这样就可构造一个导数连续的分段插值函数它满足条件:
(1)
(2);
(3)在每个小区间上是三次多项式。
根据两点三次插值多项式可知,在区间上的表达式为
上式对于成立。
利用三次埃尔米特插值多项式的余项可得误差估计
其中
2.3功能框图
程序可以通过输入插值函数,插值结点个数,来实现插值,还可以选择插值方式,具体框图如下
开 始
输入插值函数
选择插值方法
分段线性插值
分段埃尔米特插值
输入插值结点个数
是否继续
是
退 出
否
三、例题计算
1. 插值函数为
输入6个节点的分段线性插值
输入6个节点的分段三次埃尔米特插值
请输入插值函数:x^2+1
请选择插值法(1为分段线性插值,2为分段三次埃尔米特插值):>> 1
请输入插值节点数N=6
是否继续(1为继续):1
请输入插值函数:x^2
请选择插值法(1为分段线性插值,2为分段三次埃尔米特插值):>> 2
请输入插值节点数N=6
是否继续(1为继续):2
2.插值函数为
输入节点为8的分段线性插值
输入节点为8的分段三次埃尔米特插值
请输入插值函数:cos(x)
请选择插值法(1为分段线性插值,2为分段三次埃尔米特插值):>> 1
请输入插值节点数N=8
是否继续(1为继续):1
请选择插值法(1为分段线性插值,2为分段三次埃尔米特插值):>> 2
请输入插值节点数N=8
3.插值函数为
输入节点为10的分段线性插值
输入节点为10的分段线三次埃尔米特插值
请输入插值函数:exp(x)
请选择插值法(1为分段线性插值,2为分段三次埃尔米特插值):>> 1
请输入插值节点数N=10
是否继续(1为继续):1
请选择插值法(1为分段线性插值,2为分段三次埃尔米特插值):>> 2
请输入插值节点数N=10
四、误差及结果分析
4.1例题误差分析
1. 误差
n值取8,由分段线性插值余项公式
可得误差限为
由插值图像和误差可知误差结果较大
由分段三次埃尔米特插值余项公式
可得误差限为
误差为零因此分段三次埃尔米特插值较为精确
2. 误差
n值取10,分段线性插值误差限为
分段三次埃尔米特插值误差限为
由误差结果可知分段三次埃尔米特插值得到的结果更为精确
3. 误差
n值取12,分段线性插值误差限为
分段三次埃尔米特插值误差限为
由误差结果可知分段三次埃尔米特插值得到的结果更为精确
综上可知,同等条件下分段三次埃尔米特插值得到的结果更为精确
4.2结点个数对插值结果的影响
为了进一步研究误差与插值节点的关系,我们以例题3的分段三次埃尔米特插值为例
n值取4时,误差为15.0974,插值图像如下
n值取5时,误差为6.1839,插值图像如下
n值取6时,误差为2.9822,插值图像如下
n值取8时,误差为0.9436,插值图像如下
通过误差限和得到的图像可知,插值节点越多,得到的图像越精确。
五、总结及心得体会
刚看到题目时,心里一片茫然不知该如何下手,因为计算方法的课程设计和之前做的课程设计有很大的不同,特别是不知论文该写哪些东西,后来通过查阅书籍和网络搜索同类论文了解了它的写作内容。总是有很多的问题存在,只是大多时候都隐藏了起来,当我们发现问题时,应该以平常的心态去对待,着急是没有用的,我们要做的就是在最短的时间内找出解决的办法。在学习计算方法课程的时候,发现它确实不好学,只是应付考试就尚且有些费劲,要想真正弄精就更是困难了,不过这也是没有办法的事,毕竟就是有很多东西很难理解甚至是理解不了的,要想比别人更厉害,就得花些时间在难以理解的问题上。在做课设时有些同学做了界面现一想还急火攻心,开始自己也想着做一下界面,可是有难度,不得不佩服那些能人,既然那东西不会,就只能乖乖用自己会的了。有时候我不得不再次钦佩自己的团队协作能力,同样又是和不同的人组队,依旧是碰撞出激情的火花,我只想说团结就是力量。我们最大的敌人是我们自己,我一直深信,在做的过程中,脑海中一直在想别人做的怎么样了,是不是比自己做的更好,当静下心来时,才恢复过来,管别人干什么,尽自己最大的努力把东西最好不就可以了吗,相信自己一定能做好。
有一个伟人曾说过如果给他一把斧头用六个小时去砍柴,他会用四个钟头取磨这把斧头,课设前的准备是很重要的,还好,通过学习计算方法了解了许多计算方法的知识。我们学习的知识有很多是模糊的,当在规定的时间去完成任务是,我们所要做的就是把可能用到的知识拾起来或是尽快学会一种方法来解决它,这是一种能力,是需要我们通过锻炼去提高的。
15
参考文献
[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==1
N=input('请输入插值节点数N=');
xx=-5:10/N:5;
ff=zeros(1,length(xx));
for i=1:(N+1)
x=xx(i);
ff(i)=eval(f);
end
M = -5:0.01:5;
output = zeros(1,length(M));
n = 1;
for i=2:N+1
for x=-5:0.01:5
if 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;
end
end
end
ezplot(f,[-5,5])
hold on
A =-5:0.01:5;
plot(A,output,'r');
end
if B==2
N=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);
end
M = -5:0.01:5;
output = zeros(1,length(M));
n = 1;
for i=2:N+1
for x=-5:0.01:5
if 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;
end
end
end
ezplot(f,[-5,5])
hold on
A =-5:0.01:5;
plot(A,output,'r');
end
if B~=1&&B~=2
disp('输入有误,请重新输入')
end
c=input('是否继续(1为继续):');
close
end
注:设计报告撰写说明
一、正文内容要求:
正文内容层次序号为: 1、1.1、1.1.1……。
正文内容一般为:
1、选题背景:说明本课题应解决的主要问题及应达到的技术要求;简述本设计的指导思想。
2、方案论证(设计理念):说明设计原理(理念)并进行方案选择,阐明为什么要选择这个设计方案以及所采用方案的特点。
3、过程论述:对设计工作的详细表述。要求层次分明、表达确切。
4、结果分析:对研究过程中所获得的主要的数据、现象进行定性或定量分析,得出结论和推论。
5、结论或总结:对整个研究工作进行归纳和综合。
6、课程设计心得体会。
二、图表、公式要求:
课程设计说明书(报告)中图表、公式一律采用阿拉伯数字连续编号。图序及图名置于图的下方;表序及表名置于表的上方;说明书(报告)中的公式编号,用括号括起来写在右边行末,其间不加虚线。
三、格式要求:
页边距:上2cm,下2cm,左2.5cm、右2cm;
行 距:固定值20磅;
页 码:底部居中;
字 体:正文宋体小四号字;文中英文用新罗马体小四号字;源程序清单用英文新罗马五号字。
每个自然段开始空两格;
报告的字数不少于3000(不包括程序清单和图);
按规定的模板封面输出,不准自定义封面格式。
展开阅读全文