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

矢量拟合(2) - Vector Fitting算法原理

在Sanathanan–Koerner算法中:
H ~ ( s ) = n ( s ) d ( s ) = ∑ n = 0 n ˉ a n s n ∑ n = 0 n ˉ b n s n \widetilde{H}(s)=\frac{n(s)}{d(s)}=\frac{\sum_{n=0}^{\bar{n}}a_ns^n}{\sum_{n=0}^{\bar{n}}b_ns^n} H (s)=d(s)n(s)=n=0nˉbnsnn=0nˉansn
求解数值逼近时的误差项:
( e S K ( i ) ) 2 = 1 k ˉ ∑ k = 1 k ˉ ∣ H k ∑ n = 0 n ˉ b n ( i ) ( j ω k ) n − ∑ n = 0 n ˉ a n ( i ) ( j ω k ) n ∑ n = 0 n ˉ b n ( i − 1 ) ( j ω k ) n ∣ 2 \left(e_{SK}^{(i)}\right)^{2}=\frac{1}{\bar{k}}\sum_{k=1}^{\bar{k}}\left|\frac{H_{k}\sum_{n=0}^{\bar{n}}b_{n}^{(i)}(j\omega_{k})^{n}-\sum_{n=0}^{\bar{n}}a_{n}^{(i)}(j\omega_{k})^{n}}{\sum_{n=0}^{\bar{n}}b_{n}^{(i-1)}(j\omega_{k})^{n}}\right|^{2} (eSK(i))2=kˉ1k=1kˉ n=0nˉbn(i1)(jωk)nHkn=0nˉbn(i)(jωk)nn=0nˉan(i)(jωk)n 2
会包含频率的多次项,求解的最小二乘问题的矩阵将包含 Vandermonde 块,导致恶化的条件,会增加数值的不稳定性,当条件数变大时,计算结果对输入数据的微小变化会变得非常敏感,可能导致数值解不准确甚至不收敛。
为了解决上述的问题,VF算法用部分分式替代之前的传递函数的表达式
H ~ ( s ) = n ( s ) d ( s ) = ∑ n = 0 n ˉ a n s n ∑ n = 0 n ˉ b n s n \widetilde{H}(s)=\frac{n(s)}{d(s)}=\frac{\sum_{n=0}^{\bar{n}}a_ns^n}{\sum_{n=0}^{\bar{n}}b_ns^n} H (s)=d(s)n(s)=n=0nˉbnsnn=0nˉansn
H ~ ( s ) \widetilde{H}(s) H (s)的分子和分母项分别写作:

n ( i ) = c 0 ( i ) + ∑ n = 1 n c n ( i ) s − p n ( 0 ) (1.10) n^{(i)} = c_0^{(i)} + \sum_{n=1}^{n} \frac{c_n^{(i)}}{s - p_n^{(0)}} \tag{1.10} n(i)=c0(i)+n=1nspn(0)cn(i)(1.10)

d ( i ) = 1 + ∑ n = 1 n d n ( i ) s − p n ( 0 ) (1.11) d^{(i)} = 1 + \sum_{n=1}^{n} \frac{d_n^{(i)}}{s - p_n^{(0)}} \tag{1.11} d(i)=1+n=1nspn(0)dn(i)(1.11)

其中:

  • n ( i ) n^{(i)} n(i) d ( i ) d^{(i)} d(i) 分别表示分子和分母多项式。
  • c 0 ( i ) c_0^{(i)} c0(i) c n ( i ) c_n^{(i)} cn(i)是分子多项式的系数。
  • d n ( i ) d_n^{(i)} dn(i)是分母多项式的系数。
  • p n ( 0 ) p_n^{(0)} pn(0)表示初始极点,与变量 s s s一起出现在分式中。

这里提到的初始极点 p n ( 0 ) ∈ C p^{(0)}_n \in \mathbb{C} pn(0)C是一组复数,将在后续讨论它们的选取方式。可以看到,在公式 (1.11) 中,常数项已标准化为 1,这是不失一般性的处理。与 Sanathanan-Koerner 迭代中使用的幂函数基 s n s^n sn相比,分式 1 s − p n ( 0 ) \frac{1}{s - p^{(0)}_n} spn(0)1的变化在 s s s增加时更加受控。如果选择合适的极点 p n ( 0 ) p^{(0)}_n pn(0),则分式形式在频率上的变化更加平缓。此特性可改善条件数,特别是在极点 p n ( 0 ) p^{(0)}_n pn(0)彼此不同且分布较开时,效果更显著。
将(1.10)和(1.11)代入之前的误差表达式(1.9):

