matlab实现拉格朗日插值,多项式插值,邻近插值,线性插值 程序

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

题 7:一维函数插值算法

课题内容:

课题 7:一维函数插值算法

课题内容:对函数||

e-

y x

=,取[-5,5]之间步长为 1 的值

*

10

作为粗值,以步长

0.1 作为细值,编写程序实现插值算法:最邻近插值算法,线性插

值算法和三次多项式函数插值算法,并对比插值效果。

课题要求:

1、设计良好的人机交互 GUI 界面。

2、自己编写实现插值算法。

3、在同一个图形窗口显示对比最后的插值效果。

附录

一、界面设计

二、图像结果

三、程序设计

1、线性插值

function pushbutton1_Callback(hObject, eventdata, handles) x=-5:5;

y=10*exp(-abs(x));

f1=[];

for x1=-5:0.1:5

a=(x1-floor(x1));%请读者认真逐一带入推导

if x1==floor(x1)

f1=[f1,y(floor(x1)+6)];

else

f1=[f1,y(floor(x1)+6)+a*(y(floor(x1)+7)-y(floor(x1)+6))]; end

end

m=-5:0.1:5

plot(m,f1,'-r',x,y,'+')

axis([-5 5 0 10])

legend('liner插值','原函数');

xlabel('X');

ylabel('Y');

title('liner插值与原函数的对比');

grid

2、多项式插值

x0=-5:1:-3;

y0=10*exp(-abs(x0));

x=-5:0.1:-3;

n=length(x0);

m=length(x);

for i=1:m

z=x(i);

s=0.0;

for k=1:n

p=1.0;

for j=1:n

if j~=k

p=p*(z-x0(j))/(x0(k)-x0(j));

end

end

s=p*y0(k)+s;

end

y(i)=s;

end

axis([-5 5 0 10])

plot(x,y,'m',x0,y0,'+')

legend('三次多项式插值','原函数');

xlabel('X');

ylabel('Y');

title('三次多项式插值与原函数的对比');

grid

hold on

x0=-3:1:-1;

y0=10*exp(-abs(x0));

x=-3:0.1:-1;

n=length(x0);

m=length(x);

for i=1:m

z=x(i);

s=0.0;

for k=1:n

p=1.0;

for j=1:n

if j~=k

p=p*(z-x0(j))/(x0(k)-x0(j));

end

end

s=p*y0(k)+s;

end

y(i)=s;

end

axis([-5 5 0 10])

plot(x,y,'m',x0,y0,'+')

legend('三次多项式插值','原函数');

xlabel('X');

ylabel('Y');

title('三次多项式插值与原函数的对比');

grid

hold on

x0=-1:1:1;

y0=10*exp(-abs(x0));

x=-1:0.1:1;

n=length(x0);

m=length(x);

for i=1:m

z=x(i);

s=0.0;

for k=1:n

p=1.0;

for j=1:n

if j~=k

p=p*(z-x0(j))/(x0(k)-x0(j));

end

end

s=p*y0(k)+s;

end

y(i)=s;

end

axis([-5 5 0 10])

plot(x,y,'m',x0,y0,'+')

legend('三次多项式插值','原函数');

xlabel('X');

ylabel('Y');

title('三次多项式插值与原函数的对比');

grid

hold on

x0=1:1:3;

y0=10*exp(-abs(x0));

x=1:0.1:3;

n=length(x0);

m=length(x);

for i=1:m

z=x(i);

s=0.0;

for k=1:n

p=1.0;

for j=1:n

if j~=k

p=p*(z-x0(j))/(x0(k)-x0(j));

end

end

s=p*y0(k)+s;

相关文档
最新文档