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

移动最小二乘法

移动最小二乘法(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 中所有元素,减少了计算量,降低了误差。

相关文章:

移动最小二乘法

移动最小二乘法(Moving Least Square,MLS)主要应用于曲线与曲面拟合,该方法基于紧支撑加权函数(即函数值只在有限大小的封闭域中定义大于零,而在域外则定义为零)和多项式基函数,通过…...

【LeetCode】37. 解数独(困难)——代码随想录算法训练营Day30

题目链接:37. 解数独 题目描述 编写一个程序,通过填充空格来解决数独问题。 数独的解法需 遵循如下规则: 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。&…...

VUE学习——属性绑定

属性绑定&#xff0c;就是给html添加id、class这样类似的操作。 <template><div v-bind:id"dynamicId"><div v-bind:class"dynamicClass">Test</div></div> </template><script>export default{data(){return{…...

vue3 之 通用组件统一注册全局

components/index.js // 把components中的所组件都进行全局化注册 // 通过插件的方式 import ImageView from ./ImageView/index.vue import Sku from ./XtxSku/index.vue export const componentPlugin {install (app) {// app.component(组件名字&#xff0c;组件配置对象)…...

[Java][算法 双指针]Day 02---LeetCode 热题 100---04~07

LeetCode 热题 100---04~07 第一题&#xff1a;移动零 思路 找到每一个为0的元素 然后移到数组的最后 但是需要注意的是 要在给定的数组原地进行修改 并且其他非零元素的相对顺序不能改变 我们采用双指针法 定义两个指针i和j i和j一开始分别都在0索引位置 然后判断j所…...

【问题解决】如何将一个服务器的docker迁移到另一个服务器

要将Docker容器从一台机器迁移到另一台机器&#xff0c;可以按照以下步骤操作&#xff1a; 在机器A上提交容器为镜像&#xff1a; 使用docker commit命令将运行中的容器保存为新的镜像。这里需要容器的ID或名称&#xff0c;以及你想要命名的目标镜像名。 docker commit [容器…...

C++单例模式详解

目录 0. 前言 1. 懒汉式单例模式 1.1 最简单的单例模式 1.2 防止内存泄漏 1.2.1 智能指针的方法 1.2.2 静态嵌套的方法 1.3 保证线程安全 1.4 C11版本的优雅解决方案 2. 饿汉式单例模式 0. 前言 起因是在程序中重复声明了一个单例模式的变量&#xff0c;后来程序怎么调…...

LLM应用开发与落地:流式响应

一、背景 最近智能客服产品给到一个游戏客户那边&#xff0c;客户那边的客服负责人体验后认为我们产品回答的准确率是还是比较高的。同时&#xff0c;他反馈了几个需要改进的地方&#xff0c;其中一个就是机器人回复慢。机器人回复慢有很多原因&#xff0c;也有优化方式&#…...

神经网络 | 基于 CNN 模型实现土壤湿度预测

Hi&#xff0c;大家好&#xff0c;我是半亩花海。在现代农业和环境监测中&#xff0c;了解土壤湿度的变化对于作物生长和水资源管理至关重要。通过深度学习技术&#xff0c;特别是卷积神经网络&#xff0c;我们可以利用过去的土壤湿度数据来预测未来的湿度趋势。本文将使用 Pad…...

江科大STM32 终

目录 SPI协议10.1 SPI简介W25Q64简介10.3 SPI软件读写W25Q6410.4 SPI硬件外设读写W25Q64 BKP备份寄存器、PER电源控制器、RTC实时时钟11.0 Unix时间戳代码示例&#xff1a;读写备份寄存器BKP11.2 RTC实时时钟 十二、PWR电源控制12.1 PWR简介代码示例&#xff1a;修改主频12.3 串…...

《MySQL 简易速速上手小册》第10章:未来趋势和进阶资源(2024 最新版)

文章目录 10.1 MySQL 在云计算和容器化中的应用10.1.1 基础知识10.1.2 重点案例&#xff1a;使用 Python 部署 MySQL 到 Kubernetes10.1.3 拓展案例 1&#xff1a;在 AWS RDS 上部署 MySQL 实例10.1.4 拓展案例 2&#xff1a;使用 Docker 部署 MySQL 10.2 MySQL 和 NoSQL 的整合…...

Stable Diffusion 模型下载:GhostMix(幽灵混合)

文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十 下载地址 模型介绍 GhostMix 是绝对让你惊艳的模型&#xff0c;也是自己认为现在最强的2.5D模型。我认为模型的更新应该是基于现有的画面整体不大变的前提下&#xff0c;提高模型的成…...

django解决Table ‘xx‘ already exists的方法

1&#xff0c;首先看已存在的这个库表结构是什么样的&#xff0c;先让对应的model.py恢复到和他一样的字段 2&#xff0c;删除对应app下的migrations目录里面除__init__.py文件的其他所有文件 3&#xff0c;回到manage.py所在目录执行python manage.py makemigrations 4&#x…...

qt学习:arm摄像头+c调用v412框架驱动+qt调用v412框架驱动 显示摄像头画面

目录 跟内核进行数据通信的函数 编程步骤 c代码 头文件 打开摄像头文件 /dev/videox 获取当前主机上&#xff08;开发板&#xff09;摄像头列表信息 设置当前摄像头的画面格式 比如说 设置 采集图像的宽度为640 高度 480 在内核空间中&#xff0c;申请一个缓冲区队列…...

Linux 36.2@Jetson Orin Nano基础环境构建

Linux 36.2Jetson Orin Nano基础环境构建 1. 源由2. 步骤2.1 安装NVIDIA Jetson Linux 36.2系统2.2 必备软件安装2.3 基本远程环境2.3.1 远程ssh登录2.3.2 samba局域网2.3.3 VNC远程登录 2.4 开发环境安装 3. 总结 1. 源由 现在流行什么&#xff0c;也跟风来么一个一篇。当然&…...

牛客网SQL264:查询每个日期新用户的次日留存率

官网链接&#xff1a; 牛客每个人最近的登录日期(五)_牛客题霸_牛客网牛客每天有很多人登录&#xff0c;请你统计一下牛客每个日期新用户的次日留存率。 有一个登录(login。题目来自【牛客题霸】https://www.nowcoder.com/practice/ea0c56cd700344b590182aad03cc61b8?tpId82 …...

echarts 曲线图自定义提示框

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

幻兽帕鲁服务器怎么搭建?Palworld多人联机教程

玩转幻兽帕鲁服务器&#xff0c;阿里云推出新手0基础一键部署幻兽帕鲁服务器教程&#xff0c;傻瓜式一键部署&#xff0c;3分钟即可成功创建一台Palworld专属服务器&#xff0c;成本仅需26元&#xff0c;阿里云服务器网aliyunfuwuqi.com分享2024年新版基于阿里云搭建幻兽帕鲁服…...

DAY39: 动态规划不同路径问题62

Leetcode: 62 不同路径 机器人从(0 , 0) 位置出发&#xff0c;到(m - 1, n - 1)终点。 基本思路 1、确定dp数组&#xff08;dp table&#xff09;以及下标的含义 dp[i][j] &#xff1a;表示从&#xff08;0 &#xff0c;0&#xff09;出发&#xff0c;到(i, j) 有dp[i][j]条…...

idea开发工具的简单使用与常见问题

1、配置git 选择左上角目录file->setting 打开&#xff0c;Version Control 目录下Git&#xff0c;选择git安装目录下的git.exe文件&#xff1b; 点击test&#xff0c;出现git版本&#xff0c;则表示git识别成功&#xff0c;点击右下角确认即可生效。 2、配置node.js 选…...

使用 WMI 查询安全软件信息

在这篇文章中&#xff0c;我们将详细介绍如何使用 Windows Management Instrumentation (WMI) API 来查询当前计算机上安装的安全软件的基本信息。我们将分析代码的各个部分&#xff0c;并解释每个步骤所涉及的技术和原理。 一、什么是 WMI&#xff1f; WMI 是 Windows Manag…...

创建TextMeshPro字体文件

相比于Unity的Text组件&#xff0c;TextMesh Pro提供了更强大的文本格式和布局控制&#xff0c;更高级的文本渲染技术&#xff0c;更灵活的文本样式和纹理支持&#xff0c;更好的性能以及更易于使用的优点。但unity自带TextMeshPro字体不支持中文。这里使用普通字体文件生成Tex…...

信创ARM架构QT应用开发环境搭建

Linux ARM架构QT应用开发环境搭建 前言交叉工具链Ubuntu上安装 32 位 ARM 交叉工具链Ubuntu上安装 64 位 ARM 交叉工具链 交叉编译 QT 库下载 QT 源码交叉编译 QT 源码 Qt Creator交叉编译配置配置 Qt Creator Kits创建一个测试项目 小结 前言 有没有碰到过这种情况&#xff1…...

使用SPM_batch进行批量跑脚本(matlab.m)

软件&#xff1a;spm8matlab2023bwin11 数据格式&#xff1a; F:\ASL\HC\CBF\HC_caishaoqing\CBF.nii F:\ASL\HC\CBF\HC_caishaoqing\T1.nii F:\ASL\HC\CBF\HC_wangdonga\CBF.nii F:\ASL\HC\CBF\HC_wangdonga\T1.nii clear spmdirD:\AnalysisApps\spm8; datadirF:\ASL\HC\CBF…...

力扣0124——二叉树的最大路径和

二叉树的最大路径和 难度&#xff1a;困难 题目描述 二叉树中的 路径 被定义为一条节点序列&#xff0c;序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点&#xff0c;且不一定经过根节点。 路径和 是路径中各节点…...

c# 字符串帮助类

public class StringHelper { #region 全角半角互相转换 /// <summary> /// 转全角的函数(SBC case) /// </summary> /// <param name"str">任意字符串</param> /// <returns>全…...

LabVIEW双光子荧光显微成像系统开发

双光子显微成像是一种高级荧光显微技术&#xff0c;广泛用于生物学和医学研究&#xff0c;尤其是用于活体组织的深层成像。在双光子成像过程中&#xff0c;振镜&#xff08;Galvo镜&#xff09;扮演了非常关键的角色&#xff0c;它负责精确控制激光束在样本上的扫描路径。以下是…...

Prim模板

通过代码探索Prim算法&#xff1a;最小生成树之旅 在计算机科学领域&#xff0c;图算法占据了至关重要的位置&#xff0c;尤其是在设计高效的网络&#xff08;无论是社交网络、计算机网络还是交通网&#xff09;时。在这些算法中&#xff0c;寻找最小生成树&#xff08;MST&am…...

CSS之盒子模型

盒子模型 01-选择器 结构伪类选择器 基本使用 作用&#xff1a;根据元素的结构关系查找元素。 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IE…...

Linux系统安装(CentOS Vmware)

学习环境安装 VMware安装 VMware下载&安装 访问官网&#xff1a;https://www.vmware.com 在此处可以选择语言 点击China&#xff08;简体中文&#xff09; 点击产品&#xff0c;点击Workstation Pro 下滑&#xff0c;点击下载试用版 下滑找到Workstation 17 Pro for Wi…...

STM32 硬件随机数发生器(RNG)

STM32 硬件随机数发生器 文章目录 STM32 硬件随机数发生器前言第1章 随机数发生器简介1.1 RNG主要特性1.2.RNG应用 第2章 RNG原理框图第3章 RNG相关寄存器3.1 RNG 控制寄存器 (RNG_CR)3.2 RNG 状态寄存器 (RNG_SR)3.3 RNG 数据寄存器 (RNG_DR) 第3章 RNG代码部分第4章 STM32F1 …...

Window环境下使用go编译grpc最新教程

网上的grpc教程都或多或少有些老或者有些问题&#xff0c;导致最后执行生成文件时会报很多错。这里给出个人实践出可执行的编译命令与碰到的报错与解决方法。&#xff08;ps:本文代码按照煎鱼的教程编写&#xff1a;4.2 gRPC Client and Server - 跟煎鱼学 Go (gitbook.io)&…...

STM32——FLASH(1)简单介绍、分类、读写流程及注意事项

文章目录 FLASH的特点Nor flash和nand flashflash的读写flash 的存储单位 flash的读写过程 FLASH的特点 可擦写数据可修改可重写访问速度<ROM Nor flash和nand flash Nor flash 1、与SDRAM相似&#xff0c;用户可以直接运行装载到NORFLASH里面的代码&#xff0c;减少SRAM…...

MySQL的DML语言

DML&#xff1a;Data Manipulation Language&#xff08;数据操作语言&#xff09; DML语言用来对数据库中表的数据记录进行增、删、改操作。 一、添加数据命令 注意&#xff1a; 插入数据时&#xff0c;指定的字段顺序需要与值的顺序是一一对应的。 字符串和日期型数据应该包…...

Vivado-IP核

Vivado-IP核 主程序 timescale 1ns / 1ps ////module ip_clk_wiz(input sys_clk,input sys_rst_n,output clk_out1,output clk_out2,output clk_out3,output clk_out4,output locked);clk_wiz_0 instance_name(// Clock out ports.clk_out1(clk_out1), // output clk_out…...

品牌如何营造生活感氛围?媒介盒子分享

「生活感」简而言之是指人们对生活的感受和意义&#xff0c;它往往没有充斥在各种重要的场合和事件中&#xff0c;而是更隐藏在细碎平凡的生活场景中。在营销越来越同质化的当下&#xff0c;品牌应该如何打破常规模式&#xff0c;洞察消费情绪&#xff0c;找到更能打动消费者心…...

Java 学习和实践笔记(2)

今天的学习进度&#xff1a; 注册并下载安装好了Java 8&#xff0c;之后进行以下配置。 1&#xff09;path 是一个常见的环境变量&#xff0c;它告诉系统除了在当前的目标下妹寻找此程序外&#xff0c;还可以到path指定的目录下找。这句话是什么意思呢&#xff1f;以下举报例…...

Python:批量url链接保存为PDF

我的数据是先把url链接获取到存入excel中&#xff0c;后续对excel做的处理&#xff0c;各位也可以直接在程序中做处理&#xff0c;下面就是针对excel中的链接做批量处理 excel内容格式如下&#xff08;涉及具体数据做了隐藏&#xff09; 标题文件链接文件日期网页标题1http://…...

【LeetCode每日一题】525连续数组 303区域和检索(前缀和的基本概念和3个简单案例)

前缀和 // 构造prefix let prefix [0] arr.forEach(num > {prefix.push(prefix.at(-1) num); })如果想要计算某个区间 i 到 j 这个子数组的和时&#xff0c;可以根据 prefix[j1] - prefix[i] 获得。 例题1&#xff1a;303.区域和检索 - 数组不可变 给定一个整数数组 num…...

形态学算法应用之连通分量提取的python实现——图像处理

原理 连通分量提取是图像处理和计算机视觉中的一项基本任务&#xff0c;旨在识别图像中所有连通区域&#xff0c;并将它们作为独立对象处理。在二值图像中&#xff0c;连通分量通常指的是所有连接在一起的前景像素集合。这里的“连接”可以根据四连通或八连通的邻接关系来定义…...

Kafka系列之:Kafka集群同时设置基于时间和日志大小两种方式保存Topic的数据

Kafka系列之:Kafka集群同时设置基于时间和日志大小两种方式保存Topic的数据 一、基于日志大小二、基于时间大小三、参数设置四、设置命令一、基于日志大小 "log.retention.bytes"是Apache Kafka中的一项配置参数,用于指定每个日志段文件的最大大小。当日志段文件的…...

pytest+allure批量执行测试用例

在 Pytest 中,可以使用装饰器 `@pytest.fixture` 来定义用例级别的前置和后置操作。下面是一个示例代码,演示了如何使用 Pytest 的前置和后置操作: ```python import pytest @pytest.fixture(scope="function") def setup_function(): print("Setup fu…...

SpringBoot和SpringMVC

目录 一、springboot项目 &#xff08;1&#xff09;创建springboot项目 &#xff08;2&#xff09;目录介绍 &#xff08;3&#xff09;项目启动 &#xff08;4&#xff09;运行一个程序 &#xff08;5&#xff09;通过其他方式创建和运行springboot项目 二、SpringMVC…...

免费搭建幻兽帕鲁服务器,白嫖阿里云游戏服务器

阿里云幻兽帕鲁服务器免费搭建方案&#xff0c;先在阿里云高校计划「云工开物」活动领取学生专享300元无门槛代金券&#xff0c;幻兽帕鲁专用服务器4核16G配置26元1个月、149元半年&#xff0c;直接使用这个无门槛300元代金券抵扣即可免费搭建幻兽帕鲁服务器。阿里云服务器网al…...

[技术杂谈]如何下载vscode历史版本

网站模板&#xff1a; https://code.visualstudio.com/updates/v1_85 如果你想下载1.84系列可以访问https://code.visualstudio.com/updates/v1_84​​​​​​ 然后看到&#xff1a; 选择对应版本下载即可&#xff0c;我是windows x64系统选择x64即可开始下载...

nginx slice模块的使用和源码分析

文章目录 1. 为什么需要ngx_http_slice_module2. 配置指令3. 加载模块4. 源码分析4.1 指令分析4.2 模块初始化4.3 slice模块的上下文4.2 $slice_range字段值获取4.3 http header过滤处理4.4 http body过滤处理5 测试和验证 1. 为什么需要ngx_http_slice_module 顾名思义&#…...

AI应用开发-python实现redis数据存储

AI应用开发相关目录 本专栏包括AI应用开发相关内容分享&#xff0c;包括不限于AI算法部署实施细节、AI应用后端分析服务相关概念及开发技巧、AI应用后端应用服务相关概念及开发技巧、AI应用前端实现路径及开发技巧 适用于具备一定算法及Python使用基础的人群 AI应用开发流程概…...

2024年Java架构篇之设计模式

2024年Java实战面试题_java 5 年 面试-CSDN博客 1、单例模式...

搭建macOS开发环境-1:准备工作

请记住&#xff1a; 最重要的准备工作永远是&#xff1a;备份数据 !!! 通过图形界面检查 Mac 的 CPU 类型&#xff1a; 在搭载 Apple 芯片的 Mac 电脑上&#xff0c;“关于本机”会显示一个标有“芯片”的项目并跟有相应芯片的名称&#xff1a; 通过命令行检查Mac的CPU类型 …...

【Makefile语法 02】Makefile语法基础

目录 一、Makefile概述 二、Makefile变量 三、Makefile符号 一、Makefile格式 1. 基本格式&#xff1a; targets : prerequisties [tab键]command target&#xff1a;目标文件&#xff0c;可以是 OjectFile&#xff0c;也可以是执行文件&#xff0c;还可以是一个标签&…...