数值分析—函数插值

研究意义

该研究可以解决连续值的预测问题。如给定离散数据,要求预测其中为给定点的函数值,过程有些类似机器学习,都是建立曲线拟合离散点。

数学表达为在一个函数类中找到一个简单函数 p ( x ) p(x) p(x)(通常为多项式),使 p ( x k ) = f ( x k ) = y k p(x_{k})=f(x_{k})=y_{k} p(xk)=f(xk)=yk,其中 p ( x ) p(x) p(x)为插值函数, f ( x ) f(x) f(x)为被插值函数, x k x_{k} xk为插值节点, [ a , b ] [a,b] [a,b]为插值区间。
该方法的关键在于,如何求插值函数 p ( x ) ? p(x)? p(x)?

有三种解决方法,待定系数法。建立多项式方程,带入点求系数,该方法易于理解,但求解方程组计算量大。故本章主要介绍Lagrange插值公式Newton插值公式

定理:插值多项式的存在具有唯一性:节点互异,满足 f ( x i ) = p ( x i ) f(x_{i})=p(x_{i}) f(xi)=p(xi)且次数不超过n的插值多项式存在且唯一

Lagrange插值法

拉格朗日插值法

两个插值点可以构造出一次线性插值公式,三个点可以构造出二次插值公式,n+1个点可以构造出n阶的插值公式,

基函数为: l i ( x ) = ( x − x 0 ) ( x − x 1 ) . . . ( x − x i − 1 ) ( x − x i + 1 ) . . . ( x − x n ) ( x i − x 0 ) ( x i − x 1 ) . . . ( x i − x i − 1 ) ( x i − x i + 1 ) . . . ( x i − x n ) l_{i}(x)=\frac{(x-x_{0})(x-x_{1})...(x-x_{i-1})(x-x_{i+1})...(x-x_{n})}{(x_{i}-x_{0})(x_{i}-x_{1})...(x_{i}-x_{i-1})(x_{i}-x_{i+1})...(x_{i}-x_{n})} li(x)=(xix0)(xix1)...(xixi1)(xixi+1)...(xixn)(xx0)(xx1)...(xxi1)(xxi+1)...(xxn),即为 ∏ k = 1 n x − x k x i − x k \prod_{k=1}^{n} \frac{x-x_{k}}{x_{i}-x_{k}} k=1nxixkxxk k ! = i k!=i k!=i
拉格朗日插值公式为: L n ( x ) = y 0 l 0 ( x ) + y 1 l 1 ( x ) + . . . + y n l n ( x ) L_{n}(x)=y_{0}l_{0}(x)+y_{1}l_{1}(x)+...+y_{n}l_{n}(x) Ln(x)=y0l0(x)+y1l1(x)+...+ynln(x)

注:
1,n不同时, l ( x ) l(x) l(x)表达式不同,即该公式与n相关
2, l 0 ( x ) 、 l 1 ( x ) . . . l n ( x ) l_{0}(x)、l_{1}(x)...l_{n}(x) l0(x)l1(x)...ln(x) P n ( x ) P_{n}(x) Pn(x)的一组基函数

例题:已知 f ( x ) f(x) f(x)的两个数据点 ( − 1 , 4 ) ( 0 , − 1 ) (-1,4) (0,-1) (1,4)(0,1),求一次拉格朗日插值多项式,并估计 f ( − 1 2 ) f(\frac{-1}{2}) f(21)

解:转化点为 x 0 = 1 y 0 = 4 x_{0}=1 y_{0}=4 x0=1y0=4 x 1 = 0 y 1 = − 1 x_{1}=0 y_{1}=-1 x1=0y1=1 l 0 ( x ) = x − x 1 x 0 − x 1 = − x l_{0}(x)=\frac{x-x_{1}}{x_{0}-x_{1}}=-x l0(x)=x0x1xx1=x l 1 ( x ) = x − x 0 x 1 − x 0 = x + 1 l_{1}(x)=\frac{x-x_{0}}{x_{1}-x_{0}}=x+1 l1(x)=x1x0xx0=x+1
带入 L 1 ( x ) = y 0 l 0 ( x ) + y 1 l 1 ( x ) = 4 l 0 ( x ) − l 1 ( x ) L_{1}(x)=y_{0}l_{0}(x)+y_{1}l_{1}(x)=4l_{0}(x)-l_{1}(x) L1(x)=y0l0(x)+y1l1(x)=4l0(x)l1(x) L 1 ( x ) = − 5 x − 1 L_{1}(x)=-5x-1 L1(x)=5x1
f ( − 1 2 ) ≈ L 1 ( − 0.5 ) = 3 2 f(\frac{-1}{2})≈L_{1}(-0.5)=\frac{3}{2} f(21)L1(0.5)=23

三个节点要求三次,无非再算一阶 l ( x ) l(x) l(x) L 2 ( x ) L_{2}(x) L2(x)

拉格朗日插值基函数的性质

1,n个基函数的和为1, ∑ j = 0 n l j ( x ) = 1 \sum_{j=0}^{n}l_{j}(x)=1 j=0nlj(x)=1
2, ∑ j = 0 n l j ( x ) x j k = x k ( k = 0 , 1... n ) \sum_{j=0}^{n}l_{j}(x)x_{j}^{k}=x^{k} (k=0,1...n) j=0nlj(x)xjk=xk(k=0,1...n),本质是1的推广
3, ∑ j = 0 n l j ( x ) ( x j − x ) k = 0 ( k = 0 , 1... n ) \sum_{j=0}^{n}l_{j}(x)(x_{j}-x)^{k}=0 (k=0,1...n) j=0nlj(x)(xjx)k=0(k=0,1...n)

拉格朗日误差分析

