1、 数值分析课程设计题 目 分段线性插值 学 生 牛彦坡 陈彬 冯梦雨 指导教师 郭阁阳 - 1 -天津工程师范学院课 程 设 计 任 务 书理学 院 数学 0702 班 学生 牛彦坡 陈彬 冯梦雨 课程设计课题:考察分段线性插值一、课程设计工作日自 2009 年 6 月 22 日至 2009 年 6 月 28 日二、同组学生: 牛彦坡 陈彬 冯梦雨 三、课程设计任务要求(包括课题来源、类型、目的和意义、基本要求、参考资料等): 来源与意义:本课题来源于教材第二章插值法,目的是从几何意义掌握分段线性插值的思想,加深对其的理解以及掌握用计算机与 Matlab 解决相关问题的能力。 基本要求:要求自
2、编程序;掌握编程思想,学会一门编程语言;报告要有较强的理论分析;有较强说服力的数据表或图像;对结果进行分析;给出相应结论;鼓励创新; 参考资料:1. 数值分析,李庆扬,王能超,易大义,2001,清华大学出版社(第四版)。2. 数值方法,关治,陆金甫,2006,清华大学出版社。3. 数值分析与实验学习指导,蔡大用,2001,清华大学出版社。4. 数值分析与实验,薛毅,2005,北京工业大学出版社。- 2 -指导教师签字: 教研室主任签字:天津工程师范学院课 程 设 计 评 审 表理学 院 数学 0702 班 学生 牛彦坡 陈彬 冯梦雨 设计任务完成情况及指导教师评语答辩情况评定成绩成绩: 指导教
3、师签字: 日期: - 3 -教研室主任: 主任签字: 日期: 日期: 一、 问题提出:考察分段线性插值:对 在(-5,5)上进行分段线性插值,取不同节点个数 ,得到不21()fx n同分段线性插值函数。 (要求:自编程序,报告有数据表、图像、分析、结论。)虽然 matlab 里有直接分段线形插值的函数,但为了对分段插值算法有更明确的理解,编写该程序是有必要的需要解决的问题:1、由已知数据节点编写分段线形插值函数,从而能由所编函数得到非节点的函数值。2、比较用不同节点数所得插值函数与真实函数的误差,从而得出节点数与插值效果的关系二、理论基础所谓分段线性插值就是通过插值点用折线段连接起来逼近 f(
4、x) 。设已知节点 a=x0x1xn=b 上的函数值 f0,f 1,f n , 求一折线函数满足:1o ,)(baCxIh2o ,kf),10(n3o 在每个小区间x k,xk+1上是线性函数。)(xIh- 4 -则称 为分段线性插值函数。)(xIh模型一:由定义可知 在每个小区间x k,xk+1上可表示为)(xIh= h 111kkkfxf )(1kkx模型二:首先确定间隔序列 k,使得: 1kk第二个量是局部变量 s,其定义为 : kxs最后一个量是一阶均差 kkxy1则插值基函数可表示为.kkkxyyxL1)()( ks三、实验内容1、模型一: 用 MATLAB 分别建立 m 文件:(1
5、)原函数 fd1.m(2)分段线性插值函数 fd2.m(3)比较不同节点数所得分段线性插值函数的插值效果 fd3.m2、选取插值节点数为偶数在 MATLAB 窗口中执行:fd3 n=2 的数据见附录,图像如下:- 5 -5 -4 -3 -2 -1 0 1 2 3 4 500.51xy值值值(值值)-值值值值值值值值-5 -4 -3 -2 -1 0 1 2 3 4 5-1-0.50xR值x值值值值值n=8 的图如下:-5 -4 -3 -2 -1 0 1 2 3 4 500.51xy值 值 值 (值 值 )-值 值 值 值 值 值 值 值-5 -4 -3 -2 -1 0 1 2 3 4 5-0.4
6、-0.200.20.4xR值x值值 值 值 值n=20 的图- 6 -5 -4 -3 -2 -1 0 1 2 3 4 500.51xy值值值(值值)-值值值值值值值值-5 -4 -3 -2 -1 0 1 2 3 4 5-0.1-0.0500.050.1xR值x值值值值值3、模型二:用 MATLAB 分别建立 m 文件:(1)分段插值函数 fd22(2)插值效果比较函数 fd32(选取插值节点数为奇数)程序代码(参见附录)在 MATLAB 窗口中执行:fd32得下图:上图为不同节点数插值函数图像与原函数图像,下图为误差图像- 7 -5 -4 -3 -2 -1 0 1 2 3 4 500.20.4
7、0.60.81-5 -4 -3 -2 -1 0 1 2 3 4 5-0.200.20.40.6n=3n=5n=7n=9n=11n=3n=5n=7n=9n=113、由上所有的图可看出,由于原函数是偶函数,等距节点所得插值函数有很强对称性,下任取节点,编写程序 fd33.m,得图上图为不同节点数插值函数图像与原函数图像,下图为误差图像- 8 -5 -4 -3 -2 -1 0 1 2 3 4 500.20.40.60.81-5 -4 -3 -2 -1 0 1 2 3 4 5-1-0.500.5n=3n=5n=7n=9n=11n=3n=5n=7n=9n=114、比较不同节点所得插值函数与被插函数误差的
8、平方和,程序模板为 d1.m得下图:红星由 fd32 得奇数节点误差平方和,绿星加圈由 fd3 得偶数节点误差平方和,圈由 f33 得随机节点误差平方和,数据见附录0 5 10 15 20 25020406080100120140n值值值e值值值值值- 9 -四、结果分析1、不同插值节点数所得的分段线形插值函数,在节点处与原函数的函数值一定相同2、所得的分段线形插值函数在原函数斜率绝对值变化大的地方,与原函数的误差比较大3、由误差平方和 e,插值节点个数越多, e 有减小的趋势,最后趋于 0。单考虑奇数或偶数个节点,则随节点数增加 e 严格减小。4、随机生成的节点不如等距节点使插值效果好。五、
9、结论插值节点个数越多,分段线形插值函数与原函数误差平方和有减小趋势,插值效果越好。六、参考文献数值分析与实验 薛 毅 编著 北京工业大学出版社附录代码如下:% fd1.m线性插值原函数function y=fd1(x)y=1./(1+x.2);% fd2.m 分段线性插值函数function yi=fd2(x,y,xi)n=length(x);m=length(y);if n=merror(X和Y向量的长度必须相同);return;end- 10 -for k=1:n-1if abs(x(k)-x(k+1)eps % x(k)-x(k+1) 的绝对值 必须大于eerror(数据有误);retu
10、rn;endif x(k)=xiyi=(xi-x(k+1)/temp*y(k)+(xi-x(k)/(-temp)*y(k+1)return;endend% fd3.m 比较插值效果a=-5;b=5;n=input(请输入分端节点数:);if n=0error(你输入的数据有误!);break;endh=(b-a)/(n-1); % 求节点x=a:h:b;y=fd1(x);xx=a:0.1:b; % 用分段线性插值函数求非节点函数值yyi=fd1(xx);m1=length(xx);z=zeros(1,m1);for k1=1:m1z(k1)=fd2(x,y,xx(k1);endw=z-yyi;
11、 % 计算误差subplot(2,1,1);plot(x,y,o,xx,yyi,-,x,y,k:);%插值图像xlabel(x);ylabel(y);title(原函数(实线)-插值函数(虚线));hold onsubplot(2,1,2);plot(xx,w,k:); % 误差的图像xlabel(x);ylabel(R(x));- 11 -title(误差分析);hold onxx=xx;yyi=yyi;z=z;w=w;% fd22.m 分段线性插值函数function v=fd22(x,y,u)delta=diff(y)./diff(x);n=length(x);k=ones(size(u
12、);for j=2:n-1k(x(j)=u)=j;ends=u-x(k);v=y(k)+s.*delta(k); % fd32.m 同时画不同节点的插值函数图像和误差图像clearcloset=-5:0.01:5;a=k g r c m;for i=1:5n=2*i+1;x=linspace(-5,5,n); %把区间-5 5分为(n1)份,算插值节点y=fd1(x); p=fd22(x,y,t);p=p; %计算以(x,y)为插值点的插值函数在t处的各个值y1=fd1(t);y1=y1; e=p-y1; %计算误差subplot(2,1,1);plot(x,y,a(i);hold on; %
13、画出插值函数图像及误差图像subplot(2,1,2);plot(t,e,a(i);hold on;end subplot(2,1,1);legend(n=3,n=5,n=7,n=9,n=11)subplot(2,1,2);legend(n=3,n=5,n=7,n=9,n=11)subplot(2,1,1);fplot(fd1,-5 5,k); %画出原函数图像hold off- 12 -%fd33.m 插值节点非等分区间获得closet=-5:0.01:5;a=k g r c m;for i=1:5n=2*i+1;x=-5 rand(1,n-2)*10-5 5; %得(-5,5)上的n维随机
14、向量x=sort(x);y=fd1(x);p=fd22(x,y,t);p=p;y1=fd1(t);y1=y1;e=p-y1;subplot(2,1,1);plot(x,y,a(i);hold on;subplot(2,1,2);plot(t,e,a(i);hold on;endsubplot(2,1,1);legend(n=3,n=5,n=7,n=9,n=11)subplot(2,1,2);legend(n=3,n=5,n=7,n=9,n=11)subplot(2,1,1);fplot(fd1,-5 5,k);hold off%fd1.m 比较不同节点数误差平方和cleart=-5:0.01:
15、5;a=;b=;for i=1:10 n=2*i; %n=2*i+1则是奇数节点x=linspace(-5,5,n)y=fd1(x);p=fd22(x,y,t);y1=fd1(t);e=p-y1;e=e*e;a=a e;b=b n;endplot(b,a,go)xlabel(n节点数)ylabel(e误差平方和)hold onn=2的数据:- 13 -X Y YI(原函数) W-5.0000 0.0385 0.0385 0-4.9000 0.0400 0.0577 -0.0177-4.8000 0.0416 0.0769 -0.0353-4.7000 0.0433 0.0962 -0.0528
16、-4.6000 0.0451 0.1154 -0.0703-4.5000 0.0471 0.1346 -0.0876-4.4000 0.0491 0.1538 -0.1047-4.3000 0.0513 0.1731 -0.1218-4.2000 0.0536 0.1923 -0.1387-4.1000 0.0561 0.2115 -0.1554-4.0000 0.0588 0.2308 -0.1719-3.9000 0.0617 0.2500 -0.1883-3.8000 0.0648 0.2692 -0.2045-3.7000 0.0681 0.2885 -0.2204-3.6000 0.
17、0716 0.3077 -0.2361-3.5000 0.0755 0.3269 -0.2515-3.4000 0.0796 0.3462 -0.2665-3.3000 0.0841 0.3654 -0.2813-3.2000 0.0890 0.3846 -0.2956-3.1000 0.0943 0.4038 -0.3096-3.0000 0.1000 0.4231 -0.3231-2.9000 0.1063 0.4423 -0.336-2.8000 0.1131 0.4615 -0.3484-2.7000 0.1206 0.4808 -0.3601-2.6000 0.1289 0.5000
18、 -0.3711-2.5000 0.1379 0.5192 -0.3813-2.4000 0.1479 0.5385 -0.3905-2.3000 0.1590 0.5577 -0.3987-2.2000 0.1712 0.5769 -0.4057-2.1000 0.1848 0.5962 -0.4113-2.0000 0.2000 0.6154 -0.4154-1.9000 0.2169 0.6346 -0.4177-1.8000 0.2358 0.6538 -0.418-1.7000 0.2571 0.6731 -0.416-1.6000 0.2809 0.6923 -0.4114-1.5
19、000 0.3077 0.7115 -0.4038-1.4000 0.3378 0.7308 -0.3929-1.3000 0.3717 0.7500 -0.3783-1.2000 0.4098 0.7692 -0.3594-1.1000 0.4525 0.7885 -0.336-1.0000 0.5000 0.8077 -0.3077-0.9000 0.5525 0.8269 -0.2744-0.8000 0.6098 0.8462 -0.2364-0.7000 0.6711 0.8654 -0.1942-0.6000 0.7353 0.8846 -0.1493-0.5000 0.8000
20、0.9038 -0.1038-0.4000 0.8621 0.9231 -0.061-0.3000 0.9174 0.9423 -0.0249-0.2000 0.9615 0.9615 0-0.1000 0.9901 0.9808 0.00930 1.0000 1.0000 00.1000 0.9901 0.9808 0.00930.2000 0.9615 0.9615 00.3000 0.9174 0.9423 -0.0249- 14 -0.4000 0.8621 0.9231 -0.0610.5000 0.8000 0.9038 -0.10380.6000 0.7353 0.8846 -0
21、.14930.7000 0.6711 0.8654 -0.19420.8000 0.6098 0.8462 -0.23640.9000 0.5525 0.8269 -0.27441.0000 0.5000 0.8077 -0.30771.1000 0.4525 0.7885 -0.3361.2000 0.4098 0.7692 -0.35941.3000 0.3717 0.7500 -0.37831.4000 0.3378 0.7308 -0.39291.5000 0.3077 0.7115 -0.40381.6000 0.2809 0.6923 -0.41141.7000 0.2571 0.
22、6731 -0.4161.8000 0.2358 0.6538 -0.4181.9000 0.2169 0.6346 -0.41772.0000 0.2000 0.6154 -0.41542.1000 0.1848 0.5962 -0.41132.2000 0.1712 0.5769 -0.40572.3000 0.1590 0.5577 -0.39872.4000 0.1479 0.5385 -0.39052.5000 0.1379 0.5192 -0.38132.6000 0.1289 0.5000 -0.37112.7000 0.1206 0.4808 -0.36012.8000 0.1
23、131 0.4615 -0.34842.9000 0.1063 0.4423 -0.3363.0000 0.1000 0.4231 -0.32313.1000 0.0943 0.4038 -0.30963.2000 0.0890 0.3846 -0.29563.3000 0.0841 0.3654 -0.28133.4000 0.0796 0.3462 -0.26653.5000 0.0755 0.3269 -0.25153.6000 0.0716 0.3077 -0.23613.7000 0.0681 0.2885 -0.22043.8000 0.0648 0.2692 -0.20453.9
24、000 0.0617 0.2500 -0.18834.0000 0.0588 0.2308 -0.17194.1000 0.0561 0.2115 -0.15544.2000 0.0536 0.1923 -0.13874.3000 0.0513 0.1731 -0.12184.4000 0.0491 0.1538 -0.10474.5000 0.0471 0.1346 -0.08764.6000 0.0451 0.1154 -0.07034.7000 0.0433 0.0962 -0.05284.8000 0.0416 0.0769 -0.03534.9000 0.0400 0.0577 -0.01775.0000 0.0385 0.0385 0n 2 3 4 5 6 7误差平方和 136.9209 79.1689 63.334 6.9775 23.7384 0.8329n 8 9 10 11 12 13 14误差平方和 9.0015 0.5726 3.6152 0.572 1.5676 0.4648 0.7472n 15 16 17 18 19 20 21误差平方和 0.3366 0.3945 0.2327 0.2291 0.1593 0.1438 0.1101- 15 -