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)
这似乎是一个非常基本的问题,但我想知道当我针对 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_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)