R n ( x ) = f ( x ) − L n ( x ) R_{n}(x)=f(x)-L_{n}(x) Rn(x)=f(x)Ln(x),即为插值余项。

定理:前置基本条件不说了,总之符合条件的情况下,有:
R n ( x ) = f n + 1 ( ξ ) ( n + 1 ) ! w n + 1 ( x ) R_{n}(x)=\frac{f^{n+1}(\xi) }{(n+1)!}w_{n+1}(x) Rn(x)=(n+1)!fn+1(ξ)wn+1(x) w n + 1 ( x ) = ( x − x 0 ) ( x − x 1 ) . . . ( x − x n ) w_{n+1}(x)=(x-x_{0})(x-x_{1})...(x-x_{n}) wn+1(x)=(xx0)(xx1)...(xxn)

注:实际中 ξ \xi ξ未知,故通常采用 ∣ ∣ R n ( x ) ∣ ∣ ≤ M n + 1 ( n + 1 ) ! ∣ w n + 1 ( x ) ∣ ||R_{n}(x)||\le\frac{M_{n+1}}{(n+1)!}|w_{n+1}(x)| ∣∣Rn(x)∣∣(n+1)!Mn+1wn+1(x)设置上限来估计误差,其中 M n + 1 = m a x ∣ f n + 1 ( x ) ∣ M_{n+1}=max|f^{n+1}(x)| Mn+1=maxfn+1(x)

例题: f ( x ) = s i n x f(x)=sinx f(x)=sinx,有数据(0,0)、(0.1,0.0998)、(0.2,0.1987)、(0.3,0.2955),利用线性插值求 f ( 0.15 ) f(0.15) f(0.15)的值并估计误差。
解:迭代节点的原则:选择近的内插点,即x=0.1和x=0.2两个点,用这两个点建立lagrange插值多项式,求 L ( 0.15 ) L(0.15) L(0.15)
误差= ∣ f 2 ( ξ ) ∣ 2 ! ∣ ( x − x 0 ) ( x − x 1 ) ∣ \frac{|f^{2}(\xi)|}{2!}|(x-x_{0})(x-x_{1})| 2!f2(ξ)(xx0)(xx1)

该插值方法格式紧凑,但算法无承袭性,一阶和二阶每个 l i ( x ) l_{i}(x) li(x)彼此独立,需要独立计算,且最终还是需要求解线性方程组,为了解决上述问题,Newton提出新的插值公式。

Newton插值公式

差商定义及其性质

f ( x ) f(x) f(x)关于 x 0 x_{0} x0的零阶差商记为 f [ x 0 ] = f ( x 0 ) f[x_{0}]=f(x_{0}) f[x0]=f(x0) f [ x 0 , x k ] = f ( x k ) − f ( x 0 ) x k − x 0 f[x_{0},x_{k}]=\frac{f(x_{k})-f(x_{0})}{x_{k}-x_{0}} f[x0,xk]=xkx0f(xk)f(x0)称为 f ( x ) f(x) f(x)关于 x 0 , x k x_{0},x_{k} x0,xk的一阶差商, f [ x 0 , x 1 , x k ] = f [ x 0 , x k ] − f [ x 0 , x 1 ] x k − x 1 f[x_{0},x_{1},x_{k}]=\frac{f{[x_{0},x_{k}]}-f[x_{0},x_{1}]}{x_{k}-x_{1}} f[x0,x1,xk]=xkx1f[x0,xk]f[x0,x1] f ( x ) f(x) f(x)关于 x 0 , x 1 , x k x_{0},x_{1},x_{k} x0,x1,xk的二阶差商——故差商本质就是差的商

例题: f ( x ) = x 5 − 3 x − 1 f(x)=x^{5}-3x-1 f(x)=x53x1 f [ 0 , 1 ] f[0,1] f[0,1] f [ 0 , 1 , 2 ] f[0,1,2] f[0,1,2]
解:
f [ 0 , 1 ] = f ( 1 ) − f ( 0 ) 1 = − 2 f[0,1]=\frac{f(1)-f(0)}{1}=-2 f[0,1]=1f(1)f(0)=2 f [ 0 , 2 ] = f ( 2 ) − f ( 0 ) 2 = 13 f[0,2]=\frac{f(2)-f(0)}{2}=13 f[0,2]=2f(2)f(0)=13
f [ 0 , 1 , 2 ] = f [ 0 , 2 ] − f [ 0 , 1 ] 2 − 1 = 13 + 2 = 15 f[0,1,2]=\frac{f[0,2]-f[0,1]}{2-1}=13+2=15 f[0,1,2]=21f[0,2]f[0,1]=13+2=15

一般地,称 f [ x 0 、 x 1 . . . x k ] = f [ x 0 , x 1 . . . x k − 2 , x k ] − f [ x 0 , x 1 . . . x k − 1 ] x k − x k − 1 f[x_{0}、x_{1}...x_{k}]=\frac{f[x_{0},x_{1}...x_{k-2},x_{k}]-f[x_{0},x_{1}...x_{k-1}]}{x_{k}-x{k-1}} f[x0x1...xk]=xkxk1f[x0,x1...xk2,xk]f[x0,x1...xk1]为关于 x 0 . . . x k x_{0}...x_{k} x0...xk的k阶差商。

