当前位置: 首页 > news >正文

数据挖掘笔记 | 插值 | 拉格朗日插值 | 龙格现象 | 埃尔米特插值 | 分段三次埃尔米特插值

Interpolation插值

​ 对于缺失值的处理,比较常见的是数值分析中的插值和拟合这两种方法。插值指的是在离散数据的基础上补插连续函数,使得这条连续曲线通过全部给定的离散数据点;拟合则是找到一条“最优”的曲线,尽可能地贴近平面上一系列的点[1]。

​ 设函数 y = f ( x ) y=f(x) y=f(x)在区间 [ a , b ] [a,b] [a,b]上有定义,且已知在点:
a ≤ x 0 < x 1 < ⋯ < x n ≤ b (1) a\le x_0<x_1<\cdots<x_n\le b\tag{1} ax0<x1<<xnb(1)
上的值分别为: y 0 , y 1 , ⋯ , y n y_0,y_1,\cdots ,y_n y0,y1,,yn,若存在一简单函数 P ( x ) P(x) P(x)使得:
P ( x i ) = y i , ( i = 0 , 1 , 2 , ⋯ , n ) , (2) P(x_i)=y_i,\quad (i=0,1,2,\cdots, n),\tag{2} P(xi)=yi,(i=0,1,2,,n),(2)
则称 P ( x ) P(x) P(x) f ( x ) f(x) f(x)的插值函数,点 x 0 , x 1 , ⋯ , x n x_0,x_1,\cdots,x_n x0,x1,,xn称为插值节点,包含插值节点的区间 [ a , b ] [a,b] [a,b]称为插值区间,求插值函数 P ( x ) P(x) P(x)的方法称为插值法[2]。

​ 设有 n + 1 n+1 n+1个互不相同的节点 ( x i , y i ) , ( i = 0 , 1 , 2 , ⋯ , n ) (x_i,y_i),(i=0,1,2,\cdots,n) (xi,yi),(i=0,1,2,,n),则存在唯一的多项式:
L n ( x ) = a 0 + a 1 x + a 2 x 2 + ⋯ + a n x n , (3) L_n(x)=a_0+a_1x+a_2x^2+\cdots+a_nx^n,\tag{3} Ln(x)=a0+a1x+a2x2++anxn,(3)
使得 L n ( x j ) = y j , ( j = 0 , 1 , 2 , ⋯ , n ) L_n(x_j)=y_j,(j=0,1,2,\cdots,n) Ln(xj)=yj,(j=0,1,2,,n)。只要 n + 1 n+1 n+1个节点互异,满足上述条件的多项式是唯一存在的,如果不限制多项式的次数,插值多项式并不唯一,下面证明上述结论[2]:

