这似乎是一个非常基本的问题,但我想知道当我对x值绘制x值时,在场景后面使用了什么插值技术来向我显示离散数据是连续的?请考虑以下示例:
x = 0:pi/100:2*pi;
y = sin(x);
plot(x,y)
我的猜测是拉格朗日插值?
答案 0 :(得分:2)
不,它只是一个线性插值。您的示例使用了很长的数据集,因此您无法区分它们。尝试绘制一个简短的数据集,你就会看到它。
答案 1 :(得分:2)
MATLAB' plot
执行简单的线性插值。为了获得更好的分辨率,您必须提供更多的采样点或在给定的x值之间插值。
例如,从answer of FamousBlueRaincoat获取窦,可以创建具有更多等距值的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)
答案 2 :(得分:1)
不,使用200个等间距点的拉格朗日插值将是一个非常糟糕的主意。 (见:Runge's phenomenon)。
plot
命令只是按给定的顺序用直线连接给定的(x,y)点。要自己查看,请使用更少的点:
x = 0:pi/4:2*pi;
y = sin(x);
plot(x,y)