数据较少的时候,用已有的数据来找到两个数据之间的值
分段插值
插值多项式
三角插值
y = a 0 + a 1 x + a 2 x 2 + . . . + a n x n y=a_0+a_1x+a_2x^2+...+a_nx^n y=a0+a1x+a2x2+...+anxn
$只要有n+1个互不相同的节点
$如果不限制多项式的次数,多项式不唯一
A X = Y AX=Y AX=Y
A是参数矩阵(A是范德蒙行列式),X是自变量,Y是因变量
因为 ∣ A ∣ = ∏ i = 1 n ∏ j = 0 n − 1 ( x i − j ) ≠ 0 |A|=\prod^n_{i=1}\prod^{n-1}_{j=0}(x_i-_j)\neq 0 ∣A∣=∏i=1n∏j=0n−1(xi−j)=0
所以方程有唯一解
1、有两个点 ( x 0 , y 0 ) , ( x 1 , y 1 ) (x_0,y_0),(x_1,y_1) (x0,y0),(x1,y1)
f ( x ) = x − x 1 x 0 − x 1 y 0 + x − x 0 x 1 − x 0 y 1 f(x)=\frac{x-x_1}{x_0-x_1}y_0+\frac{x-x_0}{x_1-x_0}y_1 f(x)=x0−x1x−x1y0+x1−x0x−x0y1
2、有三个点 ( x 0 , y 0 ) , ( x 1 , y 1 ) , ( x 2 , y 2 ) (x_0,y_0),(x_1,y_1),(x_2,y_2) (x0,y0),(x1,y1),(x2,y2)
f ( x ) = x − x 1 x 0 − x 1 x − x 2 x 0 − x 2 y 0 + x − x 0 x 1 − x 0 x − x 2 x 1 − x 2 y 1 + x − x 0 x 2 − x 0 x − x 1 x 2 − x 1 y 2 f(x)=\frac{x-x_1}{x_0-x_1}\frac{x-x_2}{x_0-x_2}y_0 +\frac{x-x_0}{x_1-x_0}\frac{x-x_2}{x_1-x_2}y_1 +\frac{x-x_0}{x_2-x_0}\frac{x-x_1}{x_2-x_1}y_2 f(x)=x0−x1x−x1x0−x2x−x2y0+x1−x0x−x0x1−x2x−x2y1+x2−x0x−x0x2−x1x−x1y2
3、推导普适结果
ω n + 1 ( x ) = ( x − x 0 ) ( x − x 1 ) . . . ( x − x n ) \omega_{n+1}(x)=(x-x_0)(x-x_1)...(x-x_n) ωn+1(x)=(x−x0)(x−x1)...(x−xn)
ω n + 1 ′ ( x k ) = ( x k − x 0 ) ( x k − x 0 ) . . . ( x k − x k − 1 ) ( x k − x k + 1 ) . . . ( x k − x n ) \omega'_{n+1}(x_k)=(x_k-x_0)(x_k-x_0)...(x_k-x_{k-1})(x_k-x_{k+1})...(x_k-x_n) ωn+1′(xk)=(xk−x0)(xk−x0)...(xk−xk−1)(xk−xk+1)...(xk−xn)
L n ( x ) = ∑ k = 0 n y k ω n + 1 ( x ) ( x − x k ) ω n + ′ ( x k ) L_n(x)=\sum^n_{k=0}y_k\frac{\omega_{n+1}(x)}{(x-x_k)\omega'_{n+}(x_k)} Ln(x)=k=0∑nyk(x−xk)ωn+′(xk)ωn+1(x)
插值多项式次数越高,误差不一定越小
回在两端产生明显的震荡,所以不要轻易使用高次数插值
因为之前的方法不够好,所以这里采用分段插值
简单思路就是找最近的四个点构成一个三次函数
证明过程不会,用不到
matlab有函数
p = pchip(x,y,new_x)
直接插值就行,这个函数看一眼就知道怎么用了。
(最为精准)
要求函数 S ( x ) S(x) S(x)满足:
1、 S ( x i ) = f ( x i ) = y i , i = 0 , 1 , 2 , . . . , n S(x_i)=f(x_i)=y_i,\qquad i=0,1,2,...,n S(xi)=f(xi)=yi,i=0,1,2,...,n
2、每个子区间上 S ( x ) S(x) S(x)是三次多项式
3、 S ( x ) S(x) S(x)二阶可微
p = spline(x,y,new_x)
p = interpn(x1,x2,...,xn,y,new_x1,,new_x2,...,,new_xn,method)