实验二插值法资料.docx

上传人:b****5 文档编号:7676606 上传时间:2023-01-25 格式:DOCX 页数:23 大小:783.03KB
下载 相关 举报
实验二插值法资料.docx_第1页
第1页 / 共23页
实验二插值法资料.docx_第2页
第2页 / 共23页
实验二插值法资料.docx_第3页
第3页 / 共23页
实验二插值法资料.docx_第4页
第4页 / 共23页
实验二插值法资料.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

实验二插值法资料.docx

《实验二插值法资料.docx》由会员分享,可在线阅读,更多相关《实验二插值法资料.docx(23页珍藏版)》请在冰豆网上搜索。

实验二插值法资料.docx

实验二插值法资料

实验二插值法

实验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。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1