matlab实现拉格朗日插值,多项式插值,邻近插值,线性插值 程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;