( e S K ( i ) ) 2 = 1 k ∑ k = 1 k ∣ H k ∑ n = 0 n b n ( i ) ( j ω k ) n − ∑ n = 0 n a n ( i ) ( j ω k ) n ( ∑ n = 0 n b n ( i − 1 ) ( j ω k ) n ) 2 ∣ 2 (e_{SK}^{(i)})^2 = \frac{1}{k} \sum_{k=1}^{k} \left| \frac{H_k \sum_{n=0}^{n} b_n^{(i)} (\text{j}\omega_k)^n - \sum_{n=0}^{n} a_n^{(i)} (\text{j}\omega_k)^n} { \left( \sum_{n=0}^{n} b_n^{(i-1)} (\text{j}\omega_k)^n \right)^2}\right|^2 (eSK(i))2=k1k=1k (n=0nbn(i1)(jωk)n)2Hkn=0nbn(i)(jωk)nn=0nan(i)(jωk)n 2
可以得到改写以后的误差表达式为:

e S K ( i ) = 1 k ∑ k = 1 k ∣ H k d ( i ) ( j ω k ) d ( i − 1 ) ( j ω k ) − n ( i ) ( j ω k ) d ( i − 1 ) ( j ω k ) ∣ 2 (1.12) e_{SK}^{(i)} = \frac{1}{k} \sum_{k=1}^{k} \left| \frac{H_k d^{(i)}(j \omega_k)}{d^{(i-1)}(j \omega_k)} - \frac{n^{(i)}(j \omega_k)}{d^{(i-1)}(j \omega_k)} \right|^2 \tag {1.12} eSK(i)=k1k=1k d(i1)(jωk)Hkd(i)(jωk)d(i1)(jωk)n(i)(jωk) 2(1.12)

对该公式的分解说明如下:

  • e S K ( i ) e_{SK}^{(i)} eSK(i) 表示第 i i i 次迭代的误差项。
  • H k H_k Hk n ( i ) ( j ω k ) n^{(i)}(j \omega_k) n(i)(jωk) 可能表示在离散频率 j ω k j \omega_k jωk 下的频率相关项或传递函数。
  • d ( i ) ( j ω k ) d^{(i)}(j \omega_k) d(i)(jωk) d ( i − 1 ) ( j ω k ) d^{(i-1)}(j \omega_k) d(i1)(jωk) 表示分母中的项。

引入了两个新量,令:

  1. w ( i ) ( s ) w^{(i)}(s) w(i)(s)
    w ( i ) ( s ) = d ( i ) ( s ) d ( i − 1 ) ( s ) (1.13) w^{(i)}(s) = \frac{d^{(i)}(s)}{d^{(i-1)}(s)} \tag{1.13} w(i)(s)=d(i1)(s)d(i)(s)(1.13)

  2. H ~ ( i ) ( s ) \tilde{H}^{(i)}(s) H~(i)(s)
    H ~ ( i ) ( s ) = n ( i ) ( s ) d ( i − 1 ) ( s ) (1.14) \tilde{H}^{(i)}(s) = \frac{n^{(i)}(s)}{d^{(i-1)}(s)} \tag{1.14} H~(i)(s)=d(i1)(s)n(i)(s)(1.14)
    将其代入1.12得到:
    ( e S K ( i ) ) 2 = 1 k ∑ k = 1 k ∣ H k w ( i ) ( j ω k ) − H ~ ( i ) ( j ω k ) ∣ 2 . (e_{SK}^{(i)})^2 = \frac{1}{k} \sum_{k=1}^{k} \left| H_k w^{(i)}(j \omega_k) - \tilde{H}^{(i)}(j \omega_k) \right|^2. (eSK(i))2=k1k=1k Hkw(i)(jωk)H~(i)(jωk) 2.

函数 H ~ ( i ) ( s ) \tilde{H}^{(i)}(s) H~(i)(s) 可以解释为通过最小化公式 (1.12) 在第 i i i 次迭代时估计的模型传递函数。具体来说,这个传递函数由当前迭代的分子 n ( i ) ( s ) n^{(i)}(s) n(i)(s)(待确定)和前一迭代的分母 d ( i − 1 ) ( s ) d^{(i-1)}(s) d(i1)(s)(已知)构成。由于误差函数的线性化,此近似方法有效地避免了分母中未知量的存在。

函数 w ( i ) ( s ) w^{(i)}(s) w(i)(s) 可以理解为一个频率相关的权重,用来乘以给定的样本 H k H_k Hk

