插值与拟合

插值

插值就是已知一些点的数值,去近似计算其他点的数值。已知数值的点称为节点,需要计算数值的点称为插值点。

插值与拟合最大的不同在于,插值函数应该尽可能经过所有点,而拟合则不需要。

插值的方法有很多,下面介绍几种一维插值法。

拉格朗日插值

已知 $n+1$ 个节点 $(x_i,y_i)$,我们构造一个 $n$ 阶多项式 $L_n(x)$,使得 $y=L_n(x)$ 通过所有的点,即满足:

上面一共有 $n+1$ 个方程,可以解出 $L_n(x)$ 的 $n$ 个系数。根据线性代数的相关知识,我们有:

要求 $x_i$ 必须不相等。

function yi = itpl(x,y,xi)
    % x,y 为节点,xi 为插值点
    vx = vander(x);
    ai = inv(vx)*y;
    yi=polyval(ai,xi);
    plot(x,y,'b-',xi,yi,'r--')
    legend('原始数据', '插值数据')

练习

下面是某一国家的上下国界线的测量坐标,求该国的国土面积。(比例尺:18mm:40km)

x=[7 10.5 13 17.5 34 40.5 44.5 48 56 61 68.5 76.5 80.5 91 96 101 104 106.5 111.5 118 123.5 136.5 142 146 150 157 158];
y1=[44 45 47 50 50 38 30 30 34 36 34 41 45 46 43 37 33 28 32 65 55 54 52 50 66 66 68];
y2=[44 59 70 72 93 100 110 110 110 117 118 116 118 118 121 124 121 121 121 122 116 83 81 82 86 85 68];