题目

编写程序,已有低采样率的稀疏离散数据点,使用 <code>interp1()</code> 在指定目标插值坐标上分别执行线性插值(linear)与三次样条插值(spline),对比两种插值方式在平滑度上的差异。

输入格式:无需外部输入。

输出格式:输出稀疏已知点、稠密插值点及两种插值算法估算出的数值。

数据范围与约定:一维插值。

思路与算法

1. interp1 语法
y_query = interp1(x, y, x_query, method)。

2. 线性插值 linear
默认方法,相邻两点之间折线连接,在断点处一阶导数不连续。

3. 三次样条插值 spline
构造分段三次多项式,保证一阶导数与二阶导数全局平滑连续,适合物理运动轨迹与连续波形重构。

完整程序

% Octave / MATLAB 第88题:一维数据插值 interp1
x_known = [0, 1, 2, 3, 4];
y_known = [0, 0.84, 0.91, 0.14, -0.76]; % 稀疏采样点

% 查询未采样的测试点
x_query = [0.5, 1.5, 2.5];

% 1. 线性插值
y_linear = interp1(x_known, y_known, x_query, "linear");

% 2. 三次样条平滑插值
y_spline = interp1(x_known, y_known, x_query, "spline");

fprintf("查询位置 x: %s\n", mat2str(x_query));
fprintf("线性插值结果 (linear): %s\n", mat2str(y_linear, 3));
fprintf("样条插值结果 (spline): %s\n", mat2str(y_spline, 3));

运行示例

输出:

查询位置 x: [0.5 1.5 2.5]
线性插值结果 (linear): [0.42 0.875 0.525]
样条插值结果 (spline): [0.5 0.988 0.598]