加权函数 w ( i ) ( s ) w^{(i)}(s) w(i)(s)有两个主要目的:

  • 提供分母 d ( i ) ( s ) d^{(i)}(s) d(i)(s)的新估计,
  • 补偿通过将 H ~ ( i ) ( s ) \tilde{H}^{(i)}(s) H~(i)(s)的分母固定为前一次迭代值而引入的近似误差。实际上,权重 w ( i ) ( s ) w^{(i)}(s) w(i)(s)依赖于新分母估计 d ( i ) ( s ) d^{(i)}(s) d(i)(s)与前一次估计 d ( i − 1 ) ( s ) d^{(i-1)}(s) d(i1)(s)的比值。

d ( i ) d^{(i)} d(i) d ( i − 1 ) d^{(i-1)} d(i1)的表达式代入权重 w ( i ) ( s ) w^{(i)}(s) w(i)(s)的表达式得到:
w ( i ) ( s ) = 1 + ∑ n = 1 N d n ( i ) s − p n ( 0 ) 1 + ∑ n = 1 N d n ( i − 1 ) s − p n ( 0 ) (1.15a) w^{(i)}(s) = \frac{1 + \sum_{n=1}^{N} \frac{d^{(i)}_n}{s - p^{(0)}_n}}{1 + \sum_{n=1}^{N} \frac{d^{(i-1)}_n}{s - p^{(0)}_n}} \tag{1.15a} w(i)(s)=1+n=1Nspn(0)dn(i1)1+n=1Nspn(0)dn(i)(1.15a)

  1. 分子部分:
    1 + ∑ n = 1 N d n ( i ) s − p n ( 0 ) 1 + \sum_{n=1}^{N} \frac{d^{(i)}_n}{s - p^{(0)}_n} 1+n=1Nspn(0)dn(i)
    可以看作一个分式展开的形式,对应于某个分母为 ∏ n = 1 N ( s − p n ( 0 ) ) \prod_{n=1}^{N} (s - p^{(0)}_n) n=1N(spn(0)) 的多项式。

  2. 分母部分:
    1 + ∑ n = 1 N d n ( i − 1 ) s − p n ( 0 ) 1 + \sum_{n=1}^{N} \frac{d^{(i-1)}_n}{s - p^{(0)}_n} 1+n=1Nspn(0)dn(i1)
    同样可以看作另一个分式展开形式,对应于某个分母为 ∏ n = 1 N ( s − p n ( 0 ) ) \prod_{n=1}^{N} (s - p^{(0)}_n) n=1N(spn(0)) 的多项式。