差商具有如下性质:
1,线性。若 f [ x ] = a f ( x ) + b g ( x ) f[x]=af(x)+bg(x) f[x]=af(x)+bg(x),则 F [ x 0 . . . x k ] = a f [ x 0 . . . x k ] + b g [ x 0 . . . x k ] F[x_{0}...x_{k}]=af[x_{0}...x_{k}]+bg[x_{0}...x_{k}] F[x0...xk]=af[x0...xk]+bg[x0...xk]
2, f ( x ) f(x) f(x)的k阶差商可以表示为函数值的线性组合: f [ x 0 . . . x k ] = ∑ i = 0 k f ( x i ) w k + 1 ( x i ) f[x_{0}...x_{k}]=\sum_{i=0}^{k} \frac{f(x_{i})}{w_{k+1}(x_{i})} f[x0...xk]=i=0kwk+1(xi)f(xi),其中 w k + 1 ( x i ) = k i ! = j ( x i − x j ) w_{k+1}(x_{i})=\frac{k}{_{i!=j}(x_{i}-x_{j})} wk+1(xi)=i!=j(xixj)k

3,对称性。调换k阶差商中 x 0 , x 1 . . . x k x_{0},x_{1}...x_{k} x0,x1...xk位置不改变差商的值,形式如下:
原有差商 f [ x 0 , x 1 , x ] = f [ x 0 , x ] − f [ x 0 , x 1 ] x − x 1 f[x_{0},x_{1},x]=\frac{f{[x_{0},x]}-f[x_{0},x_{1}]}{x-x_{1}} f[x0,x1,x]=xx1f[x0,x]f[x0,x1]经过对称性可转化为 f [ x 1 , x , x 0 ] = f [ x 0 , x 1 ] − f [ x 1 , x ] x 0 − x f[x_{1},x,x_{0}]=\frac{f{[x_{0},x_{1}]}-f[x_{1},x]}{x_{0}-x} f[x1,x,x0]=x0xf[x0,x1]f[x1,x]
该性质直接用于后续差商表的计算

4,若 f ( x ) f(x) f(x)的k阶差商为x的m次多项式,则其k+1阶差商为x的m-1次多项式,即多项式求一次差商,降低一次。
推论,n次多项式则其差商为n-k次多项式,k>n则差商为0。

牛顿插值公式

由上面差商的概念中剥离出 f ( x ) f(x) f(x)就是牛顿插值公式,

f [ x 0 , x ] = f ( x ) − f ( x 0 ) x − x 0 = > f ( x ) = f ( x 0 ) + f [ x 0 , x ] ( x − x 0 ) f[x_{0},x]=\frac{f(x)-f(x_{0})}{x-x_{0}}=>f(x)=f(x_{0})+f[x_{0},x](x-x_{0}) f[x0,x]=xx0f(x)f(x0)=>f(x)=f(x0)+f[x0,x](xx0)
f [ x 0 , x 1 , x ] = f [ x 0 , x ] − f [ x 0 , x 1 ] x − x 1 = > f [ x 0 , x ] = f [ x 0 , x 1 ] + f [ x 0 , x 1 , x ] ( x − x 1 ) f[x_{0},x_{1},x]=\frac{f{[x_{0},x]}-f[x_{0},x_{1}]}{x-x_{1}}=>f[x_{0},x]=f[x_{0},x_{1}]+f[x_{0},x_{1},x](x-x_{1}) f[x0,x1,x]=xx1f[x0,x]f[x0,x1]=>f[x0,x]=f[x0,x1]+f[x0,x1,x](xx1)
将二式中 f [ x 0 , x ] f[x_{0},x] f[x0,x]带入一式可得 f ( x ) = f ( x 0 ) + f [ x 0 , x 1 ] ( x − x 0 ) + f [ x 0 , x 1 , x ] ( x − x 0 ) ( x − x 1 ) f(x)=f(x_{0})+f[x_{0},x_{1}](x-x_{0})+f[x_{0},x_{1},x](x-x_{0})(x-x_{1}) f(x)=f(x0)+f[x0,x1](xx0)+f[x0,x1,x](xx0)(xx1)得到一次插值;
再次代换可得 f ( x ) = f ( x 0 ) + f [ x 0 , x 1 ] ( x − x 0 ) + f [ x 0 , x 1 , x ] ( x − x 0 ) ( x − x 1 ) + f [ x 0 , x 1 , x 2 , x ] ( x − x 0 ) ( x − x 1 ) ( x − x 2 ) f(x)=f(x_{0})+f[x_{0},x_{1}](x-x_{0})+f[x_{0},x_{1},x](x-x_{0})(x-x_{1})+f[x_{0},x_{1},x_{2},x](x-x_{0})(x-x_{1})(x-x_{2}) f(x)=f(x0)+f[x0,x1](xx0)+f[x0,x1,x](xx0)(xx1)+f[x0,x1,x2,x](xx0)(xx1)(xx2)二次插值;
如此下去可得 f ( x ) = f ( x 0 ) + f [ x 0 , x 1 ] ( x − x 0 ) + . . . + f [ x 0 , x 1 . . . x n , x ] ( x − x 0 ) ( x − x 1 ) . . . ( x − x n ) f(x)=f(x_{0})+f[x_{0},x_{1}](x-x_{0})+...+f[x_{0},x_{1}...x_{n},x](x-x_{0})(x-x_{1})...(x-x_{n}) f(x)=f(x0)+f[x0,x1](xx0)+...+f[x0,x1...xn,x](xx0)(xx1)...(xxn)

该方法可以让求高次迭代的过程继承上一次的结果,提高了求解速度,计算形式上主要通过差商表实现,具体方法见下面例题。

例题:已知 f ( x ) f(x) f(x)数据有(-1,4)、(0,-1)、(1,2)、(3,6),构建差商表计算牛顿插值公式。
解:

x k x_{k} xk f ( x k ) f(x_{k}) f(xk)一阶二阶三阶
-14
0-1-5
1234
362 − 1 3 -\frac{1}{3} 31 − 13 12 -\frac{13}{12} 1213

