移动最小二乘法

移动最小二乘法(Moving Least Square,MLS)主要应用于曲线与曲面拟合,该方法基于紧支撑加权函数(即函数值只在有限大小的封闭域中定义大于零,而在域外则定义为零)和多项式基函数,通过加权最小二乘法建立适合散点(Scattered points)模型的拟合函数。其主要特点是:

  1. 不需对拟合和插值区域进行划分,只需散点模型;
  2. 由于 MLS 引入了紧支撑权函数,因此具有局部拟合或插值特点。
  3. 改变基函数的多项式次数可以方便地控制曲线曲面拟合或插值精度,改变权函数可以改变曲线曲面的光滑度。

一、移动最小二乘法原理

曲线与曲面拟合是寻找一个相对简单的函数来逼近一个数据集的过程。通过按距离加权的方法计算近似函数值和给定数据值的差的平方和来度量拟合的性能,这就是加权最小二乘法的基本思想。移动最小二乘法的提出是对传统加权最小二乘方法更一般性的推广。并特别强调加权函数的紧支撑性,因此具有局部数值分析的特点。

在拟合区域的一个局部子域上,假设需要拟合的函数 F ( x ) F(x) F(x) 的近似函数 F ^ ( x ) \hat{F}(x) F^(x)可表达为
F ^ ( x ) = ∑ j = 1 m b j ( x ) a j ( x ) = b T ( x ) a T ( x ) (1) \hat{F}(x)=\sum_{j=1}^mb_j(x)a_j(x)=\pmb{b^T(x)a^T(x)}\tag{1} F^(x)=j=1mbj(x)aj(x)=bT(x)aT(x)(1)

这里 m m m 是基函数的项数, b j ( x ) b_j(x) bj(x) 是基函数, a j ( x ) a_j(x) aj(x) 是其系数。假定基函数 b j ( x ) b_j(x) bj(x) 是多项式,则具有如下形式:

