Matlab plot 函数使用什么插值技术来显示数据?

What interpolation technique does Matlab plot function use to show the data?

这似乎是一个非常基本的问题,但我想知道当我针对 y 值绘制 x 值时,幕后使用什么插值技术将离散数据显示为连续数据?考虑以下示例:

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

我猜是不是拉格朗日插值?

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

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

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

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

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

例如,从 中获取正弦曲线,可以创建一个具有更多等距值的 x 向量。请注意,线性插值与原始绘图线一致,因为原始绘图也使用线性插值。另请注意,x_ip 向量不包括(所有)原始点。这就是为什么 (~0.8, ~0.7).

点不重合的原因

代码

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)