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

【数模学习笔记】插值算法和拟合算法

声明:以下笔记中的图片以及内容
均整理自“数学建模学习交流”清风老师的课程资料,仅用作学习交流使用

文章目录

  • 插值算法
    • 定义
    • 三个类型插值举例
      • 插值多项式
      • 分段插值
      • 三角插值
    • 一般插值多项式
      • 原理
      • 拉格朗日插值法
        • 龙格现象
        • 分段线性插值
      • 牛顿插值法
    • Hermite埃尔米特插值
      • 原理
      • 分段三次埃尔米特插值
        • 构造
        • 应用
    • 三次样条插值
      • 定义
      • 应用
    • 三次Hermite插值和三次样条插值的对比
    • n维数据的插值
  • 拟合算法
    • 最小二乘法
    • 拟合评价
      • Matlab自带拟合工具箱cftool

插值算法

实际上本栏重点只有三次Hermite插值和三次样条插值的两行调用代码,其他的全是废(原)话(理)

定义

设函数 y = f ( x ) y = f(x) y=f(x)在区间 [ a , b ] [a,b] [a,b]上有定义,且已知在点
a ≤ x 0 < x 1 < ⋯ < x n ≤ b a \leq x_0 < x_1 < \cdots < x_n \leq b ax0<x1<<xnb
上的值分别为: y 0 , y 1 , ⋯ , y n y_0,y_1,\cdots,y_n y0,y1,,yn
若存在一简单函数 P ( x ) P(x) Px,使
P ( x i ) = y i ( i = 0 , 1 , 2 ⋯ , n ) P(x_i) = y_i\ (i = 0,1,2\cdots,n)\ P(xi)=yi (i=0,1,2,n) 
则称 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)的方法称为插值法。

三个类型插值举例