一次多项式(线性基)
{ b T = ( 1 , x ) 1 D b T = ( 1 , x , y ) 2 D \begin{cases} \pmb{b^T}=(1,x)\quad &1D\\[2ex] \pmb{b^T}=(1,x,y)&2D \end{cases} bT=(1,x)bT=(1,x,y)1D2D

二次多项式(二次基)
{ b T = ( 1 , x , x 2 ) 1 D b T = ( 1 , x , y , x 2 , x y , y 2 ) 2 D \begin{cases} \pmb{b^T}=(1,x,x^2)\quad &1D\\[2ex] \pmb{b^T}=(1,x,y,x^2,xy,y^2)&2D \end{cases} bT=(1,x,x2)bT=(1,x,y,x2,xy,y2)1D2D

立方基
{ b T = ( 1 , x , x 2 , x 3 ) 1 D b T = ( 1 , x , y , x 2 , x y , y 2 , x 3 , x 2 y , x y 2 , y 3 ) 2 D \begin{cases} \pmb{b^T}=(1,x,x^2,x^3)\quad &1D\\[2ex] \pmb{b^T}=(1,x,y,x^2,xy,y^2,x^3,x^2y,xy^2,y^3)&2D \end{cases} bT=(1,x,x2,x3)bT=(1,x,y,x2,xy,y2,x3,x2y,xy2,y3)1D2D

由(1)式,利用加权最小二乘方法构成二次形式
J = ∑ i = 1 n w ( x − x i ) [ ∑ j = 1 m b j ( x i ) a j ( x ) − f i ] 2 (2) J=\sum_{i=1}^nw(x-x_i)\Big[\sum_{j=1}^mb_j(x_i)a_j(x)-f_i\Big]^2\tag{2} J=i=1nw(xxi)[j=1mbj(xi)aj(x)fi]2(2)

这里 n n n x x x 附近的影响节点数。 w ( x − x i ) w(x-x_i) w(xxi) 是节点 x i x_i xi 具有紧支撑性质的光滑连续权函数,在 x i x_i xi 紧支持域内部, w i = w ( x − x i ) > 0 w_i=w(x-x_i)>0 wi=w(xxi)>0,在其边界和外部 w i = 0 w_i=0 wi=0 f i f_i fi x i x_i xi 节点值。

式(2)对系数 a ( x ) a(x) a(x) 求导得
∂ J ∂ a j = 2 ∑ i = 1 n b k ( x i ) w ( x − x i ) [ ∑ j = 1 m b j ( x i ) a j ( x ) − f i ] = 0 (3) \frac{\partial J}{\partial a_j}=2\sum_{i=1}^nb_k(x_i)w(x-x_i)\Big[\sum_{j=1}^mb_j(x_i)a_j(x)-f_i\Big]=0\tag{3} ajJ=2i=1nbk(xi)w(xxi)[j=1mbj(xi)aj(x)fi]=0(3)

上式写成
A ( x ) a ( x ) = D ( x ) f (4) \pmb{A(x)a(x)=D(x)f}\tag{4} A(x)a(x)=D(x)f(4)


a ( x ) = A − 1 ( x ) D ( x ) f (5) \pmb{a(x)=A^{-1}(x)D(x)f}\tag{5} a(x)=A1(x)D(x)f(5)

其中, A = B T W ( x ) B , D = B T W ( x ) \pmb{A=B^TW(x)B,\quad D=B^TW(x)} A=BTW(x)B,D=BTW(x)

其中,
B = [ b 1 ( x 1 ) b 2 ( x 1 ) ⋯ b m ( x 1 ) b 1 ( x 2 ) b 2 ( x 2 ) ⋯ b m ( x 2 ) ⋮ ⋮ ⋮ b 1 ( x n ) b 2 ( x n ) ⋯ b m ( x n ) ] W ( x ) = [ w ( x − x 1 ) 0 ⋯ 0 0 w ( x − x 2 ) ⋯ 0 ⋮ ⋮ ⋮ 0 0 ⋯ w ( x − x n ) ] \pmb{B}=\left[\begin{matrix} b_1(x_1) &b_2(x_1) &\cdots &b_m(x_1)\\ b_1(x_2) &b_2(x_2) &\cdots &b_m(x_2)\\ \vdots &\vdots & &\vdots\\ b_1(x_n) &b_2(x_n) &\cdots &b_m(x_n)\\ \end{matrix}\right]\\[3ex] \pmb{W(x)}=\left[\begin{matrix} w(x-x_1) &0 &\cdots &0\\ 0 &w(x-x_2) &\cdots &0\\ \vdots &\vdots & &\vdots\\ 0 &0 &\cdots &w(x-x_n)\\ \end{matrix}\right] B= b1(x1)b1(x2)b1(xn)b2(x1)b2(x2)b2(xn)bm(x1)bm(x2)bm(xn) W(x)= w(xx1)000w(xx2)000w(xxn)

将(5)式代入(1)式, F ^ ( x ) \hat{F}(x) F^(x) 可表达为:
F ^ ( x ) = b T A − 1 ( x ) D ( x ) f \hat{F}(x)=\pmb{b^TA^{-1}(x)D(x)f} F^(x)=bTA1(x)D(x)f

特别地当基函数为常数即 b = 1 b=1 b=1 时,
J = ∑ i = 1 n w ( x − x i ) [ a 1 − f i ] 2 J=\sum_{i=1}^nw(x-x_i)[a_1-f_i]^2 J=i=1nw(xxi)[a1fi]2

J J J a 1 a_1 a1 求导,令其为 0:
∂ J ∂ a 1 = 2 ∑ i = 1 n w ( x − x i ) [ a 1 − f i ] = 0 \frac{\partial J}{\partial a_1}=2\sum_{i=1}^nw(x-x_i)[a_1-f_i]=0 a1J=2i=1nw(xxi)[a1fi]=0

求得
a 1 = ∑ i = 1 n w ( x − x i ) f i ∑ i = 1 n w ( x − x i ) a_1=\dfrac{\sum_{i=1}^nw(x-x_i)f_i}{\sum_{i=1}^nw(x-x_i)} a1=i=1nw(xxi)i=1nw(xxi)fi

所以
F ^ ( x ) = ∑ i = 1 n w ( x − x i ) f i ∑ i = 1 n w ( x − x i ) \hat{F}(x)=\dfrac{\sum_{i=1}^nw(x-x_i)f_i}{\sum_{i=1}^nw(x-x_i)} F^(x)=i=1nw(xxi)i=1nw(xxi)fi

二、紧支撑权函数

移动最小二乘法曲线曲面拟合或插值计算中,权函数在其中具有非常重要的作用。这里的权函数必须具有紧支撑性,使其有能力在处理大规模曲线与曲面拟合时局部修改更容易。紧支撑权函数的选择应遵循几个原则:

  1. 每点的权函数值在紧支撑域内是大于零的正数,而在该点紧支撑域边界和外部为零;
  2. 必须具有单位分解性;
  3. 权函数必须光滑连续可导;
  4. 在支撑域内愈远离该点,权值愈小,即保证权值与距离成反比关系。

(1)紧支撑域及生成算法

紧支撑权函数的引入导致移动最少二乘法具有局部拟合或插值性质,大大提高了计算效率和规模。MLS 进行局部拟合或插值时,参与局部拟合或插值的相邻节点对 “计算点” 的影响是由给定拟合或插值节点的局部紧支撑域决定。

MLS 近似计算之前先要生成每个节点的局部紧支撑域,一个节点的局部紧支撑域形状可以是 “圆” ,“椭圆” 或 “矩形” 等,下面以 “圆” 紧支撑域为例,说明如何由离散节点模型自动形成各节点的紧支撑域。该算法确定 N 个节点的离散模型的紧支撑域。

紧支撑域形成算法:

  1. 赋 N 个节点的每一个 “圆” 紧支撑域的大小 h i = 0 h_i=0 hi=0
  2. 以每个节点为原点,确定各象限与该点距离最近的点,其自动计算得到 4 个象限内的距离分别为 h i 1 、 h i 2 、 h i 3 、 h i 4 h_{i1}、h_{i2}、h_{i3}、h_{i4} hi1hi2hi3hi4 确定 h i = max ⁡ { h i 1 , h i 2 , h i 3 , h i 4 } h_i=\max\{h_{i1},h_{i2},h_{i3},h_{i4}\} hi=max{hi1,hi2,hi3,hi4};保证紧支持域包含各个方向合适的节点,如图所示。循环 N 个节点;
  3. 引入紧支撑域大小的影响系数 β \beta β,每个节点 h i h_i hi 乘系数 β \beta β,根据实际情况适当扩大紧支撑域大小以提高拟合或插值精度,一般取 β = 1.2 ∼ 2.5 \beta=1.2\sim 2.5 β=1.22.5

上面算法称为四象限法则,每个节点支撑域的大小由该法则确定。
在这里插入图片描述
移动最小二乘法中,权函数紧支撑域大小选取要合适,既要保证所有离散节点的支撑域形成对拟合或插值全域的覆盖,又要使域内需拟合或插值 “计算点” 有足够多的邻近节点覆盖以保证精度和使 A A A 矩阵可逆从而使 MLS 算法可行。当选取线性基函数时,曲线拟合影响节点不得小于 2 个,曲面拟合影响节点不得少于不在同直线上的 3 个节点。

(2)‘‘计算点” 的影响节点确定

拟合(或插值)域内任意一点往往同时处于好几个节点的支撑域相交部分。如图所示, x 1 , x 2 , x 3 , x 4 , x 5 x_1,x_2,x_3,x_4,x_5 x1,x2,x3,x4,x5 的支撑域均覆盖住 “计算点 x x x”,即计算 “计算点” 时需考虑这五个节点的影响(通常称为 “计算点 x x x” 的影响节点),该 “计算点” 的函数值及其导数值的计算皆需以此作为依据进行拟合或插值。图中 x 6 x_6 x6 点的支撑域大小(如图中的 “虚线圆” )不能盖住 “计算点 x x x ”,因此不参与 “计算点 x x x ” 的相关计算。
在这里插入图片描述

三、基函数的正交化

多项式基函数的项数选取越多,则矩阵 A A A 阶数越高,其求逆就越费时。随着 “计算点” 的增多,每点的 A A A 矩阵不同,皆需求逆,计算量很大。因此,为了避免方程中 A A A 的求逆,减少计算量,可以利用 Schmidt 正交化过程由基函数 b j ( x ) , j = 1 , ⋯ , m b_j(x),\quad j=1,\cdots,m bj(x),j=1,,m 构造正交形式的基函数 q j ( x ) , j = 1 , ⋯ , m q_j(x),\quad j=1,\cdots,m qj(x),j=1,,m,由此得到的 A A A 矩阵将是对角矩阵。基函数的正交化不仅避免了矩阵 A A A 的求逆,而且可以避免可能出现的病态矩阵。

Schmidt 正交化过程
首先因为基函数系数 a ( x ) a(x) a(x) x x x b ( x ) b(x) b(x) 中的 x x x 意义不同,所以在正交化过程和最小二乘中区分两个 x x x 非常必要。以下将 a ( x ) a(x) a(x) x x x 记为 x ˉ \bar{x} xˉ b ( x ) b(x) b(x) 中的 x x x 记为 x x x

对给定的多项式基函数 b j ( x ) , j = 1 , ⋯ , m b_j(x),\quad j=1,\cdots,m bj(x),j=1,,m,存在正交形式的基函数 q j ( x , x ˉ ) , j = 1 , ⋯ , m q_j(x,\bar{x}),\quad j=1,\cdots,m qj(x,xˉ),j=1,,m,并且
q 1 ( x , x ˉ ) = b 1 ( x ) q j ( x , x ˉ ) = b j ( x ) − ∑ J = 1 j − 1 α j J ( x ˉ ) q J ( x , x ˉ ) , j = 2 , ⋅ , m q_1(x,\bar{x})=b_1(x)\\ q_j(x,\bar{x})=b_j(x)-\sum_{J=1}^{j-1}\alpha_{jJ}(\bar{x})q_J(x,\bar{x}),\quad j=2,\cdot,m q1(x,xˉ)=b1(x)qj(x,xˉ)=bj(x)J=1j1αjJ(xˉ)qJ(x,xˉ),j=2,,m

其中
α j J = ∑ i = 1 n w i ( x ˉ ) b j ( x i ) q J ( x i , x ˉ ) ∑ j = 1 n w i ( x ˉ ) q J 2 ( x i , x ˉ ) \alpha_{jJ}=\frac{\sum_{i=1}^nw_i(\bar{x})b_j(x_i)q_J(x_i,\bar{x})}{\sum_{j=1}^nw_i(\bar{x})q_J^2(x_i,\bar{x})} αjJ=j=1nwi(xˉ)qJ2(xi,xˉ)i=1nwi(xˉ)bj(xi)qJ(xi,xˉ)

一维情况下的正交基函数为:
{ q 0 ( x , x ˉ ) = 1 q 1 ( x , x ˉ ) = x − α 1 q k + 1 ( x , x ˉ ) = ( x − α k + 1 ) q k ( x , x ˉ ) − β k + 1 q k − 1 ( x , x ˉ ) α k + 1 ( x ˉ ) = ( x q k , q k ) ( q k , q k ) = ∑ i = 1 m w i ( x ˉ ) x i q k 2 ( x i , x ˉ ) ∑ i = 1 m w i ( x ˉ ) q k 2 ( x i , x ˉ ) β k + 1 ( x ˉ ) = ( q k , q k ) ( q k − 1 , q k − 1 ) = ∑ i = 1 m w i ( x ˉ ) q k 2 ( x i , x ˉ ) ∑ i = 1 m w i ( x ˉ ) q k − 1 2 ( x i , x ˉ ) \begin{cases} q_0(x,\bar{x})=1\\[1ex] q_1(x,\bar{x})=x-\alpha_1\\[1ex] q_{k+1}(x,\bar{x})=(x-\alpha_{k+1})q_k(x,\bar{x})-\beta_{k+1}q_{k-1}(x,\bar{x})\\[1ex] \alpha_{k+1}(\bar{x})=\dfrac{(xq_k,q_k)}{(q_k,q_k)}=\dfrac{\sum_{i=1}^mw_i(\bar x)x_iq_k^2(x_i,\bar x)}{\sum_{i=1}^mw_i(\bar x)q_k^2(x_i,\bar x)}\\[3ex] \beta_{k+1}(\bar x)=\dfrac{(q_k,q_k)}{(q_{k-1},q_{k-1})}=\dfrac{\sum_{i=1}^mw_i(\bar x)q_k^2(x_i,\bar x)}{\sum_{i=1}^mw_i(\bar x)q_{k-1}^2(x_i,\bar x)} \end{cases} q0(x,xˉ)=1q1(x,xˉ)=xα1qk+1(x,xˉ)=(xαk+1)qk(x,xˉ)βk+1qk1(x,xˉ)αk+1(xˉ)=(qk,qk)(xqk,qk)=i=1mwi(xˉ)qk2(xi,xˉ)i=1mwi(xˉ)xiqk2(xi,xˉ)βk+1(xˉ)=(qk1,qk1)(qk,qk)=i=1mwi(xˉ)qk12(xi,xˉ)i=1mwi(xˉ)qk2(xi,xˉ)

( 令 β 1 = 0 \beta_1=0 β1=0 ),其中
k = 0 , 1 , ⋯ , m − 1 k=0,1,\cdots,m-1 k=0,1,,m1

由(2.3)式可知:
∑ i = 1 n w i ( x ˉ ) ∑ j = 1 m b k ( x i ) b j ( x i ) a j ( x ˉ ) = ∑ i = 1 n w i ( x ˉ ) b k ( x i ) f i ∑ k , j = 1 m ( ∑ i = 1 n ( w i ( x ˉ ) b k ( x i ) b j ( x i ) ) ) a j ( x ˉ ) = ∑ i = 1 n w i ( x ˉ ) b k ( x i ) f i (6) \sum_{i=1}^nw_i(\bar x)\sum_{j=1}^mb_k(x_i)b_j(x_i)a_j(\bar x)=\sum_{i=1}^nw_i(\bar x)b_k(x_i)f_i\\ \sum_{k,j=1}^m\Big(\sum_{i=1}^n(w_i(\bar x)b_k(x_i)b_j(x_i))\Big)a_j(\bar x)=\sum_{i=1}^nw_i(\bar x)b_k(x_i)f_i\tag{6} i=1nwi(xˉ)j=1mbk(xi)bj(xi)aj(xˉ)=i=1nwi(xˉ)bk(xi)fik,j=1m(i=1n(wi(xˉ)bk(xi)bj(xi)))aj(xˉ)=i=1nwi(xˉ)bk(xi)fi(6)

由加权正交基定义
( b k , b j ) = ∑ i = 1 n w i ( x ˉ ) b k ( x i ) b j ( x i ) ( b k , f ) = ∑ i = 1 n w i ( x ˉ ) b k ( x i ) f i (b_k,b_j)=\sum_{i=1}^nw_i(\bar x)b_k(x_i)b_j(x_i)\\ (b_k,f)=\sum_{i=1}^nw_i(\bar x)b_k(x_i)f_i (bk,bj)=i=1nwi(xˉ)bk(xi)bj(xi)(bk,f)=i=1nwi(xˉ)bk(xi)fi

因此式(6)表示为
∑ j = 1 m ( b k , b j ) a j ( x ) = ( b k , f ) k , j = 1 , ⋯ , m \sum_{j=1}^m(b_k,b_j)a_j(x)=(b_k,f)\quad k,j=1,\cdots,m j=1m(bk,bj)aj(x)=(bk,f)k,j=1,,m

( b k , b j ) (b_k,b_j) (bk,bj) 生成的矩阵是满阵,可以通过 Schmidt 正交化中的正交基函数 q j ( x ) ( j = 1 , ⋯ , m ) q_j(x)\ (j=1,\cdots,m) qj(x) (j=1,,m) 将其对角化。由正交基的性质得到
F ^ ( x ) = ∑ j = 1 m q j ( x , x ˉ ) a j ( x ˉ ) \hat{F}(x)=\sum_{j=1}^mq_j(x,\bar x)a_j(\bar x) F^(x)=j=1mqj(x,xˉ)aj(xˉ)

由此推得:
∑ j = 1 m ( q k , q j ) a j ( x ) = ( q k , f ) \sum_{j=1}^m(q_k,q_j)a_j(x)=(q_k,f) j=1m(qk,qj)aj(x)=(qk,f)

因为
( q k , q j ) = { 0 k ≠ j ≠ 0 k = j (q_k,q_j)= \begin{cases} 0\quad & k\neq j\\ \neq 0 &k=j \end{cases} (qk,qj)={0=0k=jk=j

矩阵 A A A 是对角矩阵, a j ( x ) a_j(x) aj(x) 的求解无需求逆,即
a j ( x ˉ ) = ( q j , f ) ( q j , q j ) = ∑ i = 1 n w i ( x ˉ ) q j ( x i , x ˉ ) f i ∑ i = 1 n w i ( x ˉ ) q j 2 ( x i , x ˉ ) a_j(\bar x)=\dfrac{(q_j,f)}{(q_j,q_j)}=\dfrac{\sum_{i=1}^nw_i(\bar x)q_j(x_i,\bar x)f_i}{\sum_{i=1}^nw_i(\bar x)q_j^2(x_i,\bar x)} aj(xˉ)=(qj,qj)(qj,f)=i=1nwi(xˉ)qj2(xi,xˉ)i=1nwi(xˉ)qj(xi,xˉ)fi

d i ( x ˉ ) = ∑ i = 1 n w i ( x ˉ ) q j 2 ( x i , x ˉ ) d_i(\bar x)=\sum_{i=1}^nw_i(\bar x)q_j^2(x_i,\bar x) di(xˉ)=i=1nwi(xˉ)qj2(xi,xˉ)

x , x ˉ x,\quad \bar x x,xˉ 的区分只是最小二乘法过程需要,这一过程完成后,就不再有区分的必要,最终得到
F ^ ( x ) = ∑ i = 1 n φ i f i φ i = w i ( x ) ∑ j = 1 m q j ( x i , x ) q j ( x i , x ) d i ( x ) \hat{F}(x)=\sum_{i=1}^n\varphi_if_i\\ \varphi_i=w_i(x)\sum_{j=1}^m\frac{q_j(x_i,x)q_j(x_i,x)}{d_i(x)} F^(x)=i=1nφifiφi=wi(x)j=1mdi(x)qj(xi,x)qj(xi,x)

当基函数次数增加时,只需要计算 a m + 1 a_{m+1} am+1 以及 Schmidt 正交化过程中的 α m + 1 \alpha_{m+1} αm+1 β m + 1 \beta_{m+1} βm+1 即可,不需要重新计算矩阵 A A A 中所有元素,减少了计算量,降低了误差。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/676330.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【新书推荐】7.2节 寄存器寻址方式和直接寻址方式

本节内容:寄存器寻址方式的操作数在CPU内部的寄存器中,指令中指定寄存器号。 ■寄存器寻址方式:16位的寄存器操作数可以是AX、BX、CX、DX、SI、DI、SP、BP共计8个16位通用寄存器;8位寄存器操作数可以是AH、AL、BH、BL、CH、CL、D…

echarts 曲线图自定义提示框

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>曲线图</title><!-- 引入 ECharts 库 -->…

猪圈密码.

1.介绍 又称朱高密码、共济会密码、共济会暗号、共济会员密码&#xff0c;是一种以格子为基础的简单替代式密码。即时使用符号&#xff0c;也不影响密码分析&#xff0c;亦可用其他替代式密码。 2.产生背景 这是一种外形古怪的密码&#xff0c;已经传递了几百年。没有人明确…

防疫物资管理新篇章:Java+SpringBoot实战

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

【知识整理】技术新人的培养计划

一、培养计划落地实操 1. 概要 新人入职&#xff0c;要给予适当的指导&#xff0c;目标&#xff1a; 1、熟悉当前环境&#xff1a; 生活环境&#xff1a;吃饭、交通、住宿、娱乐 工作环境&#xff1a;使用的工具&#xff0c;Mac、maven、git、idea 等 2、熟悉并掌握工作技…

【C++从0到王者】第四十二站:类型转换

文章目录 一、 C语言中的类型转换1. C语言中的类型转换2.一个常见的坑 二、为什么C需要四种类型转换三、C强制类型转换1.static_cast2.reinterpret_cast3.const_cast4.dynamic_cast 四、RTTI 一、 C语言中的类型转换 1. C语言中的类型转换 在C语言中&#xff0c;如果赋值运算符…

免费软件推荐-开源免费批量离线图文识别(OCR)

近期要批量处理图片转电子化&#xff0c;为了解决这个世纪难题&#xff0c;试了很多软件&#xff08;华为手机自带OCR识别、 PandaOCR、天若OCR、Free OCR&#xff09;等软件&#xff0c;还是选择了这一款&#xff0c;方便简单 一、什么是OCR? 光学字符识别&#xff08;Opt…

大模型学习 一

https://www.bilibili.com/video/BV1Kz4y1x7AK/?spm_id_from333.337.search-card.all.click GPU 计算单元多 并行计算能力强 指数更重要 A100 80G V100 A100 海外 100元/时 单卡 多卡并行&#xff1a; 单机多卡 模型并行 有资源的浪费 反向传播 反向传播&#xff08;B…

C++11新特性(一)

目录 C11简介 统一的列表初始化 变量类型推导 std::initializer_list 声明 auto decltype nullptr STL的一些变化 右值引用 右值引用和左值引用 右值引用适用场景 移动构造和移动语义 对类的影响 可变参数模板 递归函数方式展开参数包 STL容器中的empalce相…

使用Launch4j将jar包转成.exe可执行文件

Launch4j官网:Launch4j - Cross-platform Java executable wrapper 然后点击上面按钮 随便写个文件名

2024-02-08(Flume)

1.Flume 的架构和MQ消息队列有点类似 2.Flume也可以做数据的持久化操作 在Channel部分选择使用File channel组件 3.Flume进行日志文件监控 场景&#xff1a;企业中应用程序部署后会将日志写入到文件中&#xff0c;我们可以使用Flume从各个日志文件将日志收集到日志中心以便…

数据结构(C语言)代码实现(八)——顺序栈实现数值转换行编辑程序括号分配汉诺塔

目录 参考资料 顺序栈的实现 头文件SqStack.h&#xff08;顺序栈函数声明&#xff09; 源文件SqStack.cpp&#xff08;顺序栈函数实现&#xff09; 顺序栈的三个应用 数值转换 行编辑程序 顺序栈的实现测试 栈与递归的实现&#xff08;以汉诺塔为例&#xff09; 参考资…

【Leetcode】236. 二叉树的最近公共祖先

文章目录 题目思路代码结果 题目 题目链接 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个节点 p、q&#xff0c;最近公共祖先表示为一个节点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可…

[算法前沿]--058- LangChain 构建 LLM 应用详细教程

什么是LLMs? LLM,即大型语言模型,是指经过大量文本数据训练的最先进的语言模型。它利用深度学习技术来理解和生成类似人类的文本,使其成为各种应用程序的强大工具,例如文本完成、语言翻译、情感分析等。LLMs最著名的例子之一是 OpenAI 的 GPT-3,它因其语言生成能力而受到…

C语言笔试题之求出二叉树的最大深度(递归解决)

实例要求&#xff1a; 1、给定一个二叉树 root &#xff0c;返回其最大深度&#xff1b;2、二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数&#xff1b; 案例展示&#xff1a; 实例分析&#xff1a; 1、判断根节点是否为空&#xff1b;2、分别递归处理左…

containerd中文翻译系列(十九)cri插件

cri插件包含的内容比较多&#xff0c;阅读之前请深呼吸三次、三次、三次。 CRI 插件的架构 本小节介绍了 containerd 的 cri 插件的架构。 该插件是 Kubernetes 容器运行时接口&#xff08;CRI&#xff09; 的实现。Containerd与Kubelet在同一个节点上运行。containerd内部的…

1987-2022年各省进出口总额数据整理(含进口和出口)(无缺失)

1987-2022年各省进出口总额数据整理&#xff08;含进口和出口&#xff09;&#xff08;无缺失&#xff09; 1、时间&#xff1a;1987-2022年 2、来源&#xff1a;各省年鉴、统计公报 3、指标&#xff1a;进出口总额&#xff08;万美元&#xff09;、进口总额&#xff08;万美…

Vuex介绍和使用

1. 什么是Vuex Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式和库。它解决了在大型 Vue.js 应用程序中共享和管理状态的问题&#xff0c;使得状态管理变得更加简单、可预测和可维护。 在 Vue.js 应用中&#xff0c;组件之间的通信可以通过 props 和事件进行&#xff0c…

SCI 1区论文:Segment anything in medical images(MedSAM)[文献阅读]

基本信息 标题&#xff1a;Segment anything in medical images中文标题&#xff1a;分割一切医学图像发表年份: 2024年1月期刊/会议: Nature Communications分区&#xff1a; SCI 1区IF&#xff1a;16.6作者: Jun Ma; Bo Wang(一作&#xff1b;通讯)单位&#xff1a;加拿大多…

文件绕过-Unsafe Fileuoload

文件上传基础 什么是文件上传 将客户端数据以文件形式封装通过网络协议发送到服务器端&#xff0c;在服务器端解析数据&#xff0c;最终在服务端硬盘上作为真实的文件保存。 通常一个文件以HTTP协议进行上传时&#xff0c;将以POST请求发送至Web服务器&#xff0c;Web服务器…