f ( x ) = 4 + ( − 5 ) ( x + 1 ) + 4 ( x + 1 ) ( x − 0 ) − 13 12 ( x + 1 ) ( x − 0 ) ( x − 1 ) f(x)=4+(-5)(x+1)+4(x+1)(x-0)-\frac{13}{12}(x+1)(x-0)(x-1) f(x)=4+(5)(x+1)+4(x+1)(x0)1213(x+1)(x0)(x1)

差商表的计算利用差商性质3——对称性,差商计算公式为 f [ x 0 , x 1 . . . x k ] = f [ x 1 . . . f k ] − f [ x 0 . . . x k − 1 ] x k − x 0 f[x_{0},x_{1}...x_{k}]=\frac{f[x_{1}...f_{k}]-f[x_{0}...x_{k-1}]}{x_{k}-x_{0}} f[x0,x1...xk]=xkx0f[x1...fk]f[x0...xk1],故该差商表计算流程为:

差商表计算流程
解释为:n阶差商的分子为对应位置前一阶两项的差,分母为对应位置x和前n个位置x的差。

牛顿插值公式的余项

注:
1,Lagrange插值公式与Newton插值公式是不同基的表示形式。
2,Newton插值公式具有算法的承袭性,增加一个节点仅需增加一项。

差商公式最后一项 f [ x 0 , x 1 . . . x n , x ] ( x − x 0 ) ( x − x 1 ) . . . ( x − x n ) = f n + 1 ( ξ ) ( n + 1 ) ! ( x − x 0 ) ( x − x 1 ) . . . ( x − x n ) f[x_{0},x_{1}...x_{n},x](x-x_{0})(x-x_{1})...(x-x_{n})=\frac{f^{n+1(\xi)}}{(n+1)!}(x-x_{0})(x-x_{1})...(x-x_{n}) f[x0,x1...xn,x](xx0)(xx1)...(xxn)=(n+1)!fn+1(ξ)(xx0)(xx1)...(xxn),故 f [ x 0 , x 1 . . . x n , x ] = f n + 1 ( ξ ) ( n + 1 ) ! f[x_{0},x_{1}...x_{n},x]=\frac{f^{n+1(\xi)}}{(n+1)!} f[x0,x1...xn,x]=(n+1)!fn+1(ξ)
n = n − 1 n=n-1 n=n1 f [ x 0 , x 1 . . . x n − 1 , x ] = f n ( ξ ) ( n ) ! f[x_{0},x_{1}...x_{n-1},x]=\frac{f^{n(\xi)}}{(n)!} f[x0,x1...xn1,x]=(n)!fn(ξ)
特别地,取 x = x n x=x_{n} x=xn,得 f [ x 0 , x 1 . . . x n ] = f n ( ξ ) ( n ) ! f[x_{0},x_{1}...x_{n}]=\frac{f^{n(\xi)}}{(n)!} f[x0,x1...xn]=(n)!fn(ξ),该公式将差商和导数联系起来,揭示了n阶差商和n阶导数的关系,当 f ( x ) f(x) f(x)为小于n阶的多项式时,可用导数计算差商,与 ξ \xi ξ的取值无关,即 f ( x ) f(x) f(x)为k阶多项式时,k=n时差商为ak!,k<n时差商为0.

例题: f ( x ) = x 7 − 5 x 3 + 2 f(x)=x^{7}-5x^{3}+2 f(x)=x75x3+2,求 f [ 2 0 . . . 2 7 ] f[2^{0}...2^{7}] f[20...27] f [ 2 0 . . . 2 8 ] f[2^{0}...2^{8}] f[20...28]
解:
f [ 2 0 . . . 2 7 ] = f 7 ( ξ ) ( 7 ) ! = 7 ! 7 ! = 1 f[2^{0}...2^{7}]=\frac{f^{7(\xi)}}{(7)!}=\frac{7!}{7!}=1 f[20...27]=(7)!f7(ξ)=7!7!=1
f [ 2 0 . . . 2 8 ] = f 8 ( ξ ) ( 8 ) ! = 0 f[2^{0}...2^{8}]=\frac{f^{8(\xi)}}{(8)!}=0 f[20...28]=(8)!f8(ξ)=0

Hermite插值

研究背景

一些情景不仅要求节点处函数值相等,还要求在节点出导数值相等,如有 y i = f ( x i ) y_{i}=f(x_{i}) yi=f(xi),导数值 m i = f ′ ( x i ) m_{i}=f'(x_{i}) mi=f(xi),要求 H ( x ) H(x) H(x)使 H ( x i ) = y i H(x_{i})=y_{i} H(xi)=yi H ′ ( x i ) = m i H'(x_{i})=m_{i} H(xi)=mi,则称 H ( x ) H(x) H(x)为Hermite插值多项式。

注:2n+2个插值条件,可决定次数不超过2n+1次的多项式,记为 H 2 n + 1 ( x ) H_{2n+1}(x) H2n+1(x)

几何意义:所拟合曲线不仅与已知曲线相交,且在交点出有相同的切线。

该方法用lagrange法证明,用Newton法计算。

埃尔米特插值公式

H 2 n + 1 ( x ) = ∑ k = 0 n [ α k ( x ) y k + β k ( x ) m k ] H_{2n+1}(x)=\sum_{k=0}^{n}[\alpha _{k}(x)y_{k}+\beta_{k}(x)m_{k}] H2n+1(x)=k=0n[αk(x)yk+βk(x)mk],其中 α k ( x ) \alpha _{k}(x) αk(x) β k ( x ) \beta_{k}(x) βk(x) H e r m i t e Hermite Hermite插值多项式的基函数,满足如下条件:

1, α k ( x ) \alpha _{k}(x) αk(x) β k ( x ) \beta_{k}(x) βk(x)也为次数不超过2n+1的多项式。
2, α k ( x k ) \alpha _{k}(x_{k}) αk(xk)j=k时为1,j!=k时为0, α k ′ ( x j ) = 0 \alpha _{k}'(x_{j})=0 αk(xj)=0
β k ( x j ) \beta_{k}(x_{j}) βk(xj)=0, β k ′ ( x j ) \beta_{k}'(x_{j}) βk(xj)j=k时为1,j!=k时为0。

验证插值条件:
H 2 n + 1 ( x j ) = y j H_{2n+1}(x_{j})=y_{j} H2n+1(xj)=yj,即 H 2 n + 1 ( x j ) = ∑ k = 0 n ( α k ( x ) k k + β k ( x ) m k ) = y j H_{2n+1}(x_{j})=\sum_{k=0}^{n}(\alpha _{k}(x)k_{k}+\beta_{k}(x)m_{k})=y_{j} H2n+1(xj)=k=0n(αk(x)kk+βk(x)mk)=yj
H 2 n + 1 ′ ( x j ) = m j H_{2n+1}'(x_{j})=m_{j} H2n+1(xj)=mj,即 H 2 n + 1 ′ ( x j ) = ∑ k = 0 n ( α k ′ ( x ) k k + β k ′ ( x ) m k ) = y j = m j H_{2n+1}'(x_{j})=\sum_{k=0}^{n}(\alpha' _{k}(x)k_{k}+\beta'_{k}(x)m_{k})=y_{j}=m_{j} H2n+1(xj)=k=0n(αk(x)kk+βk(x)mk)=yj=mj

构造 α k \alpha_{k} αk β k ( x ) \beta_{k}(x) βk(x)
α k = ( a x + b ) ( x − x 0 ) 2 ( x − x 1 ) 2 . . . ( x − x k − 1 ) 2 ( x − x k + 1 ) 2 . . . ( x − x n ) 2 = ( a x + b ) l k 2 ( x ) \alpha_{k}=(ax+b)(x-x_{0})^2(x-x_{1})^{2}...(x-x_{k-1})^2(x-x_{k+1})^2...(x-x_{n})^2=(ax+b)l_{k}^{2}(x) αk=(ax+b)(xx0)2(xx1)2...(xxk1)2(xxk+1)2...(xxn)2=(ax+b)lk2(x),根据已有点求出ab即可,该基函数只有k=j时为1。