我们需要将分式的加法和乘积展开为分母和分子的一般形式,从而得到目标式的等价关系。

  1. 分子部分的通分:
    1 + ∑ n = 1 N d n ( i ) s − p n ( 0 ) 1 + \sum_{n=1}^{N} \frac{d^{(i)}_n}{s - p^{(0)}_n} 1+n=1Nspn(0)dn(i)
    通分后分母为 ∏ n = 1 N ( s − p n ( 0 ) ) \prod_{n=1}^{N} (s - p^{(0)}_n) n=1N(spn(0)),因此分子为:
    ∏ n = 1 N ( s − p n ( 0 ) ) + ∑ n = 1 N d n ( i ) ∏ m ≠ n ( s − p m ( 0 ) ) \prod_{n=1}^{N} (s - p^{(0)}_n) + \sum_{n=1}^{N} d^{(i)}_n \prod_{m \neq n} (s - p^{(0)}_m) n=1N(spn(0))+n=1Ndn(i)m=n(spm(0))

  2. 分母部分的通分:
    1 + ∑ n = 1 N d n ( i − 1 ) s − p n ( 0 ) 1 + \sum_{n=1}^{N} \frac{d^{(i-1)}_n}{s - p^{(0)}_n} 1+n=1Nspn(0)dn(i1)
    通分后分母同样为 ∏ n = 1 N ( s − p n ( 0 ) ) \prod_{n=1}^{N} (s - p^{(0)}_n) n=1N(spn(0)),因此分子为:
    ∏ n = 1 N ( s − p n ( 0 ) ) + ∑ n = 1 N d n ( i − 1 ) ∏ m ≠ n ( s − p m ( 0 ) ) \prod_{n=1}^{N} (s - p^{(0)}_n) + \sum_{n=1}^{N} d^{(i-1)}_n \prod_{m \neq n} (s - p^{(0)}_m) n=1N(spn(0))+n=1Ndn(i1)m=n(spm(0))

  3. 将上面两式带入原始表达式:
    w ( i ) ( s ) = ∏ n = 1 N ( s − p n ( 0 ) ) + ∑ n = 1 N d n ( i ) ∏ m ≠ n ( s − p m ( 0 ) ) ∏ n = 1 N ( s − p n ( 0 ) ) + ∑ n = 1 N d n ( i − 1 ) ∏ m ≠ n ( s − p m ( 0 ) ) w^{(i)}(s) = \frac{\prod_{n=1}^{N} (s - p^{(0)}_n) + \sum_{n=1}^{N} d^{(i)}_n \prod_{m \neq n} (s - p^{(0)}_m)}{\prod_{n=1}^{N} (s - p^{(0)}_n) + \sum_{n=1}^{N} d^{(i-1)}_n \prod_{m \neq n} (s - p^{(0)}_m)} w(i)(s)=n=1N(spn(0))+n=1Ndn(i1)m=n(spm(0))n=1N(spn(0))+n=1Ndn(i)m=n(spm(0))

  4. 分子的多项式形式可以表示为新的形式:
    ∏ n = 1 N ( s − p n ( i ) ) \prod_{n=1}^{N} (s - p^{(i)}_n) n=1N(spn(i))
    其中 p n ( i ) p^{(i)}_n pn(i) 表示多项式的根,由迭代过程中 d n ( i ) d^{(i)}_n dn(i) 的值确定。

  5. 分母的多项式形式可以表示为:
    ∏ n = 1 N ( s − p n ( i − 1 ) ) \prod_{n=1}^{N} (s - p^{(i-1)}_n) n=1N(spn(i1))
    其中 p n ( i − 1 ) p^{(i-1)}_n pn(i1) 表示多项式的根,由迭代过程中 d n ( i − 1 ) d^{(i-1)}_n dn(i1) 的值确定。

因此,可以直接将分子和分母重新组合为目标形式:
w ( i ) ( s ) = ∏ n = 1 N ( s − p n ( i ) ) ∏ n = 1 N ( s − p n ( 0 ) ) ∏ n = 1 N ( s − p n ( i − 1 ) ) ∏ n = 1 N ( s − p n ( 0 ) ) w^{(i)}(s) = \frac{\frac{\prod_{n=1}^{N} (s - p^{(i)}_n)}{\prod_{n=1}^{N} (s - p^{(0)}_n)}}{\frac{\prod_{n=1}^{N} (s - p^{(i-1)}_n)}{\prod_{n=1}^{N} (s - p^{(0)}_n)}} w(i)(s)=n=1N(spn(0))n=1N(spn(i1))n=1N(spn(0))n=1N(spn(i))

分子分母的公共项 ∏ n = 1 N ( s − p n ( 0 ) ) \prod_{n=1}^{N} (s - p^{(0)}_n) n=1N(spn(0)) 相互抵消,最终得到:
w ( i ) ( s ) = ∏ n = 1 N ( s − p n ( i ) ) ∏ n = 1 N ( s − p n ( i − 1 ) ) (1.15b) w^{(i)}(s) = \frac{\prod_{n=1}^{N} (s - p^{(i)}_n)}{\prod_{n=1}^{N} (s - p^{(i-1)}_n)} \tag{1.15b} w(i)(s)=n=1N(spn(i1))n=1N(spn(i))(1.15b)

这个表达式也可以写作极点和残差的形式:
w ( i ) ( s ) = 1 + ∑ n = 1 N w n ( i ) 1 s − p n ( i − 1 ) (1.15c) w^{(i)}(s) =1 + \sum_{n=1}^{N} w^{(i)}_n \frac{1}{s - p^{(i-1)}_n} \tag{1.15c} w(i)(s)=1+n=1Nwn(i)spn(i1)1(1.15c)