插值多项式

  • 示例:已知函数 y = f ( x ) y = f(x) y=f(x)在点 x 0 = 0 x_0 = 0 x0=0 x 1 = 1 x_1 = 1 x1=1 x 2 = 2 x_2 = 2 x2=2上的值分别为 f ( 0 ) = 1 f(0)=1 f(0)=1 f ( 1 ) = 2 f(1)=2 f(1)=2 f ( 2 ) = 5 f(2)=5 f(2)=5。我们可以构造一个二次插值多项式 P ( x ) P(x) P(x)来逼近 f ( x ) f(x) f(x)
    • P ( x ) = a 0 + a 1 x + a 2 x 2 P(x)=a_0 + a_1x + a_2x^2 P(x)=a0+a1x+a2x2,将已知点代入可得方程组:
      • { a 0 + a 1 × 0 + a 2 × 0 2 = 1 a 0 + a 1 × 1 + a 2 × 1 2 = 2 a 0 + a 1 × 2 + a 2 × 2 2 = 5 \begin{cases}a_0 + a_1\times0 + a_2\times0^2 = 1\\a_0 + a_1\times1 + a_2\times1^2 = 2\\a_0 + a_1\times2 + a_2\times2^2 = 5\end{cases} a0+a1×0+a2×02=1a0+a1×1+a2×12=2a0+a1×2+a2×22=5
    • 解这个方程组可得 a 0 = 1 a_0 = 1 a0=1 a 1 = 0 a_1 = 0 a1=0 a 2 = 1 a_2 = 1 a2=1,所以插值多项式 P ( x ) = 1 + x 2 P(x)=1 + x^2 P(x)=1+x2。在区间 [ 0 , 2 ] [0,2] [0,2]上,这个多项式可以用来近似原函数 f ( x ) f(x) f(x)

分段插值

  • 示例:假设我们要对函数 f ( x ) = 1 1 + 25 x 2 f(x)=\frac{1}{1 + 25x^2} f(x)=1+25x21在区间 [ − 1 , 1 ] [-1,1] [1,1]上进行插值。如果我们只用一个高次多项式进行插值,可能会出现龙格现象(即在区间端点附近出现剧烈振荡)。这时可以采用分段插值,比如将区间 [ − 1 , 1 ] [-1,1] [1,1]等分成若干个子区间,如 [ − 1 , − 0.5 ] , [ − 0.5 , 0 ] , [ 0 , 0.5 ] , [ 0.5 , 1 ] [-1,-0.5],[-0.5,0],[0,0.5],[0.5,1] [1,0.5],[0.5,0],[0,0.5],[0.5,1]。在每个子区间上分别进行低次多项式插值(如线性插值或二次插值)。
    • 在区间 [ − 1 , − 0.5 ] [-1,-0.5] [1,0.5]上,已知端点值 f ( − 1 ) f(-1) f(1) f ( − 0.5 ) f(-0.5) f(0.5),通过线性插值得到该区间上的插值函数 P 1 ( x ) P_1(x) P1(x),使得 P 1 ( − 1 ) = f ( − 1 ) P_1(-1)=f(-1) P1(1)=f(1) P 1 ( − 0.5 ) = f ( − 0.5 ) P_1(-0.5)=f(-0.5) P1(0.5)=f(0.5),并且在该区间内 P 1 ( x ) P_1(x) P1(x)近似 f ( x ) f(x) f(x)
    • 同理,在其他子区间上也进行类似的操作,得到相应的插值函数 P 2 ( x ) P_2(x) P2(x) P 3 ( x ) P_3(x) P3(x) P 4 ( x ) P_4(x) P4(x)。这样就构成了整个区间 [ − 1 , 1 ] [-1,1] [1,1]上的分段插值函数。

三角插值

  • 示例:对于一个周期为 2 π 2\pi 2π的函数 f ( x ) f(x) f(x),我们在区间 [ 0 , 2 π ] [0,2\pi] [0,2π]上取 n n n个等距节点 x k = 2 k π n x_k = \frac{2k\pi}{n} xk=n2 k = 0 , 1 , ⋯ , n − 1 k = 0,1,\cdots,n - 1 k=0,1,,n1,已知这些节点上的函数值 f ( x k ) f(x_k) f(xk)
    • 三角插值多项式可以表示为 S n ( x ) = a 0 2 + ∑ k = 1 n ( a k cos ⁡ k x + b k sin ⁡ k x ) S_n(x)=\frac{a_0}{2}+\sum_{k = 1}^{n}(a_k\cos kx + b_k\sin kx) Sn(x)=2a0+k=1n(akcoskx+bksinkx),其中系数 a k a_k ak b k b_k bk通过以下公式计算:
      • a k = 1 π ∫ 0 2 π f ( x ) cos ⁡ k x d x a_k=\frac{1}{\pi}\int_{0}^{2\pi}f(x)\cos kx dx ak=π102πf(x)coskxdx k = 0 , 1 , ⋯ , n k = 0,1,\cdots,n k=0,1,,n
      • b k = 1 π ∫ 0 2 π f ( x ) sin ⁡ k x d x b_k=\frac{1}{\pi}\int_{0}^{2\pi}f(x)\sin kx dx bk=π102πf(x)sinkxdx k = 1 , 2 , ⋯ , n k = 1,2,\cdots,n k=1,2,,n
    • 例如,假设 f ( x ) f(x) f(x)是一个简单的周期函数,在 [ 0 , 2 π ] [0,2\pi] [0,2π] f ( x ) = { x , 0 ≤ x < π 2 π − x , π ≤ x < 2 π f(x)=\begin{cases}x, & 0\leq x < \pi\\2\pi - x, & \pi\leq x < 2\pi\end{cases} f(x)={x,2πx,0x<ππx<2π,通过计算上述积分可以得到相应的三角插值多项式 S n ( x ) S_n(x) Sn(x),用它来近似原函数 f ( x ) f(x) f(x)在整个周期上的行为。

这些插值方法在不同的场景下各有优势,分段插值可以避免高次多项式的振荡问题,插值多项式计算相对简单,三角插值适用于周期函数等情况,它们都为函数的近似和数据的处理提供了有效的手段。

一般插值多项式

原理

  • 定理:
    • 设有 n + 1 n + 1 n+1个互不相同的节点 ( x i , y i ) (x_i,y_i) (xi,yi) ( i = 0 , 1 , 2 , ⋯ , n ) (i = 0,1,2,\cdots,n) (i=0,1,2,,n)
    • 则存在唯一的多项式:
      L n ( x ) = a 0 + a 1 x + a 2 x 2 + ⋯ + a n x n L_n(x)=a_0 + a_1x + a_2x^2 + \cdots + a_nx^n Ln(x)=a0+a1x+a2x2++anxn
    • 使得 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个点
  • 证明:(利用范德蒙行列式)
    • 构造方程组
      { 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 \begin{cases} a_0 + a_1x_0 + a_2x_0^2 + \cdots + a_nx_0^n = y_0 \\ a_0 + a_1x_1 + a_2x_1^2 + \cdots + a_nx_1^n = y_1 \\ \cdots\cdots\cdots \\ a_0 + a_1x_n + a_2x_n^2 + \cdots + a_nx_n^n = y_n \end{cases} a0+a1x0+a2x02++anx0n=y0a0+a1x1+a2x12++anx1n=y1⋯⋯⋯a0+a1xn+a2xn2++anxnn=yn
    • 令:
      A = [ 1 x 0 ⋯ x 0 n 1 x 1 ⋯ x 1 n ⋮ ⋮ ⋯ ⋮ 1 x n ⋯ x n n ] A=\begin{bmatrix} 1 & x_0 & \cdots & x_0^n \\ 1 & x_1 & \cdots & x_1^n \\ \vdots & \vdots & \cdots & \vdots \\ 1 & x_n & \cdots & x_n^n \end{bmatrix} A= 111x0x1xnx0nx1nxnn
      X = [ a 0 a 1 ⋯ a n ] T X=\begin{bmatrix} \ a_0 \ a_1 \ \cdots \ a_n \end{bmatrix}^T X=[ a0 a1  an]T
      Y = [ y 0 y 1 ⋯ y n ] T Y=\begin{bmatrix} \ y_0 \ y_1 \ \cdots \ y_n \end{bmatrix}^T Y=[ y0 y1  yn]T
    • 方程组的矩阵形式: A X = Y AX = Y AX=Y
    • 由于 ∣ A ∣ = ∏ i = 1 n ∏ j = 0 i − 1 ( x i − x j ) ≠ 0 |A|=\prod_{i=1}^{n}\prod_{j=0}^{i - 1}(x_i - x_j) \neq 0 A=i=1nj=0i1(xixj)=0,所以方程组有唯一解,从而 L n ( x ) = a 0 + a 1 x + a 2 x 2 + ⋯ + a n x n L_n(x)=a_0 + a_1x + a_2x^2 + \cdots + a_nx^n Ln(x)=a0+a1x+a2x2++anxn唯一存在.
  • 注:
    • 只要 n + 1 n + 1 n+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)=x0x1xx1y0+x1x0xx0y1

  • 三个点: ( 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 − x 2 ) ( x 0 − x 1 ) ( x 0 − x 2 ) y 0 + ( x − x 0 ) ( x − x 2 ) ( x 1 − x 0 ) ( x 1 − x 2 ) y 1 + ( x − x 0 ) ( x − x 1 ) ( x 2 − x 0 ) ( x 2 − x 1 ) y 2 f(x)=\frac{(x - x_1)(x - x_2)}{(x_0 - x_1)(x_0 - x_2)}y_0+\frac{(x - x_0)(x - x_2)}{(x_1 - x_0)(x_1 - x_2)}y_1+\frac{(x - x_0)(x - x_1)}{(x_2 - x_0)(x_2 - x_1)}y_2 f(x)=(x0x1)(x0x2)(xx1)(xx2)y0+(x1x0)(x1x2)(xx0)(xx2)y1+(x2x0)(x2x1)(xx0)(xx1)y2

  • 拉格朗日插值多项式一般形式
    ω n + 1 ( x ) = ( x − x 0 ) ( x − x 1 ) ⋯ ( x − x n ) \omega_{n + 1}(x) = (x - x_0)(x - x_1)\cdots(x - x_n) ωn+1(x)=(xx0)(xx1)(xxn)
    ω n + 1 ′ ( x k ) = ( 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)\cdots(x_k - x_{k - 1})(x_k - x_{k + 1})\cdots(x_k - x_n). ωn+1(xk)=(xkx0)(xkxk1)(xkxk+1)(xkxn).
    l i ( x ) = ( x − x 0 ) ⋯ ( x − x i − 1 ) ( x − x i + 1 ) ⋯ ( x − x n ) ( x i − x 0 ) ⋯ ( x i − x i − 1 ) ( x i − x i + 1 ) ⋯ ( x i − x n ) l_i(x)=\frac{(x - x_0)\cdots(x - x_{i - 1})(x - x_{i + 1})\cdots(x - x_n)}{(x_i - x_0)\cdots(x_i - x_{i - 1})(x_i - x_{i + 1})\cdots(x_i - x_n)} li(x)=(xix0)(xixi1)(xixi+1)(xixn)(xx0)(xxi1)(xxi+1)(xxn)
    = ( x − x 0 ) ⋯ ( x − x i − 1 ) ( x − x i ) ( x − x i + 1 ) ⋯ ( x − x n ) ( x − x i ) ( x i − x 0 ) ⋯ ( x i − x i − 1 ) ( x i − x i + 1 ) ⋯ ( x i − x n ) =\frac{(x - x_0)\cdots(x - x_{i - 1})(x - x_i)(x - x_{i + 1})\cdots(x - x_n)}{(x - x_i)(x_i - x_0)\cdots(x_i - x_{i - 1})(x_i - x_{i + 1})\cdots(x_i - x_n)} =(xxi)(xix0)(xixi1)(xixi+1)(xixn)(xx0)(xxi1)(xxi)(xxi+1)(xxn)
    = ω n + 1 ( x ) ( x − x i ) ω n + 1 ′ ( x i ) =\frac{\omega_{n + 1}(x)}{(x - x_i)\omega_{n + 1}'(x_i)} =(xxi)ωn+1(xi)ωn+1(x)
    则拉格朗日插值多项式为 L n ( x ) = ∑ i = 0 n y i l i ( x ) L_n(x)=\sum_{i = 0}^{n}y_il_i(x) Ln(x)=i=0nyili(x)
    L n ( x ) = ∑ k = 0 n y k ω n + 1 ( x ) ( x − x k ) ω n + 1 ′ ( x k ) . L_n(x)=\sum_{k = 0}^{n}y_k\frac{\omega_{n + 1}(x)}{(x - x_k)\omega_{n + 1}'(x_k)}. Ln(x)=k=0nyk(xxk)ωn+1(xk)ωn+1(x).

但实际上,拉格朗日插值法实际情况下并不常用,因为有一个很大的问题——龙格现象

龙格现象

龙格现象是指在使用多项式插值逼近函数时,当插值节点等距分布且插值多项式的次数较高时,在插值区间的两端会出现剧烈振荡的现象,导致插值结果在区间端点附近与原函数偏差较大,不能很好地逼近原函数。
所以在不清楚曲线具体运动趋势的情况下,不要轻易使用高次插值。
在这里插入图片描述

分段线性插值

为了避免龙格现象带来的影响,故我们使用分段低次插值。
这里以分段二次插值为例:
选取跟节点 x x x最近的三个节点 x i − 1 , x i , x i + 1 x_{i - 1},x_i,x_{i + 1} xi1,xi,xi+1进行二次插值。
即在每一个区间 [ x i − 1 , x i + 1 ] [x_{i - 1},x_{i + 1}] [xi1,xi+1]上,取:
f ( x ) ≈ L 2 ( x ) = ∑ k = i − 1 i + 1 [ y k ∏ j = i − 1 j ≠ k i + 1 ( x − x j ) ( x k − x j ) ] f(x)\approx L_2(x)=\sum_{k = i - 1}^{i + 1}[y_k\prod_{\substack{j = i - 1\\j\neq k}}^{i + 1}\frac{(x - x_j)}{(x_k - x_j)}] f(x)L2(x)=k=i1i+1[ykj=i1j=ki+1(xkxj)(xxj)]

这种分段的低次插值称为分段二次插值,在几何上就是用分段抛物线代替 y = f ( x ) y = f(x) y=f(x),故分段二次插值又称为分段抛物插值。

牛顿插值法

牛顿插值法每次插值只和前n项的值有关,这样每次只要在原来的函数上添加新的项,就能够产生新的函数。

f ( x ) = f ( x 0 ) + f [ x 0 , x 1 ] ( x − x 0 ) f(x)=f(x_0)+f[x_0,x_1](x - x_0) f(x)=f(x0)+f[x0,x1](xx0)
+ f [ x 0 , x 1 , x 2 ] ( x − x 0 ) ( x − x 1 ) + ⋯ +f[x_0,x_1,x_2](x - x_0)(x - x_1)+\cdots +f[x0,x1,x2](xx0)(xx1)+
+ f [ x 0 , x 1 , ⋯ , x n − 2 , x n − 1 ] ( x − x 0 ) ( x − x 1 ) ⋯ ( x − x n − 3 ) ( x − x n − 2 ) +f[x_0,x_1,\cdots,x_{n - 2},x_{n - 1}](x - x_0)(x - x_1)\cdots(x - x_{n - 3})(x - x_{n - 2}) +f[x0,x1,,xn2,xn1](xx0)(xx1)(xxn3)(xxn2)
+ f [ x 0 , x 1 , ⋯ , x n − 1 , x n ] ( x − x 0 ) ( x − x 1 ) ⋯ ( x − x n − 2 ) ( x − x n − 1 ) +f[x_0,x_1,\cdots,x_{n - 1},x_n](x - x_0)(x - x_1)\cdots(x - x_{n - 2})(x - x_{n - 1}) +f[x0,x1,,xn1,xn](xx0)(xx1)(xxn2)(xxn1)

  • 差商定义:
    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 2 ] = f [ x 1 , x 2 ] − f [ x 0 , x 1 ] x 2 − x 0 f[x_0,x_1,x_2]=\frac{f[x_1,x_2]-f[x_0,x_1]}{x_2 - x_0} f[x0,x1,x2]=x2x0f[x1,x2]f[x0,x1]

  • K阶差商:( x k , x k − 1 x_k,x_{k - 1} xk,xk1可以不相邻)
    f [ x 0 , x 1 , ⋯ , x k ] = f [ x 1 , ⋯ , x k − 1 , x k ] − f [ x 0 , x 1 , ⋯ , x k − 1 ] x k − x 0 f[x_0,x_1,\cdots,x_k]=\frac{f[x_1,\cdots,x_{k - 1},x_k]-f[x_0,x_1,\cdots,x_{k - 1}]}{x_k - x_0} f[x0,x1,,xk]=xkx0f[x1,,xk1,xk]f[x0,x1,,xk1]

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

Hermite埃尔米特插值

原理

  • 设函数 f ( x ) f(x) f(x)在区间 [ a , b ] [a,b] [a,b]上有 n + 1 n + 1 n+1个互异节点 a = x 0 < x 1 < x 2 < ⋯ < x n = b a = x_0 < x_1 < x_2 < \cdots < x_n = b a=x0<x1<x2<<xn=b
  • 定义在 [ 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 ) f(x_i)=y_i,f'(x_i)=y_i'\ (i = 0,1,2,\cdots,n) f(xi)=yi,f(xi)=yi (i=0,1,2,,n) 2 n + 2 2n + 2 2n+2个条件)
  • 可唯一确定一个次数不超过 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 ( j = 0 , 1 , ⋯ , n ) H(x_j)=y_j,\ H'(x_j)=m_j\ (j = 0,1,\cdots,n) H(xj)=yj, H(xj)=mj (j=0,1,,n).
  • 其余项为:
    R ( x ) = f ( x ) − H ( x ) = f ( 2 n + 2 ) ( ξ ) ( 2 n + 2 ) ! ω 2 n + 2 ( x ) R(x)=f(x)-H(x)=\frac{f^{(2n + 2)}(\xi)}{(2n + 2)!}\omega_{2n + 2}(x) R(x)=f(x)H(x)=(2n+2)!f(2n+2)(ξ)ω2n+2(x)

可以看到,直接使用Hermite插值得到的次数较高,也存在龙格现象,因此在实际应用中,往往使用分段三次Hermite插值多项式(pchip).

分段三次埃尔米特插值

构造
  • 已知给定 n + 1 n + 1 n+1个节点 x 0 , x 1 , ⋯ , x n x_0,x_1,\cdots,x_n x0,x1,,xn,以及对应的函数值 y 0 , y 1 , ⋯ , y n y_0,y_1,\cdots,y_n y0,y1,,yn和导数值 m 0 , m 1 , ⋯ , m n m_0,m_1,\cdots,m_n m0,m1,,mn

  • 函数值基函数 h i ( x ) h_i(x) hi(x)

    • 对于节点 x i x_i xi,构造函数值基函数 h i ( x ) h_i(x) hi(x),使其满足 h i ( x j ) = δ i j h_i(x_j)=\delta_{ij} hi(xj)=δij(其中 δ i j \delta_{ij} δij是克罗内克符号,当 i = j i = j i=j时, δ i j = 1 \delta_{ij}=1 δij=1;当 i ≠ j i\neq j i=j时, δ i j = 0 \delta_{ij}=0 δij=0)。
    • 一种常见的构造方式是:
      h i ( x ) = ( 1 + 2 x − x i x i + 1 − x i ) ( x − x i + 1 x i − x i + 1 ) 2 h_i(x)=\left(1 + 2\frac{x - x_i}{x_{i + 1}-x_i}\right)\left(\frac{x - x_{i + 1}}{x_i - x_{i + 1}}\right)^2 hi(x)=(1+2xi+1xixxi)(xixi+1xxi+1)2,当 i = 0 , 1 , ⋯ , n − 1 i = 0,1,\cdots,n - 1 i=0,1,,n1
      h n ( x ) = ( 1 + 2 x − x n x n − 1 − x n ) ( x − x n − 1 x n − x n − 1 ) 2 h_n(x)=\left(1 + 2\frac{x - x_n}{x_{n - 1}-x_n}\right)\left(\frac{x - x_{n - 1}}{x_n - x_{n - 1}}\right)^2 hn(x)=(1+2xn1xnxxn)(xnxn1xxn1)2
  • 导数值基函数 h ^ i ( x ) \hat{h}_i(x) h^i(x)

    • 构造导数值基函数 h ^ i ( x ) \hat{h}_i(x) h^i(x),使其满足 h ^ i ′ ( x j ) = δ i j \hat{h}_i'(x_j)=\delta_{ij} h^i(xj)=δij
    • 例如:
      h ^ i ( x ) = ( x − x i ) ( x − x i + 1 x i − x i + 1 ) 2 \hat{h}_i(x)=(x - x_i)\left(\frac{x - x_{i + 1}}{x_i - x_{i + 1}}\right)^2 h^i(x)=(xxi)(xixi+1xxi+1)2,当 i = 0 , 1 , ⋯ , n − 1 i = 0,1,\cdots,n - 1 i=0,1,,n1
      h ^ n ( x ) = ( x − x n ) ( x − x n − 1 x n − x n − 1 ) 2 \hat{h}_n(x)=(x - x_n)\left(\frac{x - x_{n - 1}}{x_n - x_{n - 1}}\right)^2 h^n(x)=(xxn)(xnxn1xxn1)2
  • 构造三次埃尔米特插值多项式 H ( x ) H(x) H(x)
    H ( x ) = ∑ i = 0 n [ y i h i ( x ) + m i h ^ i ( x ) ] H(x)=\sum_{i = 0}^{n}[y_ih_i(x)+m_i\hat{h}_i(x)] H(x)=i=0n[yihi(x)+mih^i(x)]

应用

Matlab有内置的函数(直接调用就行了):
p = pchip(x,y,new_x)
x,y是已知的样本点的坐标,new_x是插值横坐标

x = -pi:pi; y = sin(x);
new_x = -pi:0.1:pi;
p = pchip(x,y,new_x);
plot(x, y, 'o', new_x, p, 'r-')

三次样条插值

定义

y = f ( x ) y = f(x) y=f(x)在点 x 0 , x 1 , x 2 , ⋯ x n x_0,x_1,x_2,\cdots x_n x0,x1,x2,xn的值为 y 0 , y 1 , y 2 , ⋯ y n y_0,y_1,y_2,\cdots y_n y0,y1,y2,yn,若函数 S ( x ) S(x) S(x)满足下列条件

  • S ( x i ) = f ( x i ) = y i S(x_i)=f(x_i)=y_i S(xi)=f(xi)=yi i = 0 , 1 , 2 , ⋯ , n i = 0,1,2,\cdots,n i=0,1,2,,n
  • 在每个子区间 [ x i , x i + 1 ] ( i = 0 , 1 , 2 , ⋯ , n − 1 ) [x_i,x_{i + 1}](i = 0,1,2,\cdots,n - 1) [xi,xi+1](i=0,1,2,,n1) S ( x ) S(x) S(x)是三次多项式
  • S ( x ) S(x) S(x) [ a , b ] [a,b] [a,b]上二阶连续可微。

则称 S ( x ) S(x) S(x)为函数 f ( x ) f(x) f(x)的三次样条插值函数。

  • S ( x ) S(x) S(x)除了满足基本插值条件 s ( x i ) = f i s(x_i)=f_i s(xi)=fi外还应具有如下形式:
    S ( x ) = { S 0 ( x ) , x ∈ [ x 0 , x 1 ] , S 1 ( x ) , x ∈ [ x 1 , x 2 ] , ⋮ S n − 1 ( x ) , x ∈ [ x n − 1 , x n ] ; S(x)=\begin{cases} S_0(x), & x\in[x_0,x_1], \\ S_1(x), & x\in[x_1,x_2], \\ \vdots \\ S_{n - 1}(x), & x\in[x_{n - 1},x_n]; \end{cases} S(x)= S0(x),S1(x),Sn1(x),x[x0,x1],x[x1,x2],x[xn1,xn];
    S i ( x ) ∈ C 3 ( [ x i , x i + 1 ] ) S_i(x)\in C^3([x_i,x_{i + 1}]) Si(x)C3([xi,xi+1]).
    并且满足条件:
    { S i − 1 ( x i ) = S i ( x i ) , S i − 1 ′ ( x i ) = S i ′ ( x i ) , S i − 1 ′ ′ ( x i ) = S i ′ ′ ( x i ) , \begin{cases} S_{i - 1}(x_i)=S_i(x_i), \\ S_{i - 1}'(x_i)=S_i'(x_i), \\ S_{i - 1}''(x_i)=S_i''(x_i), \end{cases} Si1(xi)=Si(xi),Si1(xi)=Si(xi),Si1′′(xi)=Si′′(xi),

应用

Matlab有内置的函数:
p = spline (x,y, new_x)
x,y是已知的样本点的坐标,new_x是要插入处对应的横坐标

x = -pi:pi;
y = sin(x);
new_x = -pi:0.1:pi;
p1 = pchip(x,y,new_x);    %分段三次埃尔米特插值
p2 = spline(x,y,new_x);   %三次样条插值
plot(x,y,'o',new_x,p1,'r-',new_x,p2,'b-')
Legend('样本点','三次埃尔米特插值','三次样条插值','Location','SouthEast')    %标注显示在东南方向

三次Hermite插值和三次样条插值的对比

在这里插入图片描述
三次样条比Hermite更光滑,实际应用中两种都可以使用

n维数据的插值

这个了解即可。
p = interpn(x1,x2,...,xn, y, new_x1,new_x2,...,new_xn, method)
x1,x2,...,xn是已知的样本点的横坐标
y是已知的样本点的纵坐标
new_x1,new_x2,...,new_xn是要插入点的横坐标
method是要插值的方法
‘linear’: 线性插值 (默认算法);
‘cubic’: 三次插值;
‘spline’: 三次样条插值法; (最为精准)
‘nearest’: 最邻近插值算法。

x = -pi:pi; y = sin(x);
new_x = -pi:0.1:pi;
p = interpn (x, y, new_x,'spline');
%等价于p = spline(x, y, new_x);
plot(x, y, 'o', new_x, p, 'r-')

省流:本栏最有用的两行
p = pchip(x,y,new_x)
p = spline (x,y, new_x)


拟合算法

插值算法中,得到的多项式 f ( x ) f(x) f(x)要经过所有样本点。但是如果样本点太多,那么这个多项式次数过高,会造成龙格现象。
比如说这个例子
在这里插入图片描述
尽管我们可以选择分段的方法避免龙格现象,但是更多时候我们更倾向于得到一个确定的曲线,尽管这条曲线不能经过每一个样本点,但只要保证误差足够小即可,这就是拟合的思想。(拟合的结果是得到一个确定的较为简单的曲线)

最小二乘法

高中学的 懒得解释。
在这里插入图片描述
在这里插入图片描述
解释一下 k , b = arg min ⁡ k , b ( f ( x ) ) k,b=\argmin_{\substack{k,b}}(f(x)) k,b=k,bargmin(f(x))指的是求使得 f ( x ) f(x) f(x)取最小值时的参数 k , b k,b k,b的值

  • 推导过程:
    在这里插入图片描述
  • 结论:

k ^ = n ∑ i = 1 n x i y i − ∑ i = 1 n y i ∑ i = 1 n x i n ∑ i = 1 n x i 2 − ∑ i = 1 n x i ∑ i = 1 n x i \hat{k} = \frac{n\sum_{i = 1}^{n}x_iy_i - \sum_{i = 1}^{n}y_i\sum_{i = 1}^{n}x_i}{n\sum_{i = 1}^{n}x_i^2 - \sum_{i = 1}^{n}x_i\sum_{i = 1}^{n}x_i} k^=ni=1nxi2i=1nxii=1nxini=1nxiyii=1nyii=1nxi
b ^ = ∑ i = 1 n x i 2 ∑ i = 1 n y i − ∑ i = 1 n x i ∑ i = 1 n x i y i n ∑ i = 1 n x i 2 − ∑ i = 1 n x i ∑ i = 1 n x i \hat{b} = \frac{\sum_{i = 1}^{n}x_i^2\sum_{i = 1}^{n}y_i - \sum_{i = 1}^{n}x_i\sum_{i = 1}^{n}x_iy_i}{n\sum_{i = 1}^{n}x_i^2 - \sum_{i = 1}^{n}x_i\sum_{i = 1}^{n}x_i} b^=ni=1nxi2i=1nxii=1nxii=1nxi2i=1nyii=1nxii=1nxiyi

拟合评价

  • 三个基本概念

    • 总体平方和 S S T SST SST (Total sum of squares): S S T = ∑ i = 1 n ( y i − y ˉ ) 2 SST = \sum_{i = 1}^{n}(y_i - \bar{y})^2 SST=i=1n(yiyˉ)2

    • 误差平方和 S S E SSE SSE (The sum of squares due to error): S S E = ∑ i = 1 n ( y i − y ^ i ) 2 SSE = \sum_{i = 1}^{n}(y_i - \hat{y}_i)^2 SSE=i=1n(yiy^i)2

    • 回归平方和 S S R SSR SSR (Sum of squares of the regression): S S R = ∑ i = 1 n ( y ^ i − y ˉ ) 2 SSR = \sum_{i = 1}^{n}(\hat{y}_i - \bar{y})^2 SSR=i=1n(y^iyˉ)2

  • 可以证明: S S T = S S E + S S R SST = SSE + SSR SST=SSE+SSR

    • 证明:在这里插入图片描述
  • 拟合优度: 0 ≤ R 2 = S S R S S T = S S T − S S E S S T = 1 − S S E S S T ≤ 1 0 \leq R^2 = \frac{SSR}{SST} = \frac{SST - SSE}{SST} = 1 - \frac{SSE}{SST} \leq 1 0R2=SSTSSR=SSTSSTSSE=1SSTSSE1
    R 2 R^2 R2越接近 1 1 1,说明误差平方和 S S E SSE SSE 越接近 0 0 0说明拟合的越好

  • 注意: R 2 R^2 R2只能用于拟合函数是线性函数时,拟合结果的评价.
    线性函数和其他函数(如复杂的指数函数)比较拟合的好坏,直接看 S S E SSE SSE即可

    • 线性函数的界定:这里我们说的线性函数指的是对参数为线性,即在函数中,参数仅以一次方出现,并且不能乘以或除以其他任何参数,也不能出现参数的复合函数形式。
      形如 y = a + b x 2 y=a+bx^2 y=a+bx2 是线性函数,这里的参数就是 a , b a,b a,b.
      形如 y = a + b 3 x y = a + b^{3}x y=a+b3x y = a + b x + b c x 2 y = a + bx + bcx^{2} y=a+bx+bcx2 y = a ( x − b ) 2 y = a(x - b)^{2} y=a(xb)2 y = a sin ⁡ ( b + c x ) y = a\sin(b + cx) y=asin(b+cx)都不是线性函数,不能用 R 2 R^{2} R2.

实际应用中,常使用多个不同的拟合函数去试,然后比较这几个拟合函数的拟合优度,取最优的一个拟合函数。
曲线复杂度与拟合误差之间的取舍:次数越高(或者指数函数越复杂),误差越小,但是产生龙格现象的概率越大,且函数曲线越复杂。(一个理解:在插值算法中,曲线经过每一个点,那么曲线的 S S E SSE SSE即为0,如果放在拟合算法中来讲,这种曲线的拟合优度极高,但是曲线本身十分复杂,这就违背了拟合的初衷)
因此实际上,如果两个拟合函数的 S S E SSE SSE相差不大,但是曲线复杂度相差较大,那么就取明显更为简单的那个函数,哪怕它的 S S E SSE SSE相较另一个更大一点。

y\_hat = k*x+b;  % y的拟合值
SSR = sum((y\_hat-mean(y)).^2)  % 回归平方和 注:mean()是求均值的函数。
SSE = sum((y\_hat-y).^2)  % 误差平方和
SST = sum((y-mean(y)).^2)  % 总体平方和
SST-SSE-SSR
R\_2 = SSR / SST

Matlab自带拟合工具箱cftool

在这里插入图片描述
在这里插入图片描述

  • 拟合方法

    • Custom Equations:用户自定义的函数类型 注意修改范围Fit options
    • Exponential:指数逼近,有2种类型, a ∗ e x p ( b ∗ x ) a*exp(b*x) aexp(bx) a ∗ e x p ( b ∗ x ) + c ∗ e x p ( d ∗ x ) a*exp(b*x) + c*exp(d*x) aexp(bx)+cexp(dx)
    • Fourier:傅立叶逼近,有7种类型,基础型是 a 0 + a 1 ∗ c o s ( x ∗ w ) + b 1 ∗ s i n ( x ∗ w ) a0 + a1*cos(x*w) + b1*sin(x*w) a0+a1cos(xw)+b1sin(xw)
    • Gaussian:高斯逼近,有8种类型,基础型是 a 1 ∗ e x p ( − ( ( x − b 1 ) / c 1 ) 2 ) a1*exp(-((x-b1)/c1)^2) a1exp(((xb1)/c1)2)
    • Interpolant:插值逼近,有4种类型,linear、nearest neighbor、cubic spline、shape-preserving
    • Polynomial:多形式逼近,有9种类型,linear ~、quadratic ~、cubic ~、4-9th degree ~
    • Power:幂逼近,有2种类型, a ∗ x b 、 a ∗ x b + c a*x^b 、a*x^b + c axbaxb+c
    • Rational:有理数逼近,分子、分母共有的类型是linear ~、quadratic ~、cubic ~、4-5th degree ~;此外,分子还包括constant型
    • Smoothing Spline:平滑逼近
    • Sum of Sin Functions:正弦曲线逼近,有8种类型,基础型是 a 1 ∗ s i n ( b 1 ∗ x + c 1 ) a1*sin(b1*x + c1) a1sin(b1x+c1)
    • Weibull:只有一种, a ∗ b ∗ x ( b − 1 ) ∗ e x p ( − a ∗ x b ) a*b*x^{(b-1)}*exp(-a*x^b) abx(b1)exp(axb)
  • 拟合工具还可以直接生成代码Generate code,可放在附录里。

  • 小tips:导出图像可以在文件-导出设置-渲染-修改分辨率,使图更清晰

相关文章:

【数模学习笔记】插值算法和拟合算法

声明&#xff1a;以下笔记中的图片以及内容 均整理自“数学建模学习交流”清风老师的课程资料&#xff0c;仅用作学习交流使用 文章目录 插值算法定义三个类型插值举例插值多项式分段插值三角插值 一般插值多项式原理拉格朗日插值法龙格现象分段线性插值 牛顿插值法 Hermite埃尔…...

探索 C++ 与 LibUSB:开启 USB 设备交互的奇幻之旅

一、引言 在当今数字化时代&#xff0c;USB&#xff08;通用串行总线&#xff09;设备无处不在&#xff0c;从常见的 U 盘、鼠标、键盘&#xff0c;到复杂的工业数据采集设备、医疗监测仪器等&#xff0c;它们以方便快捷的插拔式连接&#xff0c;为人们的生活和工作带来了极大…...

二、模型训练与优化(4):模型优化-实操

下面我将以 MNIST 手写数字识别模型为例&#xff0c;从 剪枝 (Pruning) 和 量化 (Quantization) 两个常用方法出发&#xff0c;提供一套可实际动手操作的模型优化流程。此示例基于 TensorFlow/Keras 环境&#xff0c;示范如何先训练一个基础模型&#xff0c;然后对其进行剪枝和…...

3D可视化产品定制,应用于哪些行业领域?

3D可视化定制服务已广泛渗透至众多行业领域&#xff0c;包括汽车、家居、时尚鞋服、珠宝配饰以及数码电器等&#xff1a; 汽车行业&#xff1a; 借助Web全景技术与3D模型&#xff0c;我们高保真地再现了汽车外观&#xff0c;为用户带来沉浸式的车型浏览体验。用户可在展示界面自…...

Avalonia 入门笔记(零):概述

Avalonia 是一个基于 .NET 和 Skia 的开源、跨平台 UI 框架&#xff0c;支持 Windows、Linux、macOS、iOS、Android 和 WebAssembly。Skia 是一个基于 C 的开源 2D 渲染引擎&#xff0c;Avalonia 通过 Skia 自绘 UI 控件&#xff0c;保证在全平台具有一致的观感 基于 .NET 的跨…...

Unity TextMesh Pro入门

概述 TextMesh Pro是Unity提供的一组工具&#xff0c;用于创建2D和3D文本。与Unity的UI文本和Text Mesh系统相比&#xff0c;TextMesh Pro提供了更好的文本格式控制和布局管理功能。 本文介绍了TMP_Text组件和Tmp字体资产(如何创建字体资产和如何解决缺字问题),还有一些高级功…...

[论文阅读] (35)TIFS24 MEGR-APT:基于攻击表示学习的高效内存APT猎杀系统

《娜璋带你读论文》系列主要是督促自己阅读优秀论文及听取学术讲座&#xff0c;并分享给大家&#xff0c;希望您喜欢。由于作者的英文水平和学术能力不高&#xff0c;需要不断提升&#xff0c;所以还请大家批评指正&#xff0c;非常欢迎大家给我留言评论&#xff0c;学术路上期…...

12 USART串口通讯

1 串口物理层 两个设备的“DB9接口”之间通过串口信号建立连接&#xff0c;串口信号线中使用“RS232标准”传输数据信号。由于RS232电平标准的信号不能直接被控制器直接识别&#xff0c;所以这些信号会经过“电平转换芯片”转换成控制器能识别的“TTL校准”的电平信号&#xff…...

CF 368A.Sereja and Coat Rack(Java实现)

问题分析 简而言之&#xff0c;小明要邀请m个绅士到家&#xff0c;家里有n个挂衣钩&#xff0c;一个挂衣钩要支付i元&#xff0c;如果挂衣钩不够了就要给每个绅士赔d元 思路分析 所以思路就很清楚了&#xff0c;获取n&#xff0c;d&#xff0c;m的值&#xff0c;并用数组存放每…...

清华大学、字节跳动等单位联合发布最新视觉语言动作模型RoboVLMs

近年来&#xff0c;视觉语言基础模型&#xff08;Vision Language Models, VLMs&#xff09;大放异彩&#xff0c;在多模态理解和推理上展现出了超强能力。现在&#xff0c;更加酷炫的视觉语言动作模型&#xff08;Vision-Language-Action Models, VLAs&#xff09;来了&#x…...

网络安全、Web安全、渗透测试之笔经面经总结

本篇文章涉及的知识点有如下几方面&#xff1a; 1.什么是WebShell? 2.什么是网络钓鱼&#xff1f; 3.你获取网络安全知识途径有哪些&#xff1f; 4.什么是CC攻击&#xff1f; 5.Web服务器被入侵后&#xff0c;怎样进行排查&#xff1f; 6.dll文件是什么意思&#xff0c;有什么…...

.NET Core NPOI 导出图片到Excel指定单元格并自适应宽度

NPOI&#xff1a;支持xlsx&#xff0c;.xls&#xff0c;版本>2.5.3 XLS&#xff1a;HSSFWorkbook&#xff0c;主要前缀HSS&#xff0c; XLSX&#xff1a;XSSFWorkbook&#xff0c;主要前缀XSS&#xff0c;using NPOI.XSSF.UserModel; 1、导出Excel添加图片效果&#xff0…...

python bs4 selenium 查找a href=javascript:();的实际点击事件和url

在使用 BeautifulSoup 和 Selenium 时&#xff0c;处理 href"javascript:;" 的链接需要一些额外的步骤&#xff0c;因为这些链接不直接指向一个 URL&#xff0c;而是通过 JavaScript 代码来执行某些操作。这可能包括导航到另一个页面、触发模态窗口、显示/隐藏内容等…...

三 BH1750 光感驱动调试1

一 扫描设备 查看手册 BH1750 光感模块 寄存器地址为 0x23 官方手册 : http://rohmfs.rohm.com/en/products/databook/datasheet/ic/sensor/light/bh1750fvi-e.pdf su 然后用 i2cdetect 扫描设备: 拨,插 对比, 探测设备挂载在 /dev/i2c-5 上, 从设备地址为 0x23 二 …...

UE材质节点Fresnel

Fresnel节点 ExponentIn 控制边缘透明度 BaseReflectFractionIn 控制中心透明度...

linux的大内核锁与顺序锁

大内核锁 Linux大内核锁&#xff08;Big Kernel Lock&#xff0c;BKL&#xff09;是Linux内核中的一种锁机制&#xff0c;用于保护内核资源&#xff0c;以下是关于它的详细介绍&#xff1a; 概念与作用 大内核锁是一种全局的互斥锁&#xff0c;在同一时刻只允许一个进程访问…...

用户注册模块用户校验(头条项目-05)

1 用户注册后端逻辑 1.1 接收参数 username request.POST.get(username) password request.POST.get(password) phone request.POST.get(phone) 1.2 校验参数 前端校验过的后端也要校验&#xff0c;后端的校验和前端的校验是⼀致的 # 判断参数是否⻬全 # 判断⽤户名是否…...

面向对象的基本概念

本篇,来介绍面向对象的基本概念。 1 面向过程与面向对象 面向过程与面向对象,是两种不同的编程思想。 1.1 面向过程 面向过程的思路,是按照问题的解决步骤,将程序分解为一个个具体的函数或过程,然后依次调用这些函数来实现程序的功能。 面向对象的程序设计,程序的执行…...

深度学习每周学习总结R4(LSTM-实现糖尿病探索与预测)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客R6中的内容&#xff0c;为了便于自己整理总结起名为R4&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 目录 0. 总结1. LSTM介绍LSTM的基本组成部分如何理解与应用LSTM 2. 数据预处理3. 数…...

如何使用 PHP 操作亚马逊 S3 对象云存储

以下是使用PHP与亚马逊S3对象云存储&#xff08;也有其他支持S3协议的云存储服务&#xff0c;原理类似&#xff09;进行交互的常见文档接口使用示例&#xff0c;涵盖了基本的操作如上传文件、下载文件、删除文件、列举文件等内容。 ### 前提条件 1. 首先&#xff0c;你需要获取…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化&#xff1a;人工智能的自我改进与监管挑战 文章目录 递归进化&#xff1a;人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管&#xff1f;3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型

CVPR 2025 | MIMO&#xff1a;支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题&#xff1a;MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者&#xff1a;Yanyuan Chen, Dexuan Xu, Yu Hu…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

用docker来安装部署freeswitch记录

今天刚才测试一个callcenter的项目&#xff0c;所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...