Matlab绘图函数用什么插值技术来显示数据?

时间:2015-02-07 02:40:45

标签: matlab plot interpolation

这似乎是一个非常基本的问题,但我想知道当我对x值绘制x值时,在场景后面使用了什么插值技术来向我显示离散数据是连续的?请考虑以下示例:

x = 0:pi/100:2*pi;
y = sin(x);
plot(x,y)

我的猜测是拉格朗日插值?

3 个答案:

答案 0 :(得分:2)

不,它只是一个线性插值。您的示例使用了很长的数据集,因此您无法区分它们。尝试绘制一个简短的数据集,你就会看到它。

答案 1 :(得分:2)

MATLAB' plot执行简单的线性插值。为了获得更好的分辨率,您必须提供更多的采样点或在给定的x值之间插值。

例如,从answer of FamousBlueRaincoat获取窦,可以创建具有更多等距值的x向量。注意,线性插值与原始曲线一致,因为原始曲线也使用线性插值。另请注意,x_ip向量不包括(所有)原始点。这就是为什么在点(~0.8, ~0.7)处不重合。

enter image description here

代码

x = 0:pi/4:2*pi;
y = sin(x);

x_ip    = linspace(x(1),x(end),5*numel(x));
y_lin   = interp1(x,y,x_ip,'linear');
y_pch   = interp1(x,y,x_ip,'pchip');
y_v5c   = interp1(x,y,x_ip,'v5cubic');
y_spl   = interp1(x,y,x_ip,'spline');

plot(x,y,x_ip,y_lin,x_ip,y_pch,x_ip,y_v5c,x_ip,y_spl,'LineWidth',1.2)
set(gca,'xlim',[pi/5 pi/2],'ylim',[0.5 1],'FontSize',16)

hLeg = legend(...
    'No Interpolation','Linear Interpolation',...
    'PChip Interpolation','v5cubic Interpolation',...
    'Spline Interpolation');
set(hLeg,'Location','south','Fontsize',16);

顺便说一下..这也适用于mesh和其他人

[X,Y] = meshgrid(-8:2:8);
R = sqrt(X.^2 + Y.^2) + eps;
Z = sin(R)./R;

figure
mesh(Z)

enter image description here

答案 2 :(得分:1)

不,使用200个等间距点的拉格朗日插值将是一个非常糟糕的主意。 (见:Runge's phenomenon)。

plot命令只是按给定的顺序用直线连接给定的(x,y)点。要自己查看,请使用更少的点:

x = 0:pi/4:2*pi;
y = sin(x);
plot(x,y)

output