在上述表达式中, w ( i ) ( s ) w^{(i)}(s) w(i)(s) w n ( i ) w^{(i)}_n wn(i) 表示不同的量,具体区别如下:

  1. w ( i ) ( s ) w^{(i)}(s) w(i)(s)
    w ( i ) ( s ) w^{(i)}(s) w(i)(s) 是一个关于变量 s s s 的函数。它表示在第 i i i 次迭代时的整个权重函数,用于在模型拟合中调整传递函数的误差。 w ( i ) ( s ) w^{(i)}(s) w(i)(s) 是一个复变量的函数,其形式为:

    w ( i ) ( s ) = 1 + ∑ n = 1 N w n ( i ) 1 s − p n ( i − 1 ) w^{(i)}(s) = 1 + \sum_{n=1}^{N} w^{(i)}_n \frac{1}{s - p^{(i-1)}_n} w(i)(s)=1+n=1Nwn(i)spn(i1)1

    这个表达式表明 w ( i ) ( s ) w^{(i)}(s) w(i)(s) 是通过每个 w n ( i ) w^{(i)}_n wn(i) 和分量 1 s − p n ( i − 1 ) \frac{1}{s - p^{(i-1)}_n} spn(i1)1 的线性组合构成的。

  2. w n ( i ) w^{(i)}_n wn(i)
    w n ( i ) w^{(i)}_n wn(i) w ( i ) ( s ) w^{(i)}(s) w(i)(s) 中的单个权重系数,不依赖于 s s s。它表示每个分量 1 s − p n ( i − 1 ) \frac{1}{s - p^{(i-1)}_n} spn(i1)1 的权重。换句话说, w n ( i ) w^{(i)}_n wn(i) 控制了第 i i i 次迭代中第 n n n 个极点 p n ( i − 1 ) p^{(i-1)}_n pn(i1) 对权重函数 w ( i ) ( s ) w^{(i)}(s) w(i)(s) 的影响大小。

总结来说, w ( i ) ( s ) w^{(i)}(s) w(i)(s) 是完整的权重函数,而 w n ( i ) w^{(i)}_n wn(i) 是该权重函数中各个项的权重系数。

在公式 (1.15b) 中, p n ( i ) p_n^{(i)} pn(i) d ( i ) ( s ) d^{(i)}(s) d(i)(s)的零点,因此也是 H ~ ( i + 1 ) ( s ) \tilde{H}^{(i+1)}(s) H~(i+1)(s)的极点。我们将 w ( i ) ( s ) w^{(i)}(s) w(i)(s) 表达为一组新的极点 p n ( i − 1 ) p_n^{(i-1)} pn(i1) 的形式,这些极点会在每次迭代中发生变化,如 (1.15c) 的表达式所示。

H ~ ( i ) ( s ) \tilde{H}^{(i)}(s) H~(i)(s) 也可以进行相同的操作,最终得到:
H ~ ( i ) ( s ) = c 0 ( i ) + ∑ n = 1 n ˉ c n ( i ) s − p n ( 0 ) 1 + ∑ n = 1 n ˉ d n ( i − 1 ) s − p n ( 0 ) = r 0 ( i ) + ∑ n = 1 n ˉ r n ( i ) s − p n ( i − 1 ) . (1.16) \tilde{H}^{(i)}(s) = \frac{c_0^{(i)} + \sum_{n=1}^{\bar{n}} \frac{c_n^{(i)}}{s - p_n^{(0)}}}{1 + \sum_{n=1}^{\bar{n}} \frac{d_n^{(i-1)}}{s - p_n^{(0)}}} = r_0^{(i)} + \sum_{n=1}^{\bar{n}} \frac{r_n^{(i)}}{s - p_n^{(i-1)}}. \tag{1.16} H~(i)(s)=1+n=1nˉspn(0)dn(i1)c0(i)+n=1nˉspn(0)cn(i)=r0(i)+n=1nˉspn(i1)rn(i).(1.16)

将新的权重函数的表达式和传递函数的表达式代入,可以得到优化后的误差表达式误差函数 ( e S K ( i ) ) 2 (e_{SK}^{(i)})^2 (eSK(i))2 表示为:

( e S K ( i ) ) 2 = 1 k ∑ k = 1 K ∣ H k ( 1 + ∑ n = 1 n w n ( i ) j ω k − p n ( i − 1 ) ) − ( r 0 ( i ) + ∑ n = 1 n r n ( i ) j ω k − p n ( i − 1 ) ) ∣ 2 ( 1.17 ) (e_{SK}^{(i)})^2 = \frac{1}{k} \sum_{k=1}^{K} \left| H_k \left( 1 + \sum_{n=1}^{n} \frac{w_n^{(i)}}{\text{j} \omega_k - p_n^{(i-1)}} \right) - \left( r_0^{(i)} + \sum_{n=1}^{n} \frac{r_n^{(i)}}{\text{j} \omega_k - p_n^{(i-1)}} \right) \right|^2 {(1.17)} (eSK(i))2=k1k=1K Hk(1+n=1njωkpn(i1)wn(i))(r0(i)+n=1njωkpn(i1)rn(i)) 2(1.17)