再由 α k ( x k ) = 1 \alpha_{k}(x_{k})=1 αk(xk)=1,故 ( a x + b ) l k 2 ( x ) = a x k + b = 1 (ax+b)l_{k}^{2}(x)=ax_{k}+b=1 (ax+b)lk2(x)=axk+b=1
α k ′ ( x k ) = 0 \alpha_{k}'(x_{k})=0 αk(xk)=0,故 α k ′ ( x k ) = a l k 2 ( x k ) + ( a x + b ) H k ( x k l k ′ ( x k ) = a + 2 ( a x k + b ) l k ′ ( x k ) = 0 \alpha_{k}'(x_{k})=al_{k}^{2}(x_{k})+(ax+b)H_{k}(x_{k}l_{k}'(x_{k})=a+2(ax_{k}+b)l_{k}'(x_{k})=0 αk(xk)=alk2(xk)+(ax+b)Hk(xklk(xk)=a+2(axk+b)lk(xk)=0

解得 a = − 2 l k ( x k ) a=-2l_{k}(x_{k}) a=2lk(xk) b = 1 + 2 x k l k ′ ( x k ) b=1+2x_{k}l_{k}'(x_{k}) b=1+2xklk(xk) l k ′ ( x ) = [ ( x − x 0 ) ( x − x 1 . . . ( x − x k − 1 ) ( x − x k + 1 ) . . . ( x − x n ) ) ( x k − x 0 ) ( x k − x 1 ) . . . ( x k − x k + 1 ) ( x k − x k + 1 ) . . . ( x k − x n ) ] ′ = ∑ j = 0 , j ! = k n ( 1 x k − x j ) l_{k}'(x)=[\frac{(x-x_{0})(x-x_{1}...(x-x_{k-1})(x-x_{k+1})...(x-x_{n}))}{(x_{k}-x_{0})(x_{k}-x_{1})...(x_{k}-x_{k+1})(x_{k}-x_{k+1})...(x_{k}-x_{n})}]'=\sum_{j=0,j!=k}^{n}(\frac{1}{x_{k}-x_{j}}) lk(x)=[(xkx0)(xkx1)...(xkxk+1)(xkxk+1)...(xkxn)(xx0)(xx1...(xxk1)(xxk+1)...(xxn))]=j=0,j!=kn(xkxj1)

Hermite插值公式余项

R ( x ) = f ( x ) − H 2 n + 1 ( x ) = f 2 n + 2 ( ξ ) ( 2 n + 2 ) ! ∣ w n + 1 2 ( x ) ∣ R(x)=f(x)-H_{2n+1}(x)=\frac{f^{2n+2}(\xi)}{(2n+2)!}|w_{n+1}^2(x)| R(x)=f(x)H2n+1(x)=(2n+2)!f2n+2(ξ)wn+12(x)

常用 ∣ R n ( x ) ∣ ≤ M ( 2 n + 2 ) ! ∣ w n + 1 2 ( x ) ∣ |R_{n}(x)|\le\frac{M}{(2n+2)!}|w^{2}_{n+1}(x)| Rn(x)(2n+2)!Mwn+12(x),其中 M = m a x a ≤ x ≤ b ∣ f 2 n + 2 ( x ) ∣ M=max_{a\le x\le b}|f^{2n+2}(x)| M=maxaxbf2n+2(x)

计算方法—带重节点的Newton插值公式

用于求有重节点的差商,同时用于求Hermite插值
f [ x 0 , x 0 ] = lim ⁡ x → x 0 f [ x 0 , x 1 ] = lim ⁡ x → x 0 f ( x 1 ) − f ( x 0 ) x 1 − x 0 = f ′ ( x 0 ) f[x_{0},x_{0}]=\lim_{x \to x_{0}}f[x_{0},x_{1}]= \lim_{x \to x_{0}}\frac{f(x_{1})-f({x_{0}})}{x_{1}-x_{0}}=f'(x_{0}) f[x0,x0]=limxx0f[x0,x1]=limxx0x1x0f(x1)f(x0)=f(x0)
f [ x 0 , x 0 , x 1 ] = lim ⁡ x → x 0 f [ x 0 , x 1 − f [ x 0 , x 0 ] ] x 1 − x 0 = f [ x 0 , x 1 ] − f ′ ( x 0 ) x 1 − x 0 f[x_{0},x_{0},x_{1}]= \lim_{x \to x_{0}}\frac{f[x_{0},x_{1}-f[x_{0},x_{0}]]}{x_{1}-x_{0}}=\frac{f[x_{0},x_{1}]-f'(x_{0})}{x_{1}-x_{0}} f[x0,x0,x1]=limxx0x1x0f[x0,x1f[x0,x0]]=x1x0f[x0,x1]f(x0)

例题1:求 H 3 ( x 0 ) = f ( x 0 ) = y 0 , H 3 ′ ( x 0 ) = f ′ ( x 0 ) = y 0 ′ , H 3 ( x 1 ) = f ( x 1 ) = y 1 , H 3 ′ ( x 1 ) = f ′ ( x 1 ) = y 1 ′ H_{3}(x_{0})=f(x_{0})=y_{0},H_{3}'(x_{0})=f'(x_{0})=y_{0}',H_{3}(x_{1})=f(x_{1})=y_{1},H_{3}'(x_{1})=f'(x_{1})=y_{1}' H3(x0)=f(x0)=y0,H3(x0)=f(x0)=y0,H3(x1)=f(x1)=y1,H3(x1)=f(x1)=y1
解:
首先构建差商表

xf(x)一阶二阶三阶
x 0 x_{0} x0 f ( x 0 ) f(x_{0}) f(x0)
x 0 x_{0} x0 f ( x 0 ) f(x_{0}) f(x0) f ′ ( x 0 ) f'(x_{0}) f(x0)
x 1 x_{1} x1 f ( x 1 ) f(x_{1}) f(x1) f ( x 1 ) − f ( x 0 ) x 1 − x 0 \frac{f(x_{1})-f(x_{0})}{x_{1}-x_{0}} x1x0f(x1)f(x0) f [ x 0 , x 0 , x 1 ] f[x_{0},x_{0},x_{1}] f[x0,x0,x1]
x 1 x_{1} x1 f ( x 1 ) f(x_{1}) f(x1) f ′ ( x 1 ) f'(x_{1}) f(x1) f [ x 0 , x 1 , x 1 ] f[x_{0},x_{1},x_{1}] f[x0,x1,x1] f [ x 0 , x 0 , x 1 , x 1 ] f[x_{0},x_{0},x_{1},x_{1}] f[x0,x0,x1,x1]

H 3 ( x ) = f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) + f [ x 0 , x 0 , x 1 ] ( x − x 0 ) 2 + f [ x 0 , x 0 , x 1 , x 1 ] ( x − x 0 ) 2 ( x − x 1 ) H_{3}(x)=f(x_{0})+f'(x_{0})(x-x_{0})+f[x_{0},x_{0},x_{1}](x-x_{0})^2+f[x_{0},x_{0},x_{1},x_{1}](x-x_{0})^2(x-x_{1}) H3(x)=f(x0)+f(x0)(xx0)+f[x0,x0,x1](xx0)2+f[x0,x0,x1,x1](xx0)2(xx1)

其实就是把导数点也当作重节点计算差商

例题2:导数不完全的混合条件
有4阶多项式 x 0 = 1 , x 1 = 2 , x 2 = 3 x_{0}=1,x_{1}=2,x_{2}=3 x0=1,x1=2,x2=3,求满足插值条件 p ( x 0 ) = f ( x 0 ) = 6 , p ( x 1 ) = f ( x 1 ) = 25 , p ( x 2 ) = f ( x 2 ) = 70 , p ′ ( x 1 ) = f ′ ( x 1 ) = 30 p(x_{0})=f(x_{0})=6,p(x_{1})=f(x_{1})=25,p(x_{2})=f(x_{2})=70,p'(x_{1})=f'(x_{1})=30 p(x0)=f(x0)=6,p(x1)=f(x1)=25,p(x2)=f(x2)=70,p(x1)=f(x1)=30,求次数不超过3次的多项式 p ( x ) p(x) p(x)满足以上条件,求其余项表达式。
解:使用带重节点的Newton插值公式,构造差商表:

xf(x)一阶二阶三阶
16
22519
225 3011
37045152

p ( x ) = 6 + 19 ( x − 1 ) + 11 ( x − 1 ) ( x − 2 ) + 2 ( x − 1 ) ( x − 2 ) 2 = 2 x 3 + x 2 + 2 x + 1 p(x)=6+19(x-1)+11(x-1)(x-2)+2(x-1)(x-2)^2=2x^3+x^2+2x+1 p(x)=6+19(x1)+11(x1)(x2)+2(x1)(x2)2=2x3+x2+2x+1

Hermite余项

R ( x ) = f ( x ) − p ( x ) = k ( x ) ( x − x 0 ) ( x − x 1 ) 2 ( x − x 2 ) R(x)=f(x)-p(x)=k(x)(x-x_{0})(x-x_{1})^2(x-x_{2}) R(x)=f(x)p(x)=k(x)(xx0)(xx1)2(xx2),其中 k ( x ) = f 4 ( ξ ) 4 ! k(x)=\frac{f^{4}(\xi)}{4!} k(x)=4!f4(ξ),导数点当作二重根构造函数。

例题 f ( − 1 ) = − 3 , f ( 0 ) = − 1 , f ( 1 ) = − 1 , f ′ ( 0 ) = 1 , f ′ ( 1 ) = 3 f(-1)=-3,f(0)=-1,f(1)=-1,f'(0)=1,f'(1)=3 f(1)=3,f(0)=1,f(1)=1,f(0)=1,f(1)=3
1,求次数小于等于4的多项式 p ( x ) , 使 p ( − 1 ) = f ( − 1 ) , p ( 0 ) = f ( 0 ) , p ′ ( 0 ) = f ′ ( 0 ) , p ′ ( 1 ) = f ′ ( 1 ) p(x),使p(-1)=f(-1),p(0)=f(0),p'(0)=f'(0),p'(1)=f'(1) p(x),使p(1)=f(1),p(0)=f(0),p(0)=f(0),p(1)=f(1)
2,写出余项并证明。
解:
1,构造差商表

xf(x)一阶二阶三阶四阶阶
-1-3
0-12
0-11-1
1-10-10
1-13342

p ( x ) = − 3 + 2 ( x + 1 ) − ( x + 1 ) x + 2 ( x + 1 ) x 2 ( x − 1 ) = 2 x 4 − 3 x 2 + x − 1 p(x)=-3+2(x+1)-(x+1)x+2(x+1)x^2(x-1)=2x^{4}-3x^2+x-1 p(x)=3+2(x+1)(x+1)x+2(x+1)x2(x1)=2x43x2+x1,可带入验证插值条件检验。

2,设余项 R ( x ) = f ( x ) − p ( x ) = k ( x ) x ( x + 1 ) x 2 ( x − 1 ) 2 R(x)=f(x)-p(x)=k(x)x(x+1)x^2(x-1)^2 R(x)=f(x)p(x)=k(x)x(x+1)x2(x1)2,构造 u ( t ) = f ( t ) − p ( t ) − k ( t ) ( t + 1 ) t 2 ( t − 1 ) 2 u(t)=f(t)-p(t)-k(t)(t+1)t^2(t-1)^2 u(t)=f(t)p(t)k(t)(t+1)t2(t1)2
u ( t ) u(t) u(t)在区间内分别有 − 1 , 二重零 0 , 二重 1 , x -1,二重零0,二重1,x 1,二重零0,二重1,x六个零点,利用罗尔定理可得 u ′ ( t ) u'(t) u(t)在区间内有五个零点,
反复使用可得 u 5 ( t ) u^5(t) u5(t)至少有一个零点,记为 ξ \xi ξ,则 u 5 ( t ) = f 5 ( ξ ) − k ( x ) 5 ! = 0 u^5(t)=f^5(\xi)-k(x)5!=0 u5(t)=f5(ξ)k(x)5!=0,推出 k ( x ) = f 5 ( ξ ) 5 ! k(x)=\frac{f^5(\xi)}{5!} k(x)=5!f5(ξ)
故余项 R ( x ) = f 5 ( ξ ) 5 ! ( x + 1 ) ( x − 1 ) 2 x 2 , ξ ∈ [ − 1 , 1 ] R(x)=\frac{f^5(\xi)}{5!}(x+1)(x-1)^2x^2, \xi\in[-1,1] R(x)=5!f5(ξ)(x+1)(x1)2x2,ξ[1,1]

分段插值

Rouge现象

该现象只一些函数使用插值预测时,会在边缘点产生极大的误差,且插值多项式次数越高误差越大,详细介绍可见该文章,形如下图:
容格现象示例
所以在一些函数中并非多项式的次数越高越能逼近原曲线,针对这类函数,我们采用分治法进行处理,即在多个区间分别使用插值法进行逼近。

分段线性插值

y = f ( x ) 在 a = x 0 < x 2 < . . . < x n = b 处的函数值 y k = f ( x k ) y=f(x)在a=x_{0}<x_{2}<...<x_{n}=b处的函数值y_{k}=f(x_{k}) y=f(x)a=x0<x2<...<xn=b处的函数值yk=f(xk),求一折现函数 φ n ( x ) \varphi_{n}(x) φn(x)满足
1,在[a,b]上连续
2, φ ( x k ) = f ( x k ) \varphi(x_{k})=f(x_{k}) φ(xk)=f(xk)函数值相同
3, φ n ( x ) = x − x k + 1 x k − x k + 1 f ( x k ) + x − x k x k + 1 − x k f ( x k + 1 ) \varphi_{n}(x)=\frac{x-x_{k+1}}{x_{k}-x_{k+1}}f(x_{k})+\frac{x-x_{k}}{x_{k+1}-x_{k}}f(x_{k+1}) φn(x)=xkxk+1xxk+1f(xk)+xk+1xkxxkf(xk+1)
则称 φ n ( x ) \varphi_{n}(x) φn(x) f ( x ) f(x) f(x)在[a,b]上的分段线性插值多项式。

定理: ∣ f ( x ) − φ ( x ) ∣ ≤ M 8 h 2 |f(x)-\varphi(x)|\le\frac{M}{8}h^2 f(x)φ(x)8Mh2 M = m a x 0 ≤ x ≤ b ∣ f ′ ′ ( x ) ∣ M=max_{0\le x\le b}|f''(x)| M=max0xbf′′(x) h = m a x 0 ≤ k ≤ n − 1 ∣ x k + 1 − x k ∣ h=max_{0\le k\le n-1}|x_{k+1}-x_{k}| h=max0kn1xk+1xk

例题 f ( x ) = 1 1 + x 2 , − 5 ≤ x ≤ 5 f(x)=\frac{1}{1+x^2},-5\le x \le 5 f(x)=1+x21,5x5,取 n = 10 n=10 n=10,按等距节点求分段线性插值多项式,记为 φ n ( x ) \varphi_{n}(x) φn(x),并求 φ n ( 0.5 ) \varphi_{n}(0.5) φn(0.5)
解:
f ( 0 ) = 1 , f ( 1 ) = 1 2 , x ∈ ( 0 , 1 ) f(0)=1,f(1)=\frac{1}{2},x\in(0,1) f(0)=1,f(1)=21,x(0,1),使用拉格朗日构造插值多项式, φ n ( x ) = y 0 l 0 ( x ) + y 1 l 1 ( x ) = 1 x − 1 0 − 1 + 1 2 x − 3 1 − 3 \varphi_{n}(x)=y_{0}l_{0}(x)+y_{1}l_{1}(x)=1\frac{x-1}{0-1}+\frac{1}{2}\frac{x-3}{1-3} φn(x)=y0l0(x)+y1l1(x)=101x1+2113x3 φ n ( 0.5 ) = 0.5 + 0.25 = 0.75 \varphi_{n}(0.5)=0.5+0.25=0.75 φn(0.5)=0.5+0.25=0.75
总的来说就是区间节点求两端函数值,中间用线性插值,全写为分段函数的形式。

总结

本章介绍了给定离散点,建立多项式函数预测其中为给定的函数值的方法,建立多项式函数的方法有以下两种:
1,Lagrange插值法, L n ( x ) = y 0 l 0 ( x ) + y 1 l 1 ( x ) + . . . + y n l n ( x ) L_{n}(x)=y_{0}l_{0}(x)+y_{1}l_{1}(x)+...+y_{n}l_{n}(x) Ln(x)=y0l0(x)+y1l1(x)+...+ynln(x) l i ( x ) = ( x − x 0 ) ( x − x 1 . . . ( x − x i − 1 ) ( x − x i + 1 ) . . . ( x − x n ) ( x i − x 0 ) ( x i − x 1 ) . . . ( x i − x i − 1 ) ( x i − x i + 1 ) . . . ( x i − x n ) l_{i}(x)=\frac{(x-x_{0})(x-x_{1}...(x-x_{i-1})(x-x_{i+1})...(x-x_{n})}{(x_{i}-x_{0})(x_{i}-x_{1})...(x_{i}-x_{i-1})(x_{i}-x_{i+1})...(x_{i}-x_{n})} li(x)=(xix0)(xix1)...(xixi1)(xixi+1)...(xixn)(xx0)(xx1...(xxi1)(xxi+1)...(xxn),该算法没有承袭性,故有Newton法来补足。
2,Newton插值法,该方法利用定义的差商进行计算,公式为 f ( x ) = f ( x 0 ) + f [ x 0 , x 1 ] ( x − x 0 ) + . . . + f [ x 0 , x 1 . . . x n , x ] ( x − x 0 ) ( x − x 1 ) . . . ( x − x n ) f(x)=f(x_{0})+f[x_{0},x_{1}](x-x_{0})+...+f[x_{0},x_{1}...x_{n},x](x-x_{0})(x-x_{1})...(x-x_{n}) f(x)=f(x0)+f[x0,x1](xx0)+...+f[x0,x1...xn,x](xx0)(xx1)...(xxn),计算时利用差商表,每一项的计算可用上一步的计算结果,加快了迭代过程。

除了函数值预测以外,还要满足导数相等时,需使用Hermite插值法,该方法使用Lagrange法证明,Newton法计算,计算时将导数值相等的点视为重节点,使用Newton法计算即可,重节点的插值即为该点导数。

最后介绍了一种应对容格现象的插值方法——分段插值法,只是将函数拆分成多个区间,分别计算插值公式,最后得到分段函数。

### 使用 AutoGPTQ 库量化 Transformer 模型 为了使用 `AutoGPTQ` 对 Transformer 模型进行量化,可以遵循如下方法: 安装所需的依赖包是必要的操作。通过 pip 安装 `auto-gptq` 可以获取最新版本的库。 ```bash pip install auto-gptq ``` 加载预训练模型并应用 GPTQ (General-Purpose Tensor Quantization) 技术来减少模型大小和加速推理过程是一个常见的流程。下面展示了如何利用 `AutoGPTQForCausalLM` 类来进行这一工作[^1]。 ```python from transformers import AutoModelForCausalLM, AutoTokenizer from auto_gptq import AutoGPTQForCausalLM model_name_or_path = "facebook/opt-350m" quantized_model_dir = "./quantized_model" tokenizer = AutoTokenizer.from_pretrained(model_name_or_path) model = AutoModelForCausalLM.from_pretrained(model_name_or_path) # 加载已经量化的模型或者创建一个新的量化器对象用于量化未压缩过的模型 gptq_model = AutoGPTQForCausalLM.from_pretrained(quantized_model_dir, model=model, tokenizer=tokenizer) ``` 对于那些希望进一步优化其部署环境中的模型性能的人来说,`AutoGPTQ` 提供了多种配置选项来自定义量化参数,比如位宽(bit-width),这有助于平衡精度损失与运行效率之间的关系。 #### 注意事项 当处理特定硬件平台上的部署时,建议查阅官方文档以获得最佳实践指导和支持信息。此外,在实际应用场景之前应该充分测试经过量化的模型以确保满足预期的质量标准。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值