MCM520 ← 资料站首页 插值(拉格朗日 / 样条) · 深度手册 打开交互阅读器 →

插值(拉格朗日 / 样条) · 深度手册

分类:预测类 | 难度:★★☆ 进阶 | 编号:interpolation

一、这是什么(一句话用途)

已知离散点补出中间值(拟合曲线 / 补全数据)

二、核心思想

插值的目标与拟合不同:拟合允许误差、追求整体趋势;插值要求构造的曲线严格穿过每一个已知数据点,从而能在点之间补出高精度的中间值。拉格朗日插值用单一高次多项式,简单但高次易振荡(Runge 现象);三次样条改用分段三次多项式并在节点处拼接光滑,既过所有点又平稳,是工程绘图与数据补全的主流选择。

三、数学原理与推导

拉格朗日插值:给定节点 (xi,yi)i=0n−1(x_i,y_i)_{i=0}^{n-1},基函数

li(x)=∏j≠ix−xjxi−xj l_i(x)=\prod_{j\ne i}\frac{x-x_j}{x_i-x_j}

插值多项式 L(x)=∑i=0n−1yili(x)L(x)=\sum_{i=0}^{n-1}y_i l_i(x),次数 ≤n−1\le n-1 且 L(xi)=yiL(x_i)=y_i。但 nn 大时易出现 Runge 振荡。

三次样条:将区间分为 n−1n-1 段,每段 Si(x)=ai+bi(x−xi)+ci(x−xi)2+di(x−xi)3S_i(x)=a_i+b_i(x-x_i)+c_i(x-x_i)^2+d_i(x-x_i)^3,要求:

  1. 每段穿过端点;
  2. 节点处一阶、二阶导数连续;
  3. 边界条件(自然样条令端点二阶导为 0)。

解三对角方程组得系数,得到整体 C2C^2 光滑曲线。

四、建模 / 求解步骤

  1. 确定节点与函数值
  2. 选方法(拉格朗日 / 牛顿 / 三次样条)
  3. 构造插值函数
  4. 在所需点求值

五、关键公式速查

L(x)=Σ y_i·Π_{j≠i}(x−x_j)/(x_i−x_j)

六、典型示例

实验只测了 5 个点 → 插值出连续曲线用于画图 / 求导。

完整算例(数字演示,照着算一遍)

场景:已知点 (0,1),(1,3),(2,7) 求 x=1.5 的值(拉格朗日)。

L(1.5) = (1.5-1)(1.5-2)/((0-1)(0-2))·1 + (1.5-0)(1.5-2)/((1-0)(1-2))·3 + (1.5-0)(1.5-1)/((2-0)(2-1))·7 = 4.75。

结论:插值给出 4.75,比线性插值(5)更贴合曲线。

七、Python 实现示例

import os, numpy as np
import pandas as pd
HERE = os.path.dirname(os.path.abspath(__file__))
df = pd.read_csv(os.path.join(HERE,"..","datasets","interpolation.csv"))
x = df["x"].to_numpy(dtype=float); y = df["y"].to_numpy(dtype=float)
# 拉格朗日插值
def L(t):
    s=0
    for i in range(len(x)):
        li=1
        for j in range(len(x)):
            if j!=i: li*= (t-x[j])/(x[i]-x[j])
        s+=y[i]*li
    return s
print("x=2.5 插值 y=%.3f"%L(2.5))
print("x=4.0 插值 y=%.3f"%L(4.0))

配套文件:py_interpolation.py(需 numpy / pandas;与下方数据集配套练习)

八、MATLAB 实现示例

%% 拉格朗日插值示例(MATLAB/Octave)
df = readtable('..\datasets\interpolation.csv');
x = table2array(df(:,1)); y = table2array(df(:,2));
L = @(t) sum(arrayfun(@(i) y(i)*prod((t-x([1:i-1,i+1:end]))./(x(i)-x([1:i-1,i+1:end]))),1:length(x)));
fprintf('x=2.5 -> y=%.3f\n', L(2.5));

配套文件:m_interpolation.m(基础 MATLAB / Octave 即可运行)

九、练手数据集(可下载)

8 个散点 (x,y)。用于拉格朗日插值,补出中间点函数值。

十、常见误区与避坑清单

  • 高次拉格朗日易振荡(Runge)
  • 节点间距不均要小心
  • 外推危险

十一、结果怎么解读

插值曲线必过已知点。

十二、常与谁搭配

建模光滑用样条。

十三、论文写作技巧(怎么把它写进论文)

把 插值(拉格朗日 / 样条) 写进论文,核心不是堆公式,而是讲清「为什么用它、结果怎么呈现、如何对比」三件事。

1. 动机怎么写(为什么用它而不是别的)

先说明你的数据具有时间 / 序列依赖,或需要由已知推断未知,因此采用预测类方法。交代输入特征与预测目标,并说明为何选 插值(拉格朗日 / 样条)(如非线性强、含季节性、小样本等),对比朴素法(如移动平均)点出优势。

2. 结果怎么写(图表与指标)

结果必须给「预测值 vs 真实值」对比曲线 + 误差指标表(MAE / RMSE / MAPE),最好附训练 / 验证分段。若有多个模型,用一张表横向对比误差,突出 插值(拉格朗日 / 样条) 更优。

3. 可直接套用的写作话术

  • 中文模板:针对<问题>,本文采用 插值(拉格朗日 / 样条) 进行已知离散点补出中间值(拟合曲线 / 补全数据)。该方法能够自动刻画<优势>,在处理<场景>时相较<对比方法>更具<特点>。
  • 英文模板:To address , we adopt 插值(拉格朗日 / 样条) to 已知离散点补出中间值(拟合曲线 / 补全数据). Benefiting from its ability to , it outperforms on .

4. 同类易踩的写作坑

不可只报 R² 不看外推;时间序列要显式说明训练 / 测试切分方式,避免用未来信息泄漏(look-ahead bias)。

5. 典型论文段落范例(可直接参考 / 改写)

下面是一段可直接套用的论文表述,已按本算法定制,填空处(…)替换成你的真实数值即可。

由于日用电量具有明显的时间依赖与周期波动,本文采用 插值(拉格朗日 / 样条) 对未来 30 天负荷进行预测,以 RMSE=…、MAPE=… 的精度优于 ARIMA 基线,验证了模型对非线性趋势的捕捉能力。

Given the strong temporal dependence and periodic fluctuation of daily load, we employ 插值(拉格朗日 / 样条) to forecast the next 30 days, achieving RMSE=… and MAPE=… and outperforming the ARIMA baseline, which confirms its strength in capturing nonlinear trends.

十四、相关手册(延伸阅读)

(暂无直接关联手册,可前往手册库浏览其它算法)

十五、本手册导航


本手册由「算法深度手册生成器」自动产出,配套提供 Python / MATLAB 双版本示例与可下载练手数据集。