上式称为n次Lagrange插值多项式,由方程(3)解的唯一性,n?1个节点的n次Lagrange插值多项式存在唯一。
1.1.3 用Matlab作Lagrange插值
Matlab中没有现成的Lagrange插值函数,必须编写一个M文件实现Lagrange插值。
设n个节点数据以数组x0,y0输入(注意Matlat的数组下标从1开始),m个插值点以数组x输入,输出数组y为m个插值。编写一个名为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
1.2 牛顿(Newton)插值
在导出Newton公式前,先介绍公式表示中所需要用到的差商、差分的概念及性质。
1.2.1 差商
定义 设有函数f(x),x0,x1,x2,?为一系列互不相等的点,称
f(xi)?f(xj)xi?xj即
(i?j)为f(x)关于点xi,xj一阶差商(也称均差)记为f[xi,xj],
f[xi,xj]?f(xi)?f(xj)xi?xj
称一阶差商的差商
f[xi,xj]?f[xj,xk]xi?xk为f(x)关于点xi,xj,xk的二阶差商,记为f[xi,xj,xk]。一般地,称 f[x0,x1,?,xk?1]?f[x1,x2,?,xk]
x0?xk为f(x)关于点x0,x1,?,xk的k阶差商,记为
f[x0,x1,?,xk?1]?f[x1,x2,?,xk]f[x0,x1,?,xk]?
x0?xk容易证明,差商具有下述性质: f[xi,xj]?f[xj,xi]
f[xi,xj,xk]?f[xi,xk,xj]?f[xj,xi,xk]
1.2.2 Newton插值公式 线性插值公式可表成
?1(x)?f(x0)?(x?x0)f[x0,x1]
称为一次Newton插值多项式。一般地,由各阶差商的定义,依次可得
f(x)?f(x0)?(x?x0)f[x,x0]
f[x,x0]?f[x0,x1]?(x?x1)f[x,x0,x1]
f[x,x0,x1]?f[x0,x1,x2]?(x?x2)f[x,x0,x1,x2]
??
f[x,x0,?,xn?1]?f[x0,x1,?,xn]?(x?xn)f[x,x0,?,xn]
将以上各式分别乘以1,(x?x0),(x?x0)(x?x1),?,(x?x0)(x?x1)?(x?xn?1),然后相加并消去两边相等的部分,即得
f(x)?f(x0)?(x?x0)f[x0,x1]?? ?(x?x0)(x?x1)?(x?xn?1)f[x0,x1,?,xn] ?(x?x0)(x?x1)?(x?xn)f[x,x0,x1,?,xn]记
Nn(x)?f(x0)?(x?x0)f[x0,x1]?? ?(x?x0)(x?x1)?(x?xn?1)f[x0,x1,?,xn]Rn(x)?(x?x0)(x?x1)?(x?xn)f[x,x0,x1,?,xn]
??n?1(x)f[x,x0,x1,?,xn]显然,Nn(x)是至多n次的多项式,且满足插值条件,因而它是f(x)的n次插值多项式。这种形式的插值多项式称为Newton插值多项式。Rn(x)称为Newton插值
余项。
Newton插值的优点是:每