牛顿插值:设 f ( x ) = a 0 + a 1 ( x − x 0 ) + a 2 ( x − x 0 ) ( x − x 1 ) + ⋯ + a n ( x − x 0 ) … ( x − x n ) f(x)=a_0+a_1(x-x_0)+a_2(x-x_0)(x-x_1)+\dots+a_n(x-x_0)\dots(x-x_n) f(x)=a0+a1(x−x0)+a2(x−x0)(x−x1)+⋯+an(x−x0)…(x−xn)
有结论,令 f [ x 0 , … , x k ] = f [ x 1 , … , x k ] − f [ x 0 , … , x k − 1 ] x k − x 0 f[x_0,\dots,x_k]=\frac{f[x_1,\dots,x_k]-f[x_0,\dots,x_{k-1}]}{x_k-x_0} f[x0,…,xk]=xk−x0f[x1,…,xk]−f[x0,…,xk−1]
f ( x ) = f ( x 0 ) + f [ x 0 , x 1 ] ( x − x 0 ) + f [ x 0 , x 1 , x 2 ] ( 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_2](x-x_0)(x-x_1)+\dots f(x)=f(x0)+f[x0,x1](x−x0)+f[x0,x1,x2](x−x0)(x−x1)+…
证明:令 x = x k x=x_k x=xk 要证 f ( x k ) = f ( x 0 ) + f [ x 0 , x 1 ] ( x k − x 0 ) + ⋯ + f [ x 0 , … , x k ] ( x k − x 0 ) … ( x k − x k − 1 ) f(x_k)=f(x_0)+f[x_0,x_1](x_k-x_0)+\dots+f[x_0,\dots,x_k](x_k-x_0)\dots(x_k-x_{k-1}) f(xk)=f(x0)+f[x0,x1](xk−x0)+⋯+f[x0,…,xk](xk−x0)…(xk−xk−1)
拆最后一项 f [ x 0 , … , x k ] ( x k − x 0 ) … ( x k − x k − 1 ) = ( f [ x 1 , … , x k ] − f [ x 0 , … , x k − 1 ] ) ( x k − x 1 ) … ( x k − x k − 1 ) f[x_0,\dots,x_k](x_k-x_0)\dots(x_k-x_{k-1})\\=(f[x_1,\dots,x_k]-f[x_0,\dots,x_{k-1}])(x_k-x_1)\dots(x_k-x_{k-1}) f[x0,…,xk](xk−x0)…(xk−xk−1)=(f[x1,…,xk]−f[x0,…,xk−1])(xk−x1)…(xk−xk−1)
加上前面一项合并成
f [ x 0 , … , x k − 1 ] ( x k − x 0 ) … ( x k − x k − 2 ) ( x k − 1 − x 0 x k − x 0 ) f[x_0,\dots,x_{k-1}](x_k-x_0)\dots(x_k-x_{k-2})(\frac{x_{k-1}-x_0}{x_k-x_{0}}) f[x0,…,xk−1](xk−x0)…(xk−xk−2)(xk−x0xk−1−x0)
然后再拆,发现可以变成
f [ x 1 , … , x k − 1 ] ( x k − x 1 ) … ( x k − x k − 2 ) f[x_1,\dots,x_{k-1}](x_k-x_1)\dots(x_k-x_{k-2}) f[x1,…,xk−1](xk−x1)…(xk−xk−2) 以及合并后的
f [ x 0 , … , x k − 2 ] ( x k − x 0 ) … ( x k − x k − 3 ) ( x k − 2 − x 0 x k − x 0 ) f[x_0,\dots,x_{k-2}](x_k-x_0)\dots(x_k-x_{k-3})(\frac{x_{k-2}-x_0}{x_k-x_0}) f[x0,…,xk−2](xk−x0)…(xk−xk−3)(xk−x0xk−2−x0)
然后又可以继续往前和,最后发现剩下的就是 f ( x 1 ) + f [ x 1 , x 2 ] ( x k − x 1 ) + ⋯ + f [ x 1 , … , x k − 1 ] ( x k − x 1 ) … ( x k − x k − 1 ) = f ( x k ) f(x_1)+f[x_1,x_2](x_k-x_1)+\dots+f[x_1,\dots,x_{k-1}](x_k-x_1)\dots(x_k-x_{k-1})=f(x_k) f(x1)+f[x1,x2](xk−x1)+⋯+f[x1,…,xk−1](xk−x1)…(xk−xk−1)=f(xk)
感觉是很好玩的东西,而且好像比拉格朗日插值有用,可以用来动态更新插值多项式(维护每个区间的均差 f [ x l , … , x r ] f[x_l,\dots,x_r] f[xl,…,xr] )
但我只理解了均差的定义和它的巧妙,还没有完全 get 背后的原理 …