​ 构造如下方程组:
{ a 0 + a 1 x 0 + a 2 x 0 2 + … + a n x 0 n = y 0 a 0 + a 1 x 1 + a 2 x 1 2 + … + a n x 1 n = y 1 ⋮ a 0 + a 1 x n + a 2 x n 2 + … + a n x n n = y n . (4) \left\{ \begin{array}{l} a_0 + a_1 x_0 + a_2 x_0^2 + \ldots + a_n x_0^n = y_0 \\ a_0 + a_1 x_1 + a_2 x_1^2 + \ldots + a_n x_1^n = y_1 \\ \vdots \\ a_0 + a_1 x_n + a_2 x_n^2 + \ldots + a_n x_n^n = y_n \end{array} \right..\tag{4} a0+a1x0+a2x02++anx0n=y0a0+a1x1+a2x12++anx1n=y1a0+a1xn+a2xn2++anxnn=yn.(4)
​ 令:
A = [ 1 x 0 ⋯ x 0 n 1 x 1 ⋯ x 1 n ⋮ ⋮ ⋱ ⋮ 1 x n ⋯ x n n ] , X = [ a 0 a 1 ⋮ a n ] , Y = [ y 0 y 1 ⋮ y n ] . \boldsymbol{A} = \begin{bmatrix} 1 & x_0 & \cdots & x_0^n \\ 1 & x_1 & \cdots & x_1^n \\ \vdots & \vdots & \ddots & \vdots \\ 1 & x_n & \cdots & x_n^n \end{bmatrix}, \quad \boldsymbol{X} = \begin{bmatrix} a_0 \\ a_1 \\ \vdots \\ a_n \end{bmatrix},\quad \boldsymbol{Y} = \begin{bmatrix} y_0 \\ y_1 \\ \vdots \\ y_n \end{bmatrix}. A= 111x0x1xnx0nx1nxnn ,X= a0a1an ,Y= y0y1yn .
​ 对于方程组组 A X = Y \boldsymbol {A}\boldsymbol {X}=\boldsymbol{Y} AX=Y,由于矩阵 A \boldsymbol{A} A是Vandermonde范德蒙矩阵,故其行列式[3]:
∣ A ∣ = ∏ i = 1 n ∏ j = 0 i − 1 ( x i − x j ) ≠ 0. (5) |\boldsymbol{A}|=\prod_{i=1}^{n}\prod_{j=0}^{i-1}(x_i-x_j)\neq0.\tag{5} A=i=1nj=0i1(xixj)=0.(5)
​ 因此方程组 A X = Y \boldsymbol {A}\boldsymbol {X}=\boldsymbol{Y} AX=Y有唯一解,从而公式(3)唯一存在。

Lagrangian Polynomial Interpolation拉格朗日插值

​ 拉格朗日插值的思想就是对于每个数据点都构造一个拉格朗日基函数 l i ( x ) l_i(x) li(x),且对于数据点 x j x_j xj满足以下性质:
在这里插入图片描述
​ 假设有三个点:
( 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),
则拉格朗日基函数可以写为:
l 0 ( x ) = ( x − x 1 ) ( x − x 2 ) ( x 0 − x 1 ) ( x 0 − x 2 ) , l 1 ( x ) = ( x − x 0 ) ( x − x 2 ) ( x 1 − x 0 ) ( x 1 − x 2 ) , l 2 ( x ) = ( x − x 0 ) ( x − x 1 ) ( x 2 − x 0 ) ( x 2 − x 1 ) . (7) l_0(x) = \frac{(x - x_1)(x - x_2)}{(x_0 - x_1)(x_0 - x_2)},\\ l_1(x) = \frac{(x - x_0)(x - x_2)}{(x_1 - x_0)(x_1 - x_2)},\\ l_2(x) = \frac{(x - x_0)(x - x_1)}{(x_2 - x_0)(x_2 - x_1)}.\tag{7} l0(x)=(x0x1)(x0x2)(xx1)(xx2),l1(x)=(x1x0)(x1x2)(xx0)(xx2),l2(x)=(x2x0)(x2x1)(xx0)(xx1).(7)
​ 因此可以构造插值多项式:
L 2 ( x ) = y 0 l 0 ( x ) + y 1 l 1 ( x ) + y 2 l 2 ( x ) . (8) L_2(x) = y_0 l_0(x) + y_1 l_1(x) + y_2 l_2(x).\tag{8} L2(x)=y0l0(x)+y1l1(x)+y2l2(x).(8)
​ 对于一般形式,拉格朗日基函数为[4]:
l i ( x ) = ∏ j ≠ i ( x − x j ) ∏ j ≠ i ( x i − x j ) . (9) l_i(x) = \frac{\prod_{j\neq i}(x-x_j)}{\prod_{j\neq i}(x_i-x_j)}.\tag{9} li(x)=j=i(xixj)j=i(xxj).(9)
​ 构造辅助函数:
ω n + 1 ( x ) = ( x − x 0 ) ( x − x 1 ) ⋯ ( x − x n ) . (10) \omega_{n+1}(x) = (x - x_0)(x - x_1) \cdots (x - x_n).\tag{10} ωn+1(x)=(xx0)(xx1)(xxn).(10)

​ 对于上式的求导可以选择取对数或使用乘法法则,这里选择取对数进行求导:
ln ⁡ ω n + 1 ( x ) = ln ⁡ [ ( x − x 0 ) ( x − x 1 ) ⋯ ( x − x n ) ] . (11) \ln \omega_{n+1}(x)=\ln [(x-x_0)(x-x_1)\cdots (x-x_n)].\tag{11} lnωn+1(x)=ln[(xx0)(xx1)(xxn)].(11)
​ 然后对两边求导后可得:
ω n + 1 ′ ( x ) = ω n + 1 ( x ) ∑ i = 0 n 1 x − x i . (12) \omega'_{n+1}(x)=\omega_{n+1}(x)\sum_{i=0}^{n}\frac{1}{x-x_i}.\tag{12} ωn+1(x)=ωn+1(x)i=0nxxi1.(12)
​ 展开可得:
ω n + 1 ′ ( x ) = ( x − x 1 ) ⋯ ( x − x n ) + ( x − x 0 ) ⋯ ( x − x n ) + ⋯ + ( x − x 0 ) ⋯ ( x − x n − 1 ) . (13) \omega'_{n+1}(x)=(x-x_1)\cdots(x-x_n)+(x-x_0)\cdots(x-x_n)+\cdots+(x-x_0)\cdots(x-x_{n-1}).\tag{13} ωn+1(x)=(xx1)(xxn)+(xx0)(xxn)++(xx0)(xxn1).(13)
​ 代入具体的 x = x k x=x_k x=xk最终可得:

ω n + 1 ′ ( x k ) = ( x k − x 0 ) ( x k − x 1 ) ⋯ ( x k − x k − 1 ) ( x k − x k + 1 ) ⋯ ( x k − x n ) . (14) \omega'_{n+1}(x_k) = (x_k - x_0)(x_k - x_1) \cdots (x_k - x_{k-1})(x_k - x_{k+1}) \cdots (x_k - x_n).\tag{14} ωn+1(xk)=(xkx0)(xkx1)(xkxk1)(xkxk+1)(xkxn).(14)

​ 对于式(9)、式(10)和式(14),可将拉格朗日基函数化简为如下形式:
l i ( x ) = ω n + 1 ( x ) ( x − x i ) ω n + 1 ′ ( x i ) . (15) l_i(x)=\frac{\omega_{n+1}(x)}{(x-x_i)\omega'_{n+1}(x_i)}.\tag{15} li(x)=(xxi)ωn+1(xi)ωn+1(x).(15)
​ 拉格朗日插值多项式可化简为如下形式:
L n ( x ) = ∑ k = 0 n y k ω n + 1 ( x ) ( x − x i ) ω n + 1 ′ ( x i ) . (16) L_n(x)=\sum_{k=0}^ny_k\frac{\omega_{n+1}(x)}{(x-x_i)\omega'_{n+1}(x_i)}.\tag{16} Ln(x)=k=0nyk(xxi)ωn+1(xi)ωn+1(x).(16)
​ 如果上面的推导过于抽象,那接下来以 n = 2 n=2 n=2为例带入上述式子计算:

​ 对于 i = 0 i=0 i=0的情况:
l 0 ( x ) = ( x − x 1 ) ( x − x 2 ) ( x 0 − x 1 ) ( x 0 − x 2 ) , (17) l_0(x) = \frac{(x - x_1)(x - x_2)}{(x_0 - x_1)(x_0 - x_2)},\tag{17} l0(x)=(x0x1)(x0x2)(xx1)(xx2),(17)

ω 3 ( x ) = ( x − x 0 ) ( x − x 1 ) ( x − x 2 ) , (18) \omega_{3}(x) = (x - x_0)(x - x_1)(x - x_2),\tag{18} ω3(x)=(xx0)(xx1)(xx2),(18)

ω 3 ′ ( x 0 ) = ( x 0 − x 1 ) ( x 0 − x 2 ) + ( x 0 − x 0 ) ( x − x 1 ) + ( x 0 − x 0 ) ( x 0 − x 1 ) = ( x 0 − x 1 ) ( x 0 − x 2 ) . (19) \omega'_{3}(x_0)=(x_0-x_1)(x_0-x_2)+(x_0-x_0)(x-x_1)+(x_0-x_0)(x_0-x_1)\\ =(x_0-x_1)(x_0-x_2)\tag{19}. ω3(x0)=(x0x1)(x0x2)+(x0x0)(xx1)+(x0x0)(x0x1)=(x0x1)(x0x2).(19)

​ 可以观察到式(15)与式(16)成立。

Runge Phenomenon龙格现象

​ 在科学计算领域,龙格现象(Runge)指的是对于某些函数,使用均匀节点构造高次多项式差值时,在插值区间的边缘的误差可能很大的现象。它是由Runge在研究多项式差值的误差时发现的,这一发现很重要,因为它表明,并不是插值多项式的阶数越高,效果就会越好[5]。均匀分布节点插值在两端处波动极大,产生明显的震荡,均匀分布节点进行的插值就是一种拉格朗日插值的具体应用。在不熟悉曲线运动趋势的前提下,不要轻易使用高次插值。

​ 同样属于多项式插值的还有牛顿插值[6],尽管与拉格朗日插值法相比,牛顿插值法的计算过程具有继承性,但是牛顿插值也存在龙格现象的问题。拉格朗日插值和牛顿插值仅仅要求插值多项式在插值节点处与被插函数有相等的函数值,而这种插值多项式却不能全面反映被插值函数的性态。然而在许多实际问题中,不仅要求插值函数与被插值函数在所有节点处有相同的函数值,它也需要在一个或全部节点上插值多项式与被插函数有相同的低阶甚至高阶的导数值[7]。

​ 所谓“低阶导数值相等”,指的是插值函数在节点附近的变化趋势与被插值函数更加接近,使得插值函数在节点处的切线与被插值函数的切线重合,从而在局部具有更好的逼近性;而“高阶导数值相等”指的是插值函数在节点处及其邻域内具有更好的逼近特性,确保对函数的光滑性要求。

Hermite Interpolation埃尔米特插值

​ 设函数 f ( x ) f(x) f(x)在区间 [ a , b ] [a, b] [a,b]上有 n + 1 n+1 n+1个互异节点[2]:
a = x 0 < x 1 < x 2 < … < x n = b . (20) a = x_0 < x_1 < x_2 < \ldots < x_n = b.\tag{20} a=x0<x1<x2<<xn=b.(20)
​ 定义在 [ a , b ] [a, b] [a,b]上函数 f ( x ) f(x) f(x)在节点上满足:
f ( x i ) = y i , f ′ ( x i ) = y i ′ ( i = 0 , 1 , 2 , … , n ) . (21) f(x_i) = y_i, \quad f'(x_i) = y'_i \quad (i = 0, 1, 2, \ldots, n).\tag{21} f(xi)=yi,f(xi)=yi(i=0,1,2,,n).(21)
​ 可唯一确定一个次数不超过 2 n + 1 2n + 1 2n+1的多项式 H 2 n + 1 ( x ) = H ( x ) H_{2n+1}(x) = H(x) H2n+1(x)=H(x)满足:
H ( x j ) = y j , H ′ ( x j ) = m j = y i ′ ( j = 0 , 1 , … , n ) , (22) H(x_j) = y_j, \quad H'(x_j) = m_j = y'_i \quad (j = 0, 1, \ldots, n), \tag{22} H(xj)=yj,H(xj)=mj=yi(j=0,1,,n),(22)
因为每个节点有2个条件(函数值和导数值),总共 2 n + 2 2n+2 2n+2个条件,所以可以唯一确定一个次数不超过 2 n + 1 2n+1 2n+1的多项式。

​ 其余项为:
R ( x ) = f ( x ) − H ( x ) = f ( 2 n + 2 ) ( ξ ) ( 2 n + 2 ) ! ω 2 n + 2 ( x ) , (23) R(x) = f(x) - H(x) = \frac{f^{(2n+2)}(\xi)}{(2n+2)!} \omega_{2n+2}(x),\tag{23} R(x)=f(x)H(x)=(2n+2)!f(2n+2)(ξ)ω2n+2(x),(23)
上式中, f ( 2 n + 2 ) ( ξ ) f^{(2n+2)}(\xi) f(2n+2)(ξ)表示原函数 f ( x ) f(x) f(x) 2 n + 2 2n+2 2n+2阶导数在m某一点 ξ \xi ξ处的值,其中 ξ ∈ ( a , b ) \xi\in(a,b) ξ(a,b)。余项可以用来衡量插值精度或指导节点选择和插值方法优化。

ω 2 n + 2 ( x ) \omega_{2n+2}(x) ω2n+2(x)的定义如下:
ω 2 n + 2 ( x ) = ∏ i = 0 n ( x − x i ) 2 . (24) \omega_{2n+2}(x)=\prod_{i=0}^n(x-x_i)^2.\tag{24} ω2n+2(x)=i=0n(xxi)2.(24)
​ 下面以豆包给我的三个节点的示例演示埃尔米特插值:

​ 设节点为 x 0 = 0 x_0 = 0 x0=0, x 1 = 1 x_1 = 1 x1=1, x 2 = 2 x_2 = 2 x2=2, 已知 y 0 = f ( x 0 ) = 0 y_0 = f(x_0) = 0 y0=f(x0)=0 y 1 = f ( x 1 ) = 1 y_1 = f(x_1) = 1 y1=f(x1)=1 y 2 = f ( x 2 ) = 4 y_2 = f(x_2) = 4 y2=f(x2)=4 y 0 ′ = f ′ ( x 0 ) = 1 y'_0 = f'(x_0) = 1 y0=f(x0)=1 y 1 ′ = f ′ ( x 1 ) = 3 y'_1 = f'(x_1) = 3 y1=f(x1)=3 y 2 ′ = f ′ ( x 2 ) = 7 y'_2 = f'(x_2) = 7 y2=f(x2)=7

​ 现需要找一个次数不超过 2 n + 1 = 5 2n + 1 = 5 2n+1=5的多项式:
H ( x ) = a 0 + a 1 x + a 2 x 2 + a 3 x 3 + a 4 x 4 + a 5 x 5 . (25) H(x) = a_0 + a_1 x + a_2 x^2 + a_3 x^3 + a_4 x^4 + a_5 x^5.\tag{25} H(x)=a0+a1x+a2x2+a3x3+a4x4+a5x5.(25)
​ 根据埃尔米特插值条件:
H ( x 0 ) = a 0 = 0 , H ( x 1 ) = a 0 + a 1 + a 2 + a 3 + a 4 + a 5 = 1 , H ( x 2 ) = a 0 + 2 a 1 + 4 a 2 + 8 a 3 + 16 a 4 + 32 a 5 = 4. (26) H(x_0) = a_0 = 0,\\ H(x_1) = a_0 + a_1 + a_2 + a_3 + a_4 + a_5 = 1,\\ H(x_2) = a_0 + 2a_1 + 4a_2 + 8a_3 + 16a_4 + 32a_5 = 4 .\tag{26} H(x0)=a0=0,H(x1)=a0+a1+a2+a3+a4+a5=1,H(x2)=a0+2a1+4a2+8a3+16a4+32a5=4.(26)
​ 对$ H(x) $求导得到:
H ′ ( x ) = a 1 + 2 a 2 x + 3 a 3 x 2 + 4 a 4 x 3 + 5 a 5 x 4 . (27) H'(x) = a_1 + 2a_2 x + 3a_3 x^2 + 4a_4 x^3 + 5a_5 x^4.\tag{27} H(x)=a1+2a2x+3a3x2+4a4x3+5a5x4.(27)
​ 可以求得:
H ′ ( x 0 ) = a 1 = 1 , H ′ ( x 1 ) = a 1 + 2 a 2 + 3 a 3 + 4 a 4 + 5 a 5 = 3 , H ′ ( x 2 ) = a 1 + 4 a 2 + 12 a 3 + 32 a 4 + 80 a 5 = 7. (28) H'(x_0) = a_1 = 1,\\ H'(x_1) = a_1 + 2a_2 + 3a_3 + 4a_4 + 5a_5 = 3,\\ H'(x_2) = a_1 + 4a_2 + 12a_3 + 32a_4 + 80a_5 = 7.\tag{28} H(x0)=a1=1,H(x1)=a1+2a2+3a3+4a4+5a5=3,H(x2)=a1+4a2+12a3+32a4+80a5=7.(28)
​ 由 a 0 = 0 a_0 = 0 a0=0 a 1 = 1 a_1 = 1 a1=1,将其代入其他方程:
{ 1 + a 2 + a 3 + a 4 + a 5 = 1 1 + 2 a 2 + 4 a 3 + 8 a 4 + 16 a 5 = 4 1 + 2 a 2 + 3 a 3 + 4 a 4 + 5 a 5 = 3 1 + 4 a 2 + 12 a 3 + 32 a 4 + 80 a 5 = 7 . (29) \begin{cases} 1 + a_2 + a_3 + a_4 + a_5 = 1 \\ 1 + 2a_2 + 4a_3 + 8a_4 + 16a_5 = 4 \\ 1 + 2a_2 + 3a_3 + 4a_4 + 5a_5 = 3 \\ 1 + 4a_2 + 12a_3 + 32a_4 + 80a_5 = 7 \end{cases} .\tag{29} 1+a2+a3+a4+a5=11+2a2+4a3+8a4+16a5=41+2a2+3a3+4a4+5a5=31+4a2+12a3+32a4+80a5=7.(29)
​ 化简得:
{ a 2 + a 3 + a 4 + a 5 = 0 2 a 2 + 4 a 3 + 8 a 4 + 16 a 5 = 3 2 a 2 + 3 a 3 + 4 a 4 + 5 a 5 = 2 4 a 2 + 12 a 3 + 32 a 4 + 80 a 5 = 6 . (30) \begin{cases} a_2 + a_3 + a_4 + a_5 = 0 \\ 2a_2 + 4a_3 + 8a_4 + 16a_5 = 3 \\ 2a_2 + 3a_3 + 4a_4 + 5a_5 = 2 \\ 4a_2 + 12a_3 + 32a_4 + 80a_5 = 6 \end{cases} .\tag{30} a2+a3+a4+a5=02a2+4a3+8a4+16a5=32a2+3a3+4a4+5a5=24a2+12a3+32a4+80a5=6.(30)
​ 求解可得 a 2 a_2 a2 a 3 a_3 a3 a 4 a_4 a4 a 5 a_5 a5的值,进而得到插值多项式 H ( x ) H(x) H(x)

Piecewise Cubic Hermite Interpolation分段三次埃尔米特插值

​ 在给定一系列节点 x 0 < x 1 < x 2 < ⋯ < x n x_0 < x_1 < x_2 < \cdots < x_n x0<x1<x2<<xn以及对应的函数值 f ( x i ) f(x_i) f(xi) 和导数值 f ′ ( x i ) f'(x_i) f(xi) ( i = 0 , 1 , ⋯ , n i = 0, 1, \cdots, n i=0,1,,n)的基础上,不再像传统埃尔米特插值那样构建一个高次的全局多项式,而是把区间 [ x 0 , x n ] [x_0, x_n] [x0,xn]划分成多个子区间 [ x i , x i + 1 ] [x_i, x_{i+1}] [xi,xi+1] ( i = 0 , 1 , ⋯ , n − 1 i = 0, 1, \cdots, n-1 i=0,1,,n1),在每个子区间上分别构造一个三次多项式来进行插值,所以称为分段三次埃尔米特插值。

​ 对于每个子区间 [ x i , x i + 1 ] [x_i, x_{i+1}] [xi,xi+1],设对应的三次多项式为 H i ( x ) H_i(x) Hi(x),其形式通常可以表示为:
H i ( x ) = a i 0 + a i 1 ( x − x i ) + a i 2 ( x − x i ) 2 + a i 3 ( x − x i ) 3 . (31) H_i(x) = a_{i0} + a_{i1}(x - x_i) + a_{i2}(x - x_i)^2 + a_{i3}(x - x_i)^3.\tag{31} Hi(x)=ai0+ai1(xxi)+ai2(xxi)2+ai3(xxi)3.(31)
​ 这里让豆包给我绘制了不同插值方法的可视化对比:在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import lagrange, CubicHermiteSplinedef f(x):return 1 / (1 + 25 * x ** 2)def uniform_interpolation(x, n):x_nodes = np.linspace(-1, 1, n)y_nodes = f(x_nodes)return np.interp(x, x_nodes, y_nodes)def lagrange_interpolation(x, n):x_nodes = np.linspace(-1, 1, n)y_nodes = f(x_nodes)poly = lagrange(x_nodes, y_nodes)return poly(x)def hermite_interpolation(x, n):x_nodes = np.linspace(-1, 1, n)y_nodes = f(x_nodes)dy_nodes = np.gradient(y_nodes, x_nodes[1] - x_nodes[0])hermite = CubicHermiteSpline(x_nodes, y_nodes, dy_nodes)return hermite(x)def cubic_hermite_interpolation(x, n):x_nodes = np.linspace(-1, 1, n)y_nodes = f(x_nodes)dy_nodes = np.gradient(y_nodes, x_nodes[1] - x_nodes[0])cubic_hermite = CubicHermiteSpline(x_nodes, y_nodes, dy_nodes)return cubic_hermite(x)# 生成用于绘制函数的 x 值
x = np.linspace(-1, 1, 500)
y = f(x)# 绘制原函数
plt.figure(figsize=(14, 8.6))
plt.plot(x, y, label='f(x)')# 均匀节点分布插值
n = 10
y_uniform = uniform_interpolation(x, n)
plt.plot(x, y_uniform, label=f'Uniform Interpolation (n={n})')# 拉格朗日插值
y_lagrange = lagrange_interpolation(x, n)
plt.plot(x, y_lagrange, label=f'Lagrange Interpolation (n={n})')# 埃尔米特插值
y_hermite = hermite_interpolation(x, n)
plt.plot(x, y_hermite, label=f'Hermite Interpolation (n={n})')# 三次埃尔米特插值
y_cubic_hermite = cubic_hermite_interpolation(x, n)
plt.plot(x, y_cubic_hermite, label=f'Cubic Hermite Interpolation (n={n})')plt.legend()
plt.xlabel('x', fontsize=14)
plt.ylabel('y', fontsize=14)
plt.title('Interpolation Comparison', fontsize=16)
plt.savefig('Interpolation Comparison.png', dpi=600)
plt.show()

md文件见:https://github.com/ChuantaoLi/Curriculum-Learning-and-Data-Mining/tree/main/24%E6%95%B0%E6%8D%AE%E6%8C%96%E6%8E%98%E4%B8%89%E8%BD%AE%E8%80%83%E6%A0%B8/%E6%8F%92%E5%80%BC

参考博客

  1. 【数值分析——插值法】拉格朗日插值多项式及Matlab实现
  2. 数值计算方法 华北理工大学_中国大学MOOC(慕课)
  3. 特殊矩阵(8):Vandermonde 矩阵
  4. 数值分析复习:Lagrange插值
  5. 龙格现象(Runge Phenomenon)
  6. 如何直观、通俗地理解牛顿插值? - 睿智君的回答 - 知乎
  7. 【强烈推荐】清风:数学建模算法、编程和写作培训的视频课程以及Matlab等软件教学

相关文章:

数据挖掘笔记 | 插值 | 拉格朗日插值 | 龙格现象 | 埃尔米特插值 | 分段三次埃尔米特插值

Interpolation插值 ​ 对于缺失值的处理&#xff0c;比较常见的是数值分析中的插值和拟合这两种方法。插值指的是在离散数据的基础上补插连续函数&#xff0c;使得这条连续曲线通过全部给定的离散数据点&#xff1b;拟合则是找到一条“最优”的曲线&#xff0c;尽可能地贴近平…...

Ubuntu网络配置(桥接模式, nat模式, host主机模式)

windows上安装了vmware虚拟机&#xff0c; vmware虚拟机上运行着ubuntu系统。windows与虚拟机可以通过三种方式进行通信。分别是桥接模式&#xff1b;nat模式&#xff1b;host模式 一、桥接模式 所谓桥接模式&#xff0c;也就是虚拟机与宿主机处于同一个网段&#xff0c; 宿主机…...

【Linux网络编程】第十七弹---深入理解以太网与ARP协议:从帧格式到数据报解析

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】【Linux网络编程】 目录 1、认识以太网 1.1、以太网帧格式 1.2、认识 MAC 地址 1.3、对比理解 MAC 地址和 IP 地址 1.4、认识 MT…...

AVL 树

1.AVL树的概念 AVL树是最先发明的自平衡二叉查找树&#xff0c;AVL树可以是一棵空树&#xff0c;或者具有以下性质的树&#xff1a;左右子树都是AVL树。且左右子树的高度差的绝对值不超过1。 AVL树是一颗高度平衡搜索二叉树&#xff0c;通过控制高度去控制平衡。 AVL树的发明…...

PHP关键字Self、Static和parent的区别

简介 在使用PHP代码时&#xff0c;您可能经常会遇到parent::、static::和self::。但是当你第一次作为一个开发人员开始的时候&#xff0c;有时候你会很困惑&#xff0c;不知道它们是做什么的&#xff0c;以及它们之间的区别。 在我第一次作为开发人员开始工作后的很长一段时间…...

Vscode左大括号不另起一行、注释自动换行

参考大佬的博客VSCode 格式化 cpp 文件时配置左大括号不换行_vscode大括号不换行-CSDN博客 Clang_format_style {BasedOnStyle: Chromium, IndentWidth: 4}...

golang标准库archive/tar实现打包压缩及解压

文章目录 前言一、单个文件操作1.单个文件打包示例2.单个文件解包示例 二、目录示例1.打包压缩2.解包 补充 前言 这个包就是将文件进行打包和解包&#xff0c;通俗理解就是Linux 下的 tar 命令。 主要是通过 tar.Reader 读取 tar 包&#xff0c;通过 tar.Writer 写入 tar包&am…...

模方匀色功能中,加载的模板文件从哪里来

使用 DasViewerV3.1.2及以上版本导出的颜色调整文件 模方是一款针对实景三维模型的冗余碎片、水面残缺、道路不平、标牌破损、纹理拉伸模糊等共性问题研发的实景三维模型修复编辑软件。模方4.2新增内置“自动UV展开”功能&#xff0c;新增局部调色功能和DOM匀色功能等。同时可与…...

maya 删除 Ctrl + Delete vs Delete

在 Autodesk Maya 中删除选定顶点的步骤&#xff1a; 1. 选择顶点&#xff1a; 进入顶点选择模式&#xff1a; 按 F9 键&#xff08;切换到顶点选择模式&#xff09;。 或者&#xff0c;在工具栏中点击顶点选择图标&#xff08;顶点模式&#xff09;。 在视图中选择您想要删…...

为何String不可变,String的运算符重载

1.为何String不可变 java9之前&#xff0c;String的源码中是用字符数组实现的&#xff0c;同时使用了final和private修饰&#xff0c;被final修饰的结果就是变量不可修改、类不可继承、方法不可重写&#xff0c;被private修饰就无法对外暴露&#xff0c;这就是为何String不可变…...

WebRTC :原理、协议和应用场景

WebRTC&#xff08;Web Real-Time Communication&#xff09;是一种用于在Web浏览器和移动应用程序之间进行实时通信的开放标准。它通过将音频、视频和数据传输集成到Web浏览器中&#xff0c;使得实时通信变得简单且无需任何插件或第三方软件。 一、WebRTC 的原理 WebRTC的实…...

Windows FTP服务器搭建指南

在Windows上搭建FTP服务器可以通过以下步骤完成。这里以Windows 10为例&#xff0c;使用系统自带的IIS&#xff08;Internet Information Services&#xff09;来搭建FTP服务器。 步骤1&#xff1a;安装IIS和FTP服务器组件 打开“控制面板”&#xff1a; 按 Win R&#xff0c…...

DP协议:Link层(二)

书接上文,内容多了难免会有一种知识点零碎感,但是坚持学下去,有一天你会发现已经不知不觉可以链接成一张知识网络了。 AUX提供的services 前面咱刚刚简单的认识了AUX CH的状态和仲裁,这次咱们接着聊聊AUX提供的services。 管理连接和设备:AUX CH就像是一个管家,负责找到…...

HAL 库 HAL_UARTEx_ReceiveToIdle_IT 函数解析

一、存在位置&#xff1a;stm32f1xx_hal_uart.c 二、具体代码 二、返回值&#xff1a;HAL_StatusTypeDef 通过查看返回值HAL_StatusTypeDef在stm32f1xx_hal_edf.h文件中定义为结构体类型。 status&#xff1a;&#xff08;进展的&#xff09;状况&#xff0c;情形 三、函数名…...

C++ 设计模式:职责链模式(Chain of Responsibility)

链接&#xff1a;C 设计模式 链接&#xff1a;C 设计模式 - 组合模式 职责链模式&#xff08;Chain of Responsibility Pattern&#xff09;是一种行为型设计模式&#xff0c;它允许多个对象都有机会处理请求&#xff0c;从而避免请求的发送者和接收者之间的耦合。这些对象通过…...

数据库约束和查询

一 约束意义 这个后面的字段是什么意思呢? 先前说数据类型是一种约束&#xff0c;约束我们只能放该类型的数据&#xff0c;还有其它的约束来保证数据的合法性&#xff0c;下面的字段就和约束有关。 编译器的编译就是一个约束&#xff0c;保证我们的代码一定是语法合格的。我们…...

【文献精读笔记】Explainability for Large Language Models: A Survey (大语言模型的可解释性综述)(二)

****非斜体正文为原文献内容&#xff08;也包含笔者的补充&#xff09;&#xff0c;灰色块中是对文章细节的进一步详细解释&#xff01; 3.1.2 基于注意力的解释&#xff08;Attention-Based Explanation&#xff09; 注意力机制可以揭示输入数据中各个部分之间的关系&#…...

AI大模型-提示工程学笔记1

卷首语&#xff1a;我所知的是我自己非常无知&#xff0c;所以我要不断学习。 写给AI入行比较晚的小白们&#xff08;比如我自己&#xff09;看的&#xff0c;大神可以直接路过无视了。 几个基本概念 1. 给LLM提示 用户可以通过简单的提示词&#xff08;Prompts&#xff09…...

webrtc-internals调试工具

Google 的 Chrome&#xff08;87 或更高版本&#xff09;WebRTC 内部工具是一套内置于 Chrome 浏览器中的调试工具; webrtc-internals 能够查看有关视频和音频轨道、使用的编解码器以及流的一般质量的详细信息。这些知识对于解决音频和视频质量差的问题非常有帮助。 webrtc-int…...

百度PaddleSpeech识别大音频文件报错

一、背景 公司前同事留下了一套语音识别项目&#xff0c;内部使用百度PaddleSpeech。在项目验收的时候发现无法识别大音频文件&#xff0c;但是可以识别小音频文件。 这套项目是通过python调用的百度PaddleSpeech&#xff0c;然后提供了restful接口&#xff0c;然后java项目可…...

No.3十六届蓝桥杯备战|数据类型长度|sizeof|typedef|练习(C++)

数据类型⻓度 每⼀种数据类型都有⾃⼰的⻓度&#xff0c;使⽤不同的数据类型&#xff0c;能够创建出⻓度不同的变量&#xff0c;变量⻓度的不同&#xff0c;存储的数据范围就有所差异。 sizeof操作符 sizeof 是⼀个关键字&#xff0c;也是操作符&#xff0c;专⻔是⽤来计算特…...

MapReduce相关概念(自用)

MapReduce&#xff1a;分布式计算模型 MapReduce 是一种分布式计算模型&#xff0c;由 Google 在 2004 年提出&#xff0c;用于大规模数据集&#xff08;TB 或 PB 级别&#xff09;的分布式处理。它通过简单的编程模型&#xff0c;将复杂的分布式计算分解为两个基本阶段&#…...

Nginx - 整合lua 实现对POST请求的参数拦截校验(不使用Openresty)

文章目录 概述步骤 1: 安装 Nginx 和 Lua 模块步骤 2: 创建 Lua 脚本用于参数校验步骤 3: 配置 Nginx 使用 Lua 脚本写法二&#xff1a; 状态码写法三 &#xff1a; 返回自定义JSON复杂的正则校验 步骤 4: 测试和验证ngx.HTTP_* 枚举值 概述 一个不使用 OpenResty 的 Nginx 集…...

I2C(一):存储器模式:stm32作为主机对AT24C02写读数据

存储器模式&#xff1a;在HAL库中&#xff0c;I2C有专门对存储器外设设置的库函数 I2C&#xff08;一&#xff09;&#xff1a;存储器模式的使用 1、I2C轮询式写读AT24C02一页数据2、I2C轮询式写读AT24C02多页数据3、I2C中断式写读AT24C02一页数据4、I2C使用DMA式写读AT24C02一…...

AI助手网站

​​​​​​​ chatgpt &#xff1a;https://chatgpt.com/ https://openai.com/index/chatgpt/ 百度ai助手 https://chat.baidu.com/ 百度AI助手https://chat.baidu.com/ 文心快码 文心快码BaiduComate 文心快码BaiduComate 文心快码BaiduComate有代码问题&#xff0c;问文…...

初始nginx

华子目录 nginx介绍nginx功能介绍基础特性web服务相关功能nginx进程结构web请求处理机制 nginx进程间通信nginx启动与http连接建立http处理过程 nginx模块介绍nginx命令演示 nginx介绍 nginx是免费的、开源的、高性能的HTTP和反向代理服务器、邮件代理服务器、以及TCP/UDP代理服…...

可扩展性设计架构模式——事件驱动架构

事件驱动架构&#xff08;Event-Driven Architecture, EDA&#xff09;是一种可扩展性设计软件架构模式&#xff0c;它通过事件来触发和通信&#xff08;以事件为核心&#xff09;&#xff0c;实现不同系统组件之间的解耦&#xff08;促进应用程序或系统部件之间的松耦合通信&a…...

Prometheus 专栏 —— Prometheus安装、配置

配置文件基本结构 global: 全局配置 scrape_interval: 抓取目标指标的频率&#xff0c;默认为 1minevaluation_interval: 评估告警规则的频率&#xff0c;默认为 1minscrape_timeout: 抓取目标指标数据拉取超时&#xff0c;默认为 10s&#xff0c;如果出现 context deadline e…...

Java并发编程面试题:线程池Fork/Join(19题)

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…...

【每日学点鸿蒙知识】WebView代理、2D绘制矩形圆角、TextInput清理按钮、pdf滑动、icon配置问题

1、HarmonyOS Webview 支持设置代理功能吗&#xff1f; 使用Web的onInterceptRequest先拦截再代理来实现。具体可以参考文档&#xff1a;https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-basic-components-web-V5#ZH-CN_TOPIC_0000001930757269__on…...

抽奖系统(1)(Java 实现)

1. 需求描述 1. 包含管理员的注册与登录 1) 注册包含&#xff1a;姓名、邮箱、手机号、密码 2) 登录包含两种方式 (1) 电话 密码登录 (2) 电话 短信登录&#xff1b;验证码获取 (3) 登录需要校验管理员身份 2. 人员管理&#xff1a;管理员支持创建普通用户&#xff0c;查看…...

数据库系统原理复习汇总

数据库系统原理复习汇总 一、数据库系统原理重点内容提纲 题型&#xff1a;主观题 1、简答题 第一章&#xff1a;数据库的基本概念&#xff1a;数据库、数据库管理系统、三级模式&#xff1b;两级映像、外码 第二章&#xff1a;什么是自然连接、等值连接&#xff1b; 第三…...

基于16QAM的载波同步和定时同步性能仿真,采用四倍采样,包括Costas环和gardner环

目录 1.算法仿真效果 2.算法涉及理论知识概要 3.MATLAB核心程序 4.完整算法代码文件获得 1.算法仿真效果 matlab2022a仿真结果如下&#xff08;完整代码运行后无水印&#xff09;&#xff1a; 仿真操作步骤可参考程序配套的操作视频。 2.算法涉及理论知识概要 载波同步是…...

鸿蒙next RCP网络请求工具类进阶版来了

前言&#xff1a; 各位同学大家好&#xff0c;有一段时间没有更新文章了,最近因为鸿蒙官方的网络请求换掉了了rcp 之前是使用http 这些都是原生开发的 当然有那种三方大家熟知的 axios (这个也是基于http 后面也会过时)所以大家还是要了解一下rcp的原生的网络请求的。那么我们…...

driftingblues6_vh靶机

首先把靶机换成NAT模式 使用 arp-scan 命令扫描网段内存活的主机&#xff0c;以获取靶机ip地址 arp-scn -l 尝试访问ip 使用御剑扫描子域名&#xff0c;尝试访问robots.txt文件 通过访问文件我们发现了一个/textpattern/textpattern目录 访问一下目录发现了登录页面 他还给了…...

Go语言入门

文章目录 零、Linux下Go的安装1.下载、解压2.添加环境变量3.验证安装4.初始化Go模块(1)cd到项目目录(2)初始化模块(3)获取依赖包(4)清理和验证依赖(5)检查 go.mod 文件(6)介绍 go.mod 和 go.sum 文件 5.项目目录结构 一、感性认识1.从 Hello world 开始2.加法函数 二、Go语法1.…...

VS Code中怎样查看某分支的提交历史记录

VsCode中无法直接查看某分支的提交记录&#xff0c;需借助插件才行&#xff0c;常见的插件如果git history只能查看某页面的改动记录&#xff0c;无法查看某分支的整体提交记录&#xff0c;我们可以安装GIT Graph插件来解决这个问题 1.在 VSCode的插件库中搜索 GIT Graph安装&a…...

【杂谈】-AI搜索引擎如何改变传统SEO及其在内容营销中的作用

AI搜索引擎如何改变传统SEO及其在内容营销中的作用 文章目录 AI搜索引擎如何改变传统SEO及其在内容营销中的作用1、什么是AI搜索引擎2、AI搜索引擎对SEO策略的影响3、AI搜索引擎在内容营销转型中的作用4、AI搜索引擎在营销领域的挑战、道德问题和未来5、总结 在当今的数字营销世…...

快速掌握Haproxy原理架构

文章目录 一、原理架构二、无负载均衡三、四层负载均衡的工作流程四、七层负载均衡工作流程五、基础属性mode 属性retries 属性maxconn 属性clitimeout 属性servtimeout 属性states uri 属性 一、原理架构 四层tcp代理&#xff1a;Haproxy仅在客户端和服务器之间双向转发流量&…...

Java中以某字符串开头且忽略大小写字母如何实现【正则表达式(Regex)】

第一种思路是先将它们都转换为小写或大写&#xff0c;再使用String类的startsWith()方法实现: 例如&#xff0c;如下的二个示例&#xff1a; "Session".toLowerCase().startsWith("sEsSi".toLowerCase()); //例子之一//例子之二String str "Hello Wo…...

如何提高Redis服务器的最大打开文件数限制

文章目录 如何提高Redis服务器的最大打开文件数限制问题诊断解决步骤1. 修改系统级别的限制2. 为Redis进程特别设置限制3. 修改Redis配置文件4. 修改systemd服务文件5. 重新加载systemd并重启Redis6. 验证更改 注意事项 如何提高Redis服务器的最大打开文件数限制 在运行高并发…...

React 组件通信完整指南 以及 自定义事件发布订阅系统

React 组件通信完整指南 1. 父子组件通信 1.1 父组件向子组件传递数据 // 父组件 function ParentComponent() {const [data, setData] useState(Hello from parent);return <ChildComponent message{data} />; }// 子组件 function ChildComponent({ message }) {re…...

代码随想录算法【Day5\Day6】

DAY5\Day6 1.熟悉哈希表的数据结构&#xff1a;数组、map和set&#xff0c;使用方法、使用场景 2.哈希表应用场景&#xff1a;解决给你一个元素&#xff0c;判断它在集合里是否出现过。 242.有效的字母异位词 本题用数组解决的。 class Solution { public:bool isAnagram(…...

Oracle 数据库执行计划的查看与分析技巧

目录 Oracle 数据库执行计划的查看与分析技巧一、什么是执行计划二、查看执行计划的方法&#xff08;一&#xff09;使用 EXPLAIN PLAN 命令&#xff08;二&#xff09;通过 SQL Developer 工具查看&#xff08;三&#xff09;启用 AUTOTRACE 功能 三、执行计划中的关键信息解读…...

VMD-SSA-BiLSTM、VMD-BiLSTM、BiLSTM时间序列预测对比

VMD-SSA-BiLSTM、VMD-BiLSTM、BiLSTM时间序列预测对比 目录 VMD-SSA-BiLSTM、VMD-BiLSTM、BiLSTM时间序列预测对比预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.MATLAB实现VMD-SSA-BiLSTM、VMD-BiLSTM、BiLSTM时间序列预测对比; 2.单变量时间序列预测 就是先vmd把变…...

QGIS二次开发(地图符号库操作)

实习三 地图符号库操作 3.1 任务要求 基于QGIS&#xff0c;实现地图符号的设计/存储与显示&#xff1b;基于QGIS实现一个点、线、面shp矢量图层文件的显示。通过设置引用的符号&#xff0c;改变矢量图层的显示效果&#xff1b;可编辑地图的符号库汇中的点符号、线符号、面符号…...

wordpress网站用token登入开发过程

生成跳转token 示例&#xff1a; function generate_login_token($user_id, $secret_key) {$payload [user_id > $user_id,timestamp > time(),];$payload_json json_encode($payload);$signature hash_hmac(sha256, $payload_json, $secret_key);return base64_en…...

Uniapp在浏览器拉起导航

Uniapp在浏览器拉起导航 最近涉及到要在浏览器中拉起导航&#xff0c;对目标点进行路线规划等功能&#xff0c;踩了一些坑&#xff0c;找到了使用方法。&#xff08;浏览器拉起&#xff09; 效果展示 可以拉起三大平台及苹果导航 点击选中某个导航&#xff0c;会携带经纬度跳转…...

在 CentOS 上安装 FFmpeg

在CentOS 上安装 FFmpeg 方法一&#xff1a;在线安装 添加 EPEL 和 RPM Fusion 源&#xff1a; sudo yum install epel-release sudo yum install https://download1.rpmfusion.org/free/el/rpmfusion-free-release-$(rpm -E %rhel).noarch.rpm安装 FFmpeg&#xff1a; sudo yu…...

影刀进阶指令 | liblib反推 (SD AI绘图反推)

文章目录 影刀进阶指令 | liblib反推 (SD AI绘图反推)一. 需求二. 流程三. 实现3.1 流程概览3.2 流程步骤讲解1\. 获取png地址2\. 打开页面3\. 上传png文件4\. 获取png的prompt信息 四. 运维 影刀进阶指令 | liblib反推 (SD AI绘图反推) 先看看我们要实现的功能&#xff0c;li…...