这是矢量拟合(VF)中实际使用的误差函数,用于将模型拟合到给定的样本数据上。公式 (1.17) 和 (1.9) 的主要区别在于线性化误差如何通过迭代加权逐步收敛到公式 (1.6)。

在公式 (1.12) 中,权重 1 d ( i − 1 ) ( j ω k ) \frac{1}{d^{(i-1)}(j\omega_k)} d(i1)(jωk)1 被显式地应用,但这种方法会降低数值条件的稳定性。

而在公式 (1.17) 中,相同的权重通过在每次迭代中重新定位极点 p n ( i − 1 ) p_n^{(i-1)} pn(i1) 的方式被隐式地应用。

一旦公式 (1.17) 被最小化后,可以通过 d ( i ) ( s ) d^{(i)}(s) d(i)(s) 的零点来找到下一次迭代的更新极点 p n ( i ) p_n^{(i)} pn(i),正如从公式 (1.15c) 表达式中可以看出的那样。可以证明,这些零点可以通过一个矩阵的特征值来计算:

{ p n ( i ) } = eig ( A ( i − 1 ) − b w ( c w ( i ) ) T ) , (1.18) \{p_n^{(i)}\} = \text{eig}(A^{(i-1)} - b_w (c_w^{(i)})^T), \tag{1.18} {pn(i)}=eig(A(i1)bw(cw(i))T),(1.18)
其中:

  • A ( i − 1 ) = diag { p 1 ( i − 1 ) , … , p n ( i − 1 ) } A^{(i-1)} = \text{diag}\{p_1^{(i-1)}, \dots, p_n^{(i-1)}\} A(i1)=diag{p1(i1),,pn(i1)}是一个对角矩阵,由前一次迭代的极点 p n ( i − 1 ) p_n^{(i-1)} pn(i1) 构成;
  • b w b_w bw 是一个 n × 1 n \times 1 n×1 的全 1 向量;
  • ( c w ( i ) ) T = [ w 1 ( i ) , … , w n ( i ) ] (c_w^{(i)})^T = [w_1^{(i)}, \dots, w_n^{(i)}] (cw(i))T=[w1(i),,wn(i)] 是权重系数的转置向量。

在收敛时, p n ( i − 1 ) → p n ( i ) p_n^{(i-1)} \to p_n^{(i)} pn(i1)pn(i),它们成为所得到模型 H ( i ) ( s ) H^{(i)}(s) H(i)(s)的极点。当这种情况发生时,根据公式 (1.15c) 表达式,可以看到 w ( i ) → 1 w^{(i)} \to 1 w(i)1。同时,线性化误差 (1.12) 逐渐收敛到 (1.6),达到了目标。


http://www.kler.cn/a/401298.html

相关文章:

  • NavVis VLX3的精度怎么去进行验证?【上海沪敖3D】
  • 【第七节】在RadAsm中使用OllyDBG调试器
  • 5G与4G互通的桥梁:N26接口
  • EEG+EMG学习系列 (1) :一个基于小波的自动睡眠评分模型
  • 找不到vcruntime140.dll怎么办,彻底解决vcruntime140.dll丢失的5种方法
  • 极速入门数模电路
  • ROM修改进阶教程------安卓14去除修改系统应用后导致的卡logo验证步骤 适用安卓13 14 安卓15可借鉴参考
  • 视频号直播自动回复功能,浏览器自动化插件vx llike620
  • 使用FFmpeg实现视频与GIF的画中画效果
  • golang开发一个海盗王的登录更新器
  • 大模型投喂私有化的数据
  • 【JavaSE】【多线程】阻塞队列
  • Go语言中的错误嵌套
  • Elasticsearch面试内容整理-搜索与查询
  • 大数据-225 离线数仓 - 目前需求分析 指标口径 日志数据采集 taildir source HDFS Sink Agent Flume 优化配置
  • 【GNU】gcc -O编译选项 -Og -O0 -O1 -O2 -O3 -Os
  • 字符串地址解析 省市区
  • 20241119
  • 【Mac】未能完成该操作 Unable to locate a Java Runtime
  • HBase 基础操作
  • P1014 [NOIP1999 普及组] Cantor 表
  • 以Java为例,实现一个简单的命令行图书管理系统,包括添加图书、删除图书、查找图书等功能。
  • 【MySQL】系统学习数据库查询:深度学习查询操作全面详解
  • 二叉树(2)
  • Springboot项目搭建(1)-用户登录与注册
  • JavaScript 高级—求数组的最大值与最小值