实验二插值法资料.docx
《实验二插值法资料.docx》由会员分享,可在线阅读,更多相关《实验二插值法资料.docx(23页珍藏版)》请在冰豆网上搜索。
![实验二插值法资料.docx](https://file1.bdocx.com/fileroot1/2023-1/24/13b0cfe3-4ed2-4695-ae0c-57513a6bbca6/13b0cfe3-4ed2-4695-ae0c-57513a6bbca61.gif)
实验二插值法资料
实验二插值法
实验2.1
(1)实验程序:
functioncharpt2_1
%输入插值结点
result=inputdlg({'请输入插值结点数N:
'},'charpt_2',1,{'2'})
N1=str2num(char(result));
result=inputdlg({'请输入区间下界:
'},'charpt_2',1,{'-1'})
N2=str2num(char(result));
result=inputdlg({'请输入区间上界:
'},'charpt_2',1,{'1'})
N3=str2num(char(result));
if(N1<1)errordlg('结点输入错误!
');return;end
%插值结点小于1时错误
f=inline('1./(1+25*x.^2)');a=N2;b=N3;
%标准函数f
x1=linspace(a,b,N1+1);
y1=feval(f,x1);
x=a:
0.001:
b;inter1=Lagrange(x1,y1,x);
fplot(f,[a,b],'r-');
%画标准函数f的图形
holdon;
plot(x,inter1,'b-');
%画插值逼近函数
legend('原函数','插值多项式函数')
xlabel('x');ylabel('y=f(x)oandy=Ln(x)--');
functiony=Lagrange(x0,y0,x)
n=length(x0);m=length(x);
fori=1:
m
z=x(i);
s=0.0;
fork=1:
n
p=1.0;
forj=1:
n
if(j~=k)
p=p*(z-x0(j))/(x0(k)-x0(j));
end
end
s=s+p*y0(k);
end
y(i)=s;
end
实验结果:
n=2n=3
n=5n=10
n=15n=20
实验分析:
多项式插值逼近结果如图所示,当结点数由3个结点增加为5个结点时,函数图形越接近,当插值结点增加到10时,曲线光滑,函数逼近效果在曲线的中间部分(-0.6,0.6)比较好,但是由上图在两个端点处x=-1和x=1附近时会出现在与原函数f(x)偏差会很大(龙格现象)。
可以看出,适当提高插值多项式次数,可以提高逼近的精度,但是太高反而会产生不良的现象。
(2)
实验程序:
functioncharpt2_2
%输入插值结点
result=inputdlg({'请输入插值结点数N:
'},'charpt_2',1,{'2'})
N1=str2num(char(result));
result=inputdlg({'请输入区间下界:
'},'charpt_2',1,{'-5'})
N2=str2num(char(result));
result=inputdlg({'请输入区间上界:
'},'charpt_2',1,{'5'})
N3=str2num(char(result));
if(N1<1)errordlg('结点输入错误!
');return;end
%插值结点小于1时错误
f=inline('x./(1+x.^4)');a=N2;b=N3;
%标准函数f
x1=linspace(a,b,N1+1);
y1=feval(f,x1);
x=a:
0.001:
b;inter1=Lagrange(x1,y1,x);
fplot(f,[a,b],'r-');
%画标准函数f的图形
holdon;
plot(x,inter1,'b-');
%画插值逼近函数
legend('原函数','插值多项式函数')
xlabel('x');ylabel('y=f(x)oandy=Ln(x)--');
functiony=Lagrange(x0,y0,x)
n=length(x0);m=length(x);
fori=1:
m
z=x(i);
s=0.0;
fork=1:
n
p=1.0;
forj=1:
n
if(j~=k)
p=p*(z-x0(j))/(x0(k)-x0(j));
end
end
s=s+p*y0(k);
end
y(i)=s;
end
实验结果:
n=2n=3
n=5n=10
n=15n=20
实验分析:
由实验结果可知,随着n值的增大,插值多项式函数在区间中部的拟合情况愈来愈好,而端点附近的则出现振荡的情况,且误差逐渐增大。
实验程序:
functioncharpt2_3
%输入插值结点
result=inputdlg({'请输入插值结点数N:
'},'charpt_2',1,{'2'})
N1=str2num(char(result));
result=inputdlg({'请输入区间下界:
'},'charpt_2',1,{'-5'})
N2=str2num(char(result));
result=inputdlg({'请输入区间上界:
'},'charpt_2',1,{'5'})
N3=str2num(char(result));
if(N1<1)errordlg('结点输入错误!
');return;end
%插值结点小于1时错误
f=inline('atan(x)');a=N2;b=N3;
%标准函数f
x1=linspace(a,b,N1+1);
y1=feval(f,x1);
x=a:
0.001:
b;inter1=Lagrange(x1,y1,x);
fplot(f,[a,b],'r-');
%画标准函数f的图形
holdon;
plot(x,inter1,'b-');
%画插值逼近函数
legend('原函数','插值多项式函数')
xlabel('x');ylabel('y=f(x)oandy=Ln(x)--');
functiony=Lagrange(x0,y0,x)
n=length(x0);m=length(x);
fori=1:
m
z=x(i);
s=0.0;
fork=1:
n
p=1.0;
forj=1:
n
if(j~=k)
p=p*(z-x0(j))/(x0(k)-x0(j));
end
end
s=s+p*y0(k);
end
y(i)=s;
end
实验结果:
n=2n=3
n=5n=10
n=15n=20
实验分析:
由实验结果可知,随着n值的增大,插值多项式函数在区间中部的拟合情况愈来愈好,而端点附近的则出现振荡的情况,且误差逐渐增大。
(3)
实验程序:
functioncharpt2_4
%输入插值结点
result=inputdlg({'请输入插值结点数N:
'},'charpt_2',1,{'2'})
N1=str2num(char(result));
result=inputdlg({'请输入区间下界:
'},'charpt_2',1,{'-1'})
N2=str2num(char(result));
result=inputdlg({'请输入区间上界:
'},'charpt_2',1,{'1'})
N3=str2num(char(result));
if(N1<1&N2');return;end
%插值结点小于1时错误
f=inline('1./(1+25*x.^2)');a=N2;b=N3;
%标准函数f
k=1:
N1+1
x1=(b+a)./2+((b-a)./2)*cos((2.*k-1).*pi/(2.*(N1+1)));
y1=feval(f,x1);
x=a:
0.001:
b;
inter1=Lagrange(x1,y1,x);
fplot(f,[a,b],'r-');
%画标准函数f的图形
holdon;
plot(x,inter1,'b-');
%画插值逼近函数
legend('原函数','插值多项式函数')
xlabel('x');ylabel('y=f(x)oandy=Ln(x)--');
functiony=Lagrange(x0,y0,x)
n=length(x0);m=length(x);
fori=1:
m
z=x(i);
s=0.0;
fork=1:
n
p=1.0;
forj=1:
n
if(j~=k)
p=p*(z-x0(j))/(x0(k)-x0(j));
end
end
s=s+p*y0(k);
end
y(i)=s;
end
实验结果:
n=2n=3
n=5n=10
n=15n=20
实验分析:
由实验结果可知,通过切比雪夫点的变换,随着n值的增大,插值多项式函数在区间中部的拟合情况愈来愈好,且端点的振荡现象消失,误差也不断下降。
实验程序:
functioncharpt2_5
%输入插值结点
result=inputdlg({'请输入插值结点数N:
'},'charpt_2',1,{'2'})
N1=str2num(char(result));
result=inputdlg({'请输入区间下界:
'},'charpt_2',1,{'-5'})
N2=str2num(char(result));
result=inputdlg({'请输入区间上界:
'},'charpt_2',1,{'5'})
N3=str2num(char(result));
if(N1<1&N2');return;end
%插值结点小于1时错误
f=inline('x./(1+x.^4)');a=N2;b=N3;
%标准函数f
k=1:
N1+1
x1=(b+a)./2+((b-a)./2)*cos((2.*k-1).*pi/(2.*(N1+1)));
y1=feval(f,x1);
x=a:
0.001:
b;
inter1=Lagrange(x1,y1,x);
fplot(f,[a,b],'r-');
%画标准函数f的图形
holdon;
plot(x,inter1,'b-');
%画插值逼近函数
legend('原函数','插值多项式函数')
xlabel('x');ylabel('y=f(x)oandy=Ln(x)--');
functiony=Lagrange(x0,y0,x)
n=length(x0);m=length(x);
fori=1:
m
z=x(i);
s=0.0;
fork=1:
n
p=1.0;
forj=1:
n
if(j~=k)
p=p*(z-x0(j))/(x0(k)-x0(j));
end
end
s=s+p*y0(k);
end
y(i)=s;
end
实验结果:
n=2n=3
n=5n=10
n=15n=20
实验分析:
由实验结果可知,通过切比雪夫点的变换,随着n值的增大,插值多项式函数在区间中部的拟合情况愈来愈好,且端点的振荡现象消失,误差也不断下降。
实验程序:
functioncharpt2_6
%输入插值结点
result=inputdlg({'请输入插值结点数N:
'},'charpt_2',1,{'2'})
N1=str2num(char(result));
result=inputdlg({'请输入区间下界:
'},'charpt_2',1,{'-5'})
N2=str2num(char(result));
result=inputdlg({'请输入区间上界:
'},'charpt_2',1,{'5'})
N3=str2num(char(result));
if(N1<1&N2');return;end
%插值结点小于1时错误
f=inline('atan(x)');a=N2;b=N3;
%标准函数f
k=1:
N1+1
x1=(b+a)./2+((b-a)./2)*cos((2.*k-1).*pi/(2.*(N1+1)));
y1=feval(f,x1);
x=a:
0.001:
b;
inter1=Lagrange(x1,y1,x);
fplot(f,[a,b],'r-');
%画标准函数f的图形
holdon;
plot(x,inter1,'b-');
%画插值逼近函数
legend('原函数','插值多项式函数')
xlabel('x');ylabel('y=f(x)oandy=Ln(x)--');
functiony=Lagrange(x0,y0,x)
n=length(x0);m=length(x);
fori=1:
m
z=x(i);
s=0.0;
fork=1:
n
p=1.0;
forj=1:
n
if(j~=k)
p=p*(z-x0(j))/(x0(k)-x0(j));
end
end
s=s+p*y0(k);
end
y(i)=s;
end
实验结果:
n=2n=3
n=5n=10
n=15n=20
实验分析:
由实验结果可知,通过切比雪夫点的变换,随着n值的增大,插值多项式函数在区间中部的拟合情况愈来愈好,且端点的振荡现象消失,误差也不断下降。
实验2.2
(1)考虑区间[-1,1]的一个等距划分,分点为
实验程序:
functioncharpt2_7
x1=[-1:
0.4:
1];y1=1./(1+25*x1.^2);
x2=[-1:
0.25:
1];y2=1./(1+25*x2.^2);
x3=[-1:
0.2:
1];y3=1./(1+25*x3.^2);
x0=[-1:
0.01:
1];
subplot(2,2,1)
y4=1./(1+25*x0.^2);
plot(x0,y4,'-b')
y0=spline(x1,y1,x0);
y1=1./(1+25*x0.^2);
subplot(2,2,2)
plot(x0,y0,'-b')
y0=spline(x2,y2,x0);
y2=1./(1+25*x0.^2);
subplot(2,2,3)
plot(x0,y0,'-b')
y0=spline(x3,y3,x0);
y3=1./(1+25*x0.^2);
subplot(2,2,4)
plot(x0,y0,'-b')
end
实验结果:
实验分析:
当采用五个插值函数的节点时和采用更多节点的三次样条函数对原函数进行插值拟合时,得到的函数都是光滑的。
并且随着插值节点的增多,也没有出现如实验2·1所示的随着点的增多而出现龙格现象。
并且可以看出,随着三次样条函数的分段的增多,插值函数的图像与原函数的图像越来越相似。
(2)对车门曲线进行三次样条插值
实验程序:
functioncharpt2_8
xi=0:
10;
yi=[0.0,0.79,1.53,2.19,2.71,3.03,3.27,2.89,3.06,3.19,3.29];
pp=csape(xi,yi,'second',[0.8,0.2]);
xj=0:
0.1:
10;
yj=ppval(pp,xj);
plot(xi,yi,'o')
holdon
plot(xj,yj,'-')
end
实验结果:
思考题:
实验程序:
functioncharpt2_9
x=100:
100:
400;
y=100:
100:
400;
z=[636697624478;
698712630478;
680674598412;
662626552334];
xi=100:
10:
400;
yi=100:
10:
400;
[xx,yy]=meshgrid(xi,yi);
zi=interp2(x,y,z,xx,yy,'spline');
subplot(1,2,1);
surf(x,y,z);
subplot(1,2,2);
surf(xx,yy,zi);
[i,j]=find(zi==max(max(zi)))
x=xi(i),y=yi(j),zmax=zi(i,j)
end
实验结果:
i=
9
j=
8
x=
180
y=
170
zmax=
720.9754
由计算可知,该丘陵地带最高点坐标为(180,170),该点的高程为720.9754。