分段线性插值.docx
《分段线性插值.docx》由会员分享,可在线阅读,更多相关《分段线性插值.docx(14页珍藏版)》请在冰点文库上搜索。
分段线性插值
《数值分析》课程设计
分段线性插值
郭阁阳
牛彦坡陈彬冯梦雨
指导教师
天津工程师范学院
课程设计任
理学
数学0702班学生
牛彦坡陈彬冯梦雨
课程设计课题:
考察分段线性插值
、课程设计工作日自2009年6月22日至2009年6月28日
三、课程设计任务要求(包括课题来源、类型、目的和意义、基本要求、参考资
料等):
来源与意义:
本课题来源于教材第二章插值法,目的是从几何意义掌握分段线性插值的思
想,加深对其的理解以及掌握用计算机与Matlab解决相关问题的能力。
基本要求:
要求自编程序;掌握编程思想,学会一门编程语言;报告要有较强的理论分
析;有较强说服力的数据表或图像;对结果进行分析;给出相应结论;鼓励创新;
参考资料:
1.数值分析,李庆扬,王能超,易大义,2001,清华大学出版社(第四版)。
2.数值方法,关治,陆金甫,2006,清华大学出版社。
3.数值分析与实验学习指导,蔡大用,2001,清华大学出版社。
4.数值分析与实验,薛毅,2005,北京工业大学出版社。
指导教师签字:
理学
教研室主任签字:
天津工程师范学院
程设计评审表
数学0702班学生牛彦坡陈彬冯梦雨设计任务完成情况及指导教师评语
评定成绩
成绩:
指导教师签字:
日期:
答辩情况
主任签字:
日期:
教研室主任:
日期:
问题提出:
考察分段线性插值:
对f(x)丄在(-5,5)上进行分段线性插值,取不同节点个数n,得到不同
1x
分段线性插值函数。
(要求:
自编程序,报告有数据表、图像、分析、结论。
)
虽然matlab里有直接分段线形插值的函数,但为了对分段插值算法有更明确
的理解,编写该程序是有必要的
需要解决的问题:
1、由已知数据节点编写分段线形插值函数,从而能由所编函数得到非节点的函数值。
2、比较用不同节点数所得插值函数与真实函数的误差,从而得出节点数与插值效果的关系
二、理论基础
所谓分段线性插值就是通过插值点用折线段连接起来逼近f(X)。
设已知节
点a=xovxiv…vxn=b上的函数值fo,fi,…,fn,求一折线函数满足:
3。
lh(x)在每个小区间[xk,Xk+1]上是线性函数。
则称lh(x)为分段线性插值函数。
模型一:
由定义可知lh(x)在每个小区间[Xk,Xk+l]上可表示为
xxk1xxk
Ih(x)=fkfk1(XkxXk1)
XkXk1Xk1Xk
模型二:
首先确定间隔序列k,使得:
第二个量是局部变量S,其定义为:
最后一个量是一阶均差
则插值基函数可表示为
三、实验内容
(1)原函数fdl.m
(3)比较不同节点数所得分段线性插值函数的插值效果fd3.m
2、选取插值节点数为偶数
在MATLAB窗口中执行:
fd3n=2的数据见附录,图像如下:
n=8的图如下:
n=20的图
(2)插值效果比较函数fd32(选取插值节点数为奇数)程序代码(参见附录)在MATLAB窗口中执行:
fd32
得下图:
上图为不同节点数插值函数图像与原函数图像,下图为误差图像
3、由上所有的图可看出,由于原函数是偶函数,等距节点所得插值函数有很强
对称性,下任取节点,
编写程序fd33.m,得图
上图为不同节点数插值函数图像与原函数图像,下图为误差图像
4、比较不同节点所得插值函数与被插函数误差的平方和,程序模板为d1.m
得下图:
红星由fd32得奇数节点误差平方和,绿星加圈由fd3得偶数节点误差平方和,圈由f33得随机节点误差平方和,数据见附录
四、结果分析
1、不同插值节点数所得的分段线形插值函数,在节点处与原函数的函数值
定相同
2、所得的分段线形插值函数在原函数斜率绝对值变化大的地方,与原函数
的误差比较大
3、由误差平方和e,插值节点个数越多,e有减小的趋势,最后趋于0。
单考虑奇数或偶数个节点,则随节点数增加e严格减小。
4、随机生成的节点不如等距节点使插值效果好。
五、结论
插值节点个数越多,分段线形插值函数与原函数误差平方和有减小趋势
插值效果越好。
六、参考文献
数值分析与实验》薛毅编著北京工业大学出版社
附录
代码如下:
%fd1.m线性插值原函数
functiony=fd1(x)
y=1丿(1+XA2);
%fd2.m分段线性插值函数functionyi=fd2(X,y,Xi)n=length(X);
m=length(y);ifn~=merror('X和丫向量的长度必须相同’);return;
end
fork=1:
n-1
ifabs(X(k)-X(k+1))return;
end
ifX(k)<=Xi&Xi<=X(k+1)%保证X(k)temp=X(k)-X(k+1);
yi=(Xi-X(k+1))/temp*y(k)+(Xi-X(k))/(-temp)*y(k+1)return;
end
end
%fd3.m比较插值效果
a=-5;
b=5;
n=input('请输入分端节点数:
');
ifn<=0
error('你输入的数据有误!
!
!
');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);
fork1=1:
m1z(k1)=fd2(x,y,xx(k1));endw=z-yyi;%计算误差subplot(2,1,1);plot(x,y,xlabel('x');ylabel('y');title('原函数(实线)-插值函数(虚线)');holdonsubplot(2,1,2);plot(xx,w,xlabel('x');ylabel('R(x)');title('误差分析');holdonxx=xx';yyi=yyi';z=z';w=w';
%fd22.m分段线性插值函数functionv=fd22(x,y,u)delta=diff(y)./diff(x);n=length(x);k=ones(size(u));
forj=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''cfori=1:
5n=2*i+1;x=linspace(-5,5,n);y=fd1(x);p=fd22(x,y,t);p=p';y1=fd1(t);y1=y1';e=p-y1;
'o',xx,yyi,
x,y,'k:
');%插值图像
'k:
');%误差的图像
'm'];
%把区间[-55]
%计算以(x,
%计算误差
subplot(2,1,1);plot(x,y,a(i));holdsubplot(2,1,2);plot(t,e,a(i));holdendsubplot(2,1,1);
分为(n—1)份,算插值节点
y)为插值点的插值函数在t处的各个值
on;%画出插值函数图像及误差图像on;
legend('n=3','n=5'subplot(2,1,2);
legend('n=3','n=5'subplot(2,1,1);fplot(@fd1,[-55],holdoff
'n=7'
'n=7'
'k');
'n=9','n=11')
'n=9','n=11')
%画出原函数图像
%fd33.m插值节点非等分区间获得closet=[-5:
0.01:
5];
a=['k''g''r''c''m'];fori=1:
5n=2*i+1;
x=[-5rand(1,n-2)*10-55];%
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));holdsubplot(2,1,2);plot(t,e,a(i));holdendsubplot(2,1,1);
legend('n=3','n=5'subplot(2,1,2);
legend('n=3','n=5'subplot(2,1,1);fplot(@fd1,[-55],holdoff
(-5,5)上的n维随机向量
on;on;
'n=7','n=9','n=11')
'n=7','n=9','n=11')
'k');
%fd1.m比较不同节点数误差平方和cleart=[-5:
0.01:
5];a=[];b=[];
fori=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=[ae];
b=[bn];
endplot(b,a,'go')xlabel('n节点数')
ylabel('e误差平方和')holdon
n=2的数据:
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
-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.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
-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.5000
0.3077
0.7115
-0.4038
-1.4000
0.3378
0.7308
-0.3929
-13000
03717
07500
-03783
-1.2000
0.4098
0.7692
-0.3594
-1.1000
0.4525
0.7885
-0.336
-10000
05000
08077
-03077
-0.9000
0.5525
0.8269
-0.2744
-0.8000
0.6098
0.8462
-0.2364
-0.7000
0.6711
0.8654
-0.1942
-06000
07353
08846
-01493
-0.5000
0.8000
0.9038
-0.1038
-0.4000
0.8621
0.9231
-0.061
-0.3000
0.9174
0.9423
-0.0249
-02000
09615
09615
0
-01000
09901
09808
00093
0
1.0000
1.0000
0
0.1000
0.9901
0.9808
0.0093
0.2000
0.9615
0.9615
0
0.3000
0.9174
0.9423
-0.0249
0.4000
0.8621
0.9231
-0.061
0.5000
0.8000
0.9038
-0.1038
0.6000
0.7353
0.8846
-0.1493
0.7000
0.6711
0.8654
-0.1942
0.8000
0.6098
0.8462
-0.2364
0.9000
0.5525
0.8269
-0.2744
1.0000
0.5000
0.8077
-0.3077
1.1000
0.4525
0.7885
-0.336
1.2000
0.4098
0.7692
-0.3594
1.3000
0.3717
0.7500
-0.3783
1.4000
0.3378
0.7308
-0.3929
1.5000
0.3077
0.7115
-0.4038
1.6000
0.2809
0.6923
-0.4114
1.7000
0.2571
0.6731
-0.416
1.8000
0.2358
0.6538
-0.418
1.9000
0.2169
0.6346
-0.4177
2.0000
0.2000
0.6154
-0.4154
2.1000
0.1848
0.5962
-0.4113
2.2000
0.1712
0.5769
-0.4057
2.3000
0.1590
0.5577
-0.3987
2.4000
0.1479
0.5385
-0.3905
2.5000
0.1379
0.5192
-0.3813
2.6000
0.1289
0.5000
-0.3711
2.7000
0.1206
0.4808
-0.3601
2.8000
0.1131
0.4615
-0.3484
2.9000
0.1063
0.4423
-0.336
3.0000
0.1000
0.4231
-0.3231
3.1000
0.0943
0.4038
-0.3096
3.2000
0.0890
0.3846
-0.2956
3.3000
0.0841
0.3654
-0.2813
3.4000
0.0796
0.3462
-0.2665
3.5000
0.0755
0.3269
-0.2515
3.6000
0.0716
0.3077
-0.2361
3.7000
0.0681
0.2885
-0.2204
3.8000
0.0648
0.2692
-0.2045
3.9000
0.0617
0.2500
-0.1883
4.0000
0.0588
0.2308
-0.1719
4.1000
0.0561
0.2115
-0.1554
42000
00536
01923
-01387
4.3000
0.0513
0.1731
-0.1218
4.4000
0.0491
0.1538
-0.1047
4.5000
0.0471
0.1346
-0.0876
4.6000
0.0451
0.1154
-0.0703
47000
00433
00962
-00528
4.8000
0.0416
0.0769
-0.0353
4.9000
0.0400
0.0577
-0.0177
50000
00385
00385
0
2
3
4
5
6
7
误差平方和
136.9209
79.1689
63.334
6.9775
23.7384
0.8329
10
11
12
13
14
误差平方和
9.0015
0.5726
3.6152
0.572
1.5676
0.4648
0.7472
n
15
16
17
18
19
20
21
误差平方和
0.3366
0.3945
0.2327
0.2291
0.1593
0.1438
0.1101