【数学建模算法】(23)插值和拟合:拉格朗日插值

如果你上过研究生的数值分析课程的话,对这个算法应该不会很陌生。从这节开始,我们将逐一回顾各种插值和拟合方法以及使用Matlab来实现这些算法:

1.拉格朗日插值

1.1插值多项式

用多项式作为研究插值的工具,称为代数插值。其基本问题是:已知函数在区间上个不同点处的函数值,求一个至多 次多项式:

使其在给定点处与同值,即满足插值条件:

称为插值多项式,称为插值节点,简称节点,称为插值区间。从几何上看,次多项式插值就是过个点,作一条多项式曲线近似曲线。

次多项式(1)有个待定系数,由插值条件(2)恰好给出个方程:
\left\{\begin{array}{l}{a_{0}+a_{1} x_{0}+a_{2} x_{0}^{2}+\cdots+a_{n} x_{0}^{n}=y_{0}} \\ {a_{0}+a_{1} x_{1}+a_{2} x_{1}^{2}+\cdots+a_{n} x_{1}^{n}=y_{1}} \\ {\ldots \ldots \ldots \ldots \ldots \ldots \ldots \ldots \ldots \ldots \ldots} \\ {a_{0}+a_{1} x_{n}+a_{2} x_{n}^{2}+\cdots+a_{n} x_{n}^{n}=y_{n}}\end{array}\right.(3)

记此方程组的系数矩阵为,则:
\operatorname{det}(A)=\left|\begin{array}{ccccc}{1} & {x_{0}} & {x_{0}^{2}} & {\cdots} & {x_{0}^{n}} \\ {1} & {x_{1}} & {x_{1}^{2}} & {\cdots} & {x_{1}^{n}} \\ {} & {\cdots} & {\cdots} & {\cdots} & {\cdots} \\ {1} & {x_{n}} & {x_{n}^{2}} & {\cdots} & {x_{n}^{n}}\end{array}\right|

称为范德蒙特行列式。当互不相同时,此行列式值不为零。因此方程组(3)有唯一解。这表明,只要个节点互不相同,满足插值要求(2)的
插值多项式(1)是唯一的。

插值多项式与被插函数之间的差:

称为截断误差,又称为插值余项。当充分光滑时,

其中,

1.2.拉格朗日插值多项式

实际上比较方便的作法不是解方程(3)求待定系数,而是先构造一组基函数:
\begin{aligned} l_{i}(x) &=\frac{\left(x-x_{0}\right) \cdots\left(x-x_{i-1}\right)\left(x-x_{i+1}\right) \cdots\left(x-x_{n}\right)}{\left(x_{i}-x_{0}\right) \cdots\left(x_{i}-x_{i-1}\right)\left(x_{i}-x_{i+1}\right) \cdots\left(x_{i}-x_{n}\right)} \\ &=\prod_{j=0 \atop j \neq i}^{n} \frac{x-x_{j}}{x_{i}-x_{j}}, \quad(i=0,1, \cdots, n) \end{aligned}
是次多项式,满足:

令:

上式称为次插值多项式,由方程(3)解的唯一性,个节点的 次 插值多项式存在唯一。

1.3.用Matlab作Lagrange插值

Matlab中没有现成的插值函数,必须编写一个M文件实现插值。

设个节点数据以数组输入(注意 Matlab 的数组下标从 1 开始),个插值点以数组输入,输出数组为个插值。编写一个名为lagrange.m的M文件:

function y=lagrange(x0,y0,x);
n=length(x0);m=length(x);
for i=1:m
    z=x(i);
    s=0.0;
    for k=1:n
        p=1.0;
        for j=1:n
            if j~=k
                p=p*(z-x0(j))/(x0(k)-x0(j));
            end
        end
        s=p*y0(k)+s;
    end
y(i)=s;
end

你可能感兴趣的:(【数学建模算法】(23)插值和拟合:拉格朗日插值)