<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Alkaid114</title><description>My personal blog</description><link>https://alkaid114.github.io/</link><language>zh_CN</language><item><title>[形式语言与自动机] 图灵机</title><link>https://alkaid114.github.io/posts/automata/tm/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/automata/tm/</guid><pubDate>Tue, 07 Jul 2026 19:22:00 GMT</pubDate><content:encoded>&lt;h2&gt;图灵机&lt;/h2&gt;
&lt;p&gt;定义是一个七元组：&lt;/p&gt;
&lt;p&gt;$$
M = (Q, \Sigma, \Gamma, \delta, q_0, B, F)
$$&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$Q$ 是一个有限的状态集合&lt;/li&gt;
&lt;li&gt;$\Sigma$ 是一个有限的输入符号集合&lt;/li&gt;
&lt;li&gt;$\Gamma$ 是一个有限的带符号集合，且 $\Sigma \subseteq \Gamma$&lt;/li&gt;
&lt;li&gt;$\delta$ 是一个状态转移函数，定义为 $\delta: Q \times \Gamma \to Q \times \Gamma \times {L, R}$&lt;/li&gt;
&lt;li&gt;$q_0 \in Q$ 是初始状态&lt;/li&gt;
&lt;li&gt;$B \in \Gamma$ 是空白符号，且 $B \notin \Sigma$&lt;/li&gt;
&lt;li&gt;$F \subseteq Q$ 是接受状态集合&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;图灵机有一条无穷长的纸带，上面一个格子能存一个字符，可以当做内存来用了&lt;/p&gt;
&lt;h2&gt;绘制图灵机&lt;/h2&gt;
&lt;p&gt;使用形如$a/b \leftarrow$来表示一次状态转移，如果读头当前所在的格子为$a$则读入，并写入符号$b$，然后使读头向左移动一格&lt;/p&gt;
&lt;h2&gt;图灵机的三种运行结果&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;接受并停机：到达$q_{f}$/$q_{accept}$/Acc，则判断输入字符串被接受，图灵机停机&lt;/li&gt;
&lt;li&gt;拒绝并停机：到达$q_{r}$/$q_{reject}$/Rej，则判断输入字符串被拒绝，图灵机停机&lt;/li&gt;
&lt;li&gt;循环：永远运行，不到达任何停机状态，表示不接受输入字符串&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;技巧&lt;/h2&gt;
&lt;p&gt;同样可用自定义符号表示结构化信息&lt;/p&gt;
&lt;h2&gt;示例：解决$a^n b^n c^n$问题&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;题里会告诉读头的初始位置，此题假设读头初始位置在最左边的第一个字符上&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol&gt;
&lt;li&gt;几种情况：
&lt;ul&gt;
&lt;li&gt;此处为$a$，替换为$X$，并向右移动，进入步骤2&lt;/li&gt;
&lt;li&gt;此处为$X$，说明所有的$a$都已经被替换，进入步骤8&lt;/li&gt;
&lt;li&gt;此处为$b$或$c$，判断输入字符串被拒绝，图灵机停机&lt;/li&gt;
&lt;li&gt;此处为字符串边界或空白符$B$，判断输入字符串被接受，图灵机停机&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;看到$a$或$Y$就继续向右&lt;/li&gt;
&lt;li&gt;直到：
&lt;ul&gt;
&lt;li&gt;遇到一个$b$，将其替换为$Y$，并向右移动，进入步骤4&lt;/li&gt;
&lt;li&gt;遇到一个$c$，判断输入字符串被拒绝，图灵机停机&lt;/li&gt;
&lt;li&gt;遇到字符串边界或空白符$B$，判断输入字符串被拒绝，图灵机停机&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;看到$b$或$Z$就继续向右&lt;/li&gt;
&lt;li&gt;直到：
&lt;ul&gt;
&lt;li&gt;遇到一个$c$，将其替换为$Z$，并向左移动，进入步骤6&lt;/li&gt;
&lt;li&gt;遇到一个$a$，判断输入字符串被拒绝，图灵机停机&lt;/li&gt;
&lt;li&gt;遇到字符串边界或空白符$B$，判断输入字符串被拒绝，图灵机停机&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;看到$a,b,Y,Z$就继续向左&lt;/li&gt;
&lt;li&gt;直到：
&lt;ul&gt;
&lt;li&gt;遇到一个$X$，不修改，向右移动，进入步骤1&lt;/li&gt;
&lt;li&gt;遇到字符串边界或空白符$B$，说明所有的$a$都已经被替换，进入步骤8&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;一直向右移动，直到：
&lt;ul&gt;
&lt;li&gt;若遇不到任何$c$或$b$而是到达字符串边界或空白符$B$，则判断输入字符串被接受，图灵机停机&lt;/li&gt;
&lt;li&gt;若遇到$b$或$c$，则判断输入字符串被拒绝，图灵机停机&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
</content:encoded></item><item><title>[形式语言与自动机] 下推自动机</title><link>https://alkaid114.github.io/posts/automata/pda/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/automata/pda/</guid><pubDate>Tue, 07 Jul 2026 18:36:00 GMT</pubDate><content:encoded>&lt;h2&gt;PDA&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;有栈用了&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;定义是一个七元组：&lt;/p&gt;
&lt;p&gt;$$
M = (Q, \Sigma, \Gamma, \delta, q_0, Z_0, F)
$$&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$Q$ 是一个有限的状态集合&lt;/li&gt;
&lt;li&gt;$\Sigma$ 是一个有限的输入符号集合&lt;/li&gt;
&lt;li&gt;$\Gamma$ 是一个有限的栈符号集合&lt;/li&gt;
&lt;li&gt;$\delta$ 是一个状态转移函数，定义为 $\delta: Q \times (\Sigma \cup {\epsilon}) \times \Gamma \to P(Q \times \Gamma^*)$，其中 $P$ 表示幂集&lt;/li&gt;
&lt;li&gt;$q_0 \in Q$ 是初始状态&lt;/li&gt;
&lt;li&gt;$Z_0 \in \Gamma$ 是初始栈符号&lt;/li&gt;
&lt;li&gt;$F \subseteq Q$ 是接受状态集合&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;绘制PDA&lt;/h2&gt;
&lt;p&gt;状态转移条件形如$a, b / ab$，表示消费输入符号$a$，且当前栈顶符号为$b$时，然后将$a$压入栈中&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$a, b / \epsilon$，表示消费输入符号$a$，且当前栈顶符号为$b$时，然后将栈顶符号$b$弹出&lt;/li&gt;
&lt;li&gt;$a, b / b$，表示消费输入符号$a$，且当前栈顶符号为$b$时，不进行任何操作，保持栈顶符号$b$不变&lt;/li&gt;
&lt;li&gt;$\epsilon, b / b$，表示不消费任何符号，且当前栈顶符号为$b$时，不进行任何操作，保持栈顶符号$b$不变&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;PDA的接受方式&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;终态接受：当输入字符串被完全消费，且PDA处于一个接受状态&lt;/li&gt;
&lt;li&gt;空栈接受：当输入字符串被完全消费，且PDA的栈为空(栈底$Z_0$也被弹出)&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;PDA与DPDA&lt;/h2&gt;
&lt;p&gt;DPDA是确定性下推自动机，PDA是非确定性下推自动机&lt;/p&gt;
&lt;p&gt;相比与PDA，DPDA有以下限制：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;对于同一个输入符号，从同一个状态和栈顶符号出发，最多只能有一个转移&lt;/li&gt;
&lt;li&gt;如果存在$\epsilon$转移，则不能有任何其他转移(读还是不读输入符号)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;DPDA推荐使用终态接受方式，DPDA中终态接受强于空栈接受&lt;/p&gt;
&lt;h2&gt;一些技巧&lt;/h2&gt;
&lt;p&gt;由于PDA只能看见栈顶和当前输入，看不到栈中更下方的符号，因此在设计PDA时，可以自定义栈符号来存储一些结构化信息，例如可以将字母表${a,b}$产生的组合$abb$表示为符号$X_{abb}$，这样就可以在一次转移中看到更多的信息，这个方法还可以用来计数，比如用$A_{n}$表示刚刚已经压入了$n$个$a$，而且还可以用来实现条件分支&lt;/p&gt;
</content:encoded></item><item><title>[形式语言与自动机] 基础知识</title><link>https://alkaid114.github.io/posts/automata/basic/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/automata/basic/</guid><pubDate>Tue, 07 Jul 2026 18:08:00 GMT</pubDate><content:encoded>&lt;h2&gt;字符串&lt;/h2&gt;
&lt;p&gt;字符串是由有限个符号组成的有限序列。符号来自一个有限的集合，称为字母表（alphabet），通常用希腊字母 $\Sigma$ 表示。&lt;/p&gt;
&lt;p&gt;字符串的长度可以是任意非负整数，空串用 $\epsilon$ 表示，长度为零。字符串的长度记作 $|w|$，其中 $w$ 是字符串。&lt;/p&gt;
&lt;p&gt;字符串不可以无穷长&lt;/p&gt;
&lt;h2&gt;闭包&lt;/h2&gt;
&lt;h3&gt;克林闭包&lt;/h3&gt;
&lt;p&gt;$$
\Sigma^\ast = { \epsilon } \cup \Sigma \cup \Sigma^2 \cup \Sigma^3 \cup ... = \bigcup_{i=0}^{\infty} \Sigma^i
$$&lt;/p&gt;
&lt;p&gt;注意以下两者的克林闭包并&lt;strong&gt;非无穷集合&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$\varnothing^\ast = {\epsilon}$&lt;/li&gt;
&lt;li&gt;${\epsilon}^\ast = {\epsilon}$&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;$\varnothing$代表没有字符串，${\epsilon}$代表只有空串的集合，空串是一个长度为零的字符串，需要区分&lt;/p&gt;
&lt;h3&gt;正闭包&lt;/h3&gt;
&lt;p&gt;$$
\Sigma^+ = \Sigma \cup \Sigma^2 \cup \Sigma^3 \cup ... = \bigcup_{i=1}^{\infty} \Sigma^i
$$&lt;/p&gt;
&lt;p&gt;注意不包含空串了&lt;/p&gt;
</content:encoded></item><item><title>[形式语言与自动机] 泵引理</title><link>https://alkaid114.github.io/posts/automata/pump/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/automata/pump/</guid><pubDate>Tue, 07 Jul 2026 16:20:00 GMT</pubDate><content:encoded>&lt;h2&gt;泵引理&lt;/h2&gt;
&lt;p&gt;用于证明一个语言不是正则语言&lt;/p&gt;
&lt;p&gt;泵引理指出：对于任何正则语言$L$，存在一个整数$p$（称为泵长度），使得对于任何长度大于或等于$p$的字符串$s \in L$，都可以将$s$分解为三个部分$s = xyz$，满足以下条件：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$|xy| \leq p$，即前两个部分的长度之和不超过$p$&lt;/li&gt;
&lt;li&gt;$|y| &amp;gt; 0$，即中间部分$y$的长度大于0&lt;/li&gt;
&lt;li&gt;对于所有的非负整数$i$，字符串$xy^iz \in L$，即重复中间部分$y$任意次数后，仍然属于语言$L$&lt;/li&gt;
&lt;li&gt;$|s| \ge p$，即字符串$s$的长度大于或等于泵长度$p$&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;所以利用上述规则，当重复中间部分任意次数后，只要有一个结果不属于语言$L$，就可以证明该语言不是正则语言&lt;/p&gt;
&lt;h2&gt;例子&lt;/h2&gt;
&lt;p&gt;证明$L = {0^n1^n | n \geq 0}$不是正则语言&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;假设$L$是正则语言，则存在泵长度$p$&lt;/li&gt;
&lt;li&gt;设输入字符串$s$, $|s| \geq p$，设$s = 0^p1^p$，$|s| = 2p$ 确实大于等于$p$&lt;/li&gt;
&lt;li&gt;根据泵引理，$s$可以分解为$s = xyz$，满足$|xy| \leq p$且$|y| &amp;gt; 0$。由于$|xy| \leq p$，所以$x$和$y$只能包含0，因此可以设$x = 0^k, y = 0^m$，则$|xy| = k + m \leq p, |y| = m &amp;gt; 0$，所以$z = 0^{p-k-m}1^p$&lt;/li&gt;
&lt;li&gt;根据泵引理，$xy^iz \in L$对于所有的非负整数$i$都应成立。当$i = 0$时，$xy^0z = xz = 0^{p-m}1^p$，其中$m &amp;gt; 0$，所以$p-m &amp;lt; p$，因此$xy^0z \notin L$&lt;/li&gt;
&lt;li&gt;不满足泵引理的条件，故$L$不是正则语言&lt;/li&gt;
&lt;/ol&gt;
</content:encoded></item><item><title>[模式识别与机器学习] 深度序列模型</title><link>https://alkaid114.github.io/posts/ml/deep_sequence/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/ml/deep_sequence/</guid><pubDate>Sun, 28 Jun 2026 12:42:00 GMT</pubDate><content:encoded>&lt;p&gt;用于处理语言、语音、视频等序列数据的模型&lt;/p&gt;
&lt;h2&gt;古典方法：隐马尔可夫模型(HMM)&lt;/h2&gt;
&lt;p&gt;有一串&lt;strong&gt;看不见的状态&lt;/strong&gt;在随时间变化（比如今天是晴天还是雨天），每个状态会&lt;strong&gt;产生一个可观测的结果&lt;/strong&gt;（比如地上是干的还是湿的）。HMM就是用来描述这种&quot;隐藏状态 → 可见观测&quot;的序列模型。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;常见使用场景：语音识别（音素是隐藏的，音频是观测的）、词性标注（词性是隐藏的，词语是观测的）&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;三个核心参数&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;$\pi$：初始状态概率，第一天各状态出现的概率&lt;/li&gt;
&lt;li&gt;$A$：状态转移矩阵，$A_{ij}$ = 从状态$i$跳到状态$j$的概率&lt;/li&gt;
&lt;li&gt;$B$：发射矩阵，$B_j(k)$ = 在状态$j$下看到观测$k$的概率&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;三个经典问题&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;评估&lt;/strong&gt;：给定模型参数，某个观测序列出现的概率有多大？→ 前向算法&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;解码&lt;/strong&gt;：给定观测序列，最可能的隐藏状态序列是什么？→ 维特比算法&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;学习&lt;/strong&gt;：只有观测序列，怎么估算模型参数？→ Baum-Welch算法&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;前向算法&lt;/h3&gt;
&lt;p&gt;暴力算概率要枚举所有状态路径（$N^T$种组合），前向算法用动态规划把复杂度降到$O(N^2T)$&lt;/p&gt;
&lt;p&gt;定义 $\alpha_t(i)$ = 到第$t$步为止看到前半段观测且当前状态为$i$的概率：&lt;/p&gt;
&lt;p&gt;$$
\alpha_1(i) = \pi_i  B_i(o_1)
$$&lt;/p&gt;
&lt;p&gt;$$
\alpha_{t+1}(j) = \left[ \sum_{i} \alpha_t(i)  A_{ij} \right]  B_j(o_{t+1})
$$&lt;/p&gt;
&lt;p&gt;最后把所有$\alpha_T(i)$加起来就是整个观测序列的概率&lt;/p&gt;
&lt;h3&gt;维特比算法&lt;/h3&gt;
&lt;p&gt;跟前向算法类似，但把&quot;求和&quot;换成&quot;取最大值&quot;——每一步只记住最有可能的那条路径&lt;/p&gt;
&lt;p&gt;定义 $\delta_t(i)$ = 到第$t$步为止，以状态$i$结尾的最优路径的概率：&lt;/p&gt;
&lt;p&gt;$$
\delta_1(i) = \pi_i  B_i(o_1)
$$&lt;/p&gt;
&lt;p&gt;$$
\delta_{t}(j) = \max_i \left[ \delta_{t-1}(i)  A_{ij} \right]  B_j(o_t)
$$&lt;/p&gt;
&lt;p&gt;结束时取$\max_i \delta_T(i)$，再回溯得到完整路径&lt;/p&gt;
&lt;h3&gt;Baum-Welch算法&lt;/h3&gt;
&lt;p&gt;没有标注数据时的参数估计方法，属于EM算法的一种：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;E步&lt;/strong&gt;：用当前参数算出每个时刻在各个状态的概率（前向-后向算法）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;M步&lt;/strong&gt;：用这些概率重新估算$\pi, A, B$&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;反复迭代直到收敛&lt;/p&gt;
&lt;h2&gt;第一代：RNN循环神经网络&lt;/h2&gt;
&lt;p&gt;每一时刻的输出不仅依赖于当前的输入，还依赖于前一时刻的输出，具有记忆能力&lt;/p&gt;
&lt;h3&gt;更新隐藏状态&lt;/h3&gt;
&lt;p&gt;$$
h_t = \tanh(W_{hh}h_{t-1} + W_{xh}x_t + b_h)
$$&lt;/p&gt;
&lt;h3&gt;当前时刻的输出&lt;/h3&gt;
&lt;p&gt;$$
y_t = \text{Softmax}(W_{hy}h_t + b_y)
$$&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$t$：当前时刻&lt;/li&gt;
&lt;li&gt;$x_t$：当前时刻的输入&lt;/li&gt;
&lt;li&gt;$h_t$：当前时刻的隐藏状态&lt;/li&gt;
&lt;li&gt;$y_t$：当前时刻的输出&lt;/li&gt;
&lt;li&gt;$W_{hh}$: 给前一时刻隐藏状态用的权重矩阵&lt;/li&gt;
&lt;li&gt;$W_{xh}$: 给当前时刻输入用的权重矩阵&lt;/li&gt;
&lt;li&gt;$W_{hy}$: 给当前时刻输出用的权重矩阵&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;RNN在推理时每个时刻用的$W_{hh}$、$W_{xh}$、$W_{hy}$都不变&lt;/p&gt;
&lt;h3&gt;RNN缺点&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;梯度消失/爆炸：当序列过长时，前面时刻的输入对后面时刻的输出影响很小，导致梯度消失；或者梯度过大，导致梯度爆炸&lt;/li&gt;
&lt;li&gt;长期依赖问题：RNN只能记住短期的依赖关系，无法记住长期的依赖关系&lt;/li&gt;
&lt;li&gt;BPTT连乘计算量巨大&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;第二代：LSTM长短期记忆网络&lt;/h2&gt;
&lt;p&gt;在RNN的基础上引入了细胞状态和门控机制，细胞状态贯穿整个链条避免隐式状态的衰减问题&lt;/p&gt;
&lt;h3&gt;门控机制&lt;/h3&gt;
&lt;p&gt;每个门由一个Sigmoid层和一个逐元素乘法组成：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sigmoid输出0: 完全关闭(遗忘)&lt;/li&gt;
&lt;li&gt;Sigmoid输出1: 完全打开(全部保留)&lt;/li&gt;
&lt;li&gt;Sigmoid输出0~1: 部分打开(部分保留)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;遗忘门&lt;/h4&gt;
&lt;p&gt;看上一时刻的隐状态$h_{t-1}$和当前时刻的输入$x_t$，决定保留多少上一时刻的细胞状态$C_{t-1}$&lt;/p&gt;
&lt;p&gt;$$
f_t = \sigma(W_f \cdot [h_{t-1}, x_t] + b_f)
$$&lt;/p&gt;
&lt;h4&gt;输入门&lt;/h4&gt;
&lt;p&gt;决定当前时刻的新信息哪些值得存入长期记忆&lt;/p&gt;
&lt;p&gt;$$
i_t = \sigma(W_i \cdot [h_{t-1}, x_t] + b_i)
$$&lt;/p&gt;
&lt;h4&gt;候选细胞状态&lt;/h4&gt;
&lt;p&gt;用$\tanh$生成一个新的候选细胞状态$\tilde{C}_t$&lt;/p&gt;
&lt;p&gt;$$
\tilde{C}&lt;em&gt;t = \tanh(W_C \cdot [h&lt;/em&gt;{t-1}, x_t] + b_C)
$$&lt;/p&gt;
&lt;h4&gt;更新细胞状态&lt;/h4&gt;
&lt;p&gt;新的长期记忆 = (遗忘门 x 旧记忆) + (输入门 x 新信息)&lt;/p&gt;
&lt;p&gt;$$
C_t = f_t * C_{t-1} + i_t * \tilde{C}_t
$$&lt;/p&gt;
&lt;h4&gt;输出门&lt;/h4&gt;
&lt;p&gt;基于更新后的细胞状态$C_t$，决定当前时刻的隐状态$h_t$是什么&lt;/p&gt;
&lt;p&gt;$$
o_t = \sigma(W_o \cdot [h_{t-1}, x_t] + b_o)
$$&lt;/p&gt;
&lt;p&gt;最终的隐状态输出为$h_t = o_t * \tanh(C_t)$&lt;/p&gt;
&lt;h3&gt;缺点&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;结构复杂，参数多，训练时间长&lt;/li&gt;
&lt;li&gt;无法并行计算，训练速度慢&lt;/li&gt;
&lt;li&gt;还是会失忆&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;第三代：Transformer自注意力机制&lt;/h2&gt;
&lt;p&gt;$$
\text{Attention}(Q, K, V) = \text{Softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V
$$&lt;/p&gt;
&lt;p&gt;$Q,K,V$都来自同一个输入&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$Q$：查询，当前输入词要找什么&lt;/li&gt;
&lt;li&gt;$K$: 键，当前输入词有什么可以被别的词查询的标签&lt;/li&gt;
&lt;li&gt;$V$: 值，当前输入词的具体信息&lt;/li&gt;
&lt;li&gt;$d_k$：键的维度，$\sqrt{d_k}$是缩放因子，防止点积过大导致Softmax梯度消失&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>[模式识别与机器学习] 卷积神经网络</title><link>https://alkaid114.github.io/posts/ml/cnn/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/ml/cnn/</guid><pubDate>Sun, 28 Jun 2026 10:54:00 GMT</pubDate><content:encoded>&lt;h2&gt;LeNet-5&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;使用&lt;strong&gt;平均池化&lt;/strong&gt;，激活函数为Tanh或Sigmoid&lt;/li&gt;
&lt;li&gt;7层网络（3卷积 + 2池化 + 1全连接 + 1输出）&lt;/li&gt;
&lt;li&gt;局限性：梯度消失问题，网络变深会导致训练困难&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;AlexNet&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;使用&lt;strong&gt;ReLU激活函数&lt;/strong&gt;、&lt;strong&gt;最大池化&lt;/strong&gt;和&lt;strong&gt;Dropout&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;8层网络（5卷积 + 3全连接），输入224×224 RGB图像&lt;/li&gt;
&lt;li&gt;FC参数量巨大（~60M），后接3个全连接层（4096+4096+1000）&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;ResNet&lt;/h2&gt;
&lt;p&gt;特点是&lt;strong&gt;跳跃连接&lt;/strong&gt;，不再让每层直接输出结果，而是输出跟结果的差异（残差学习），解决了深层网络的梯度消失问题&lt;/p&gt;
&lt;h3&gt;残差块&lt;/h3&gt;
&lt;p&gt;每个残差块由 Conv → BN → ReLU → Conv → BN → 跳跃连接相加 → ReLU 组成&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;恒等块(Identity Block)&lt;/strong&gt;：输入输出尺寸通道相同，直接相加&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;投影块(Projection Block)&lt;/strong&gt;：输入输出尺寸或通道不同，通过1×1卷积调整后相加&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BasicBlock(ResNet-18/34)&lt;/strong&gt;：2层3×3卷积，卷积过程尺寸不变&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bottleneck(ResNet-50/101/152)&lt;/strong&gt;：1×1降维 → 3×3 → 1×1升维，先降后升减少计算量&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;避免了AlexNet中FC参数过多的问题&lt;/p&gt;
&lt;h2&gt;VGGNet&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;整个网络全用3×3卷积核（堆叠两个3×3等同5×5感受野，堆叠三个等同7×7），全部使用2×2最大池化&lt;/li&gt;
&lt;li&gt;5个卷积块逐步增加通道数（64→128→256→512→512），后接3个全连接层&lt;/li&gt;
&lt;li&gt;缺点：参数量巨大（FC层占大多数）&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;GoogLeNet (Inception系列)&lt;/h2&gt;
&lt;p&gt;特点是使用&lt;strong&gt;Inception模块&lt;/strong&gt;，在同一层中使用不同大小的卷积核并行提取多尺度特征，最后拼接&lt;/p&gt;
&lt;h3&gt;Inception模块(降维版)&lt;/h3&gt;
&lt;p&gt;4条并行支路均先经过1×1卷积降维，再分别进行不同操作：① 1×1直接输出；② 1×1 + 3×3；③ 1×1 + 5×5；④ 3×3池化 + 1×1。通过padding使各支路输出尺寸相同&lt;/p&gt;
&lt;p&gt;使用&lt;strong&gt;全局平均池化&lt;/strong&gt;替代全连接层大幅减少参数量；引入辅助分类器缓解梯度消失&lt;/p&gt;
&lt;h3&gt;Inception-V2&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;引入&lt;strong&gt;批归一化(BN)&lt;/strong&gt;，不再使用Dropout&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;将5×5卷积替换为&lt;strong&gt;两个3×3卷积串联&lt;/strong&gt;，感受野不变但参数量减少&lt;/li&gt;
&lt;li&gt;提出&lt;strong&gt;BN+Inception&lt;/strong&gt;的组合，加速收敛并起到正则化效果&lt;/li&gt;
&lt;li&gt;辅助分类器也加入了BN&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Inception-V3&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;进一步分解大卷积核，引入&lt;strong&gt;非对称卷积&lt;/strong&gt;和&lt;strong&gt;标签平滑&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;卷积分解&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;将3×3分解为&lt;strong&gt;1×3 + 3×1&lt;/strong&gt;（非对称卷积），进一步减少参数量&lt;/li&gt;
&lt;li&gt;n×n卷积分解为1×n + n×1，参数量从O(n²)降至O(n)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;辅助分类器&lt;/strong&gt;中加入BN&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;标签平滑(Label Smoothing)&lt;/strong&gt;：将硬目标(0/1)替换为平滑分布(如$\epsilon/(K-1)$)，减少过拟合&lt;/li&gt;
&lt;li&gt;输入尺寸从224×224调整为&lt;strong&gt;299×299&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Inception-V4&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;与残差连接结合的Inception-ResNet，以及纯Inception的V4版本&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Inception-ResNet&lt;/strong&gt;：在Inception模块中引入&lt;strong&gt;残差连接&lt;/strong&gt;(跳跃连接 + 逐元素相加)，解决超深Inception的训练困难&lt;/li&gt;
&lt;li&gt;Inception-V4：纯Inception结构（无残差连接），但设计更规整、更深&lt;/li&gt;
&lt;li&gt;引入&lt;strong&gt;Reduction Block&lt;/strong&gt;专门控制特征图尺寸缩减&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;U-Net&lt;/h2&gt;
&lt;p&gt;编码器-解码器对称结构，编码器负责下采样，解码器负责上采样，架构形似“U”形+跳跃连接&lt;/p&gt;
&lt;p&gt;U-Net的跳跃连接是通道拼接，而非ResNet的逐元素相加&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./unet.png&quot; alt=&quot;U-Net架构图&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;DenseNet&lt;/h2&gt;
&lt;p&gt;每层接受前面所有层的输出作为输入，输出也会传递给后续所有层，形成密集连接&lt;/p&gt;
&lt;p&gt;跳跃连接同样是通道拼接，而非ResNet的逐元素相加&lt;/p&gt;
&lt;h2&gt;ZFNet(ZeilerNet)&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;2013年ILSVRC冠军，对AlexNet的可视化分析与改进&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;核心贡献&lt;/strong&gt;：提出**反卷积(Deconvolution)**方法可视化中间层特征，解释CNN每层学到了什么&lt;/li&gt;
&lt;li&gt;与AlexNet结构基本相同，仅调整了超参数：
&lt;ul&gt;
&lt;li&gt;Conv1：从11×11步长4改为&lt;strong&gt;7×7步长2&lt;/strong&gt;，保留更多低频信息&lt;/li&gt;
&lt;li&gt;Conv3/4/5：增加卷积核数量&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;意义&lt;/strong&gt;：打开了CNN&quot;黑盒&quot;，证明了深层特征更具语义性、对平移和缩放更鲁棒&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;VGG-VD(Very Deep VGG)&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;VGG的极深变体（VGG-16/VGG-19），相比原始VGG加深至16~19层&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;延续VGG风格：&lt;strong&gt;全部使用3×3卷积 + 2×2最大池化&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;通过堆叠更多3×3卷积层增加深度，同时保持感受野不变&lt;/li&gt;
&lt;li&gt;参数量集中在全连接层，后接3个全连接层（4096+4096+1000）&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;空洞卷积(Dilated/Atrous Convolution)&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;在卷积核元素之间插入空洞（间隔），&lt;strong&gt;在不增加参数量的情况下扩大感受野&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;$$
\text{输出尺寸} = \left\lfloor \frac{\text{输入尺寸} + 2p - d(k-1) - 1}{s} + 1 \right\rfloor
$$&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$d$：空洞率(dilation rate)，普通卷积$d=1$，$d=2$时感受野等同5×5卷积但仍是3×3的参数&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;优点&lt;/strong&gt;：可控制特征图的分辨率（不降采样也能扩大感受野），适合语义分割等密集预测任务&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;典型应用&lt;/strong&gt;：DeepLab系列语义分割网络&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;形变卷积(Deformable Convolution)&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;卷积核的每个采样点学习一个&lt;strong&gt;偏移量(offset)&lt;/strong&gt;，使卷积核形状自适应目标几何形变&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;标准卷积在固定网格(如3×3规则网格)上采样；形变卷积在每个位置额外学习$2k^2$个偏移量&lt;/li&gt;
&lt;li&gt;偏移量由另一个平行卷积层从输入特征图中学习得到&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;特点&lt;/strong&gt;：对目标尺度、姿态、形变更鲁棒，适合物体检测和语义分割&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;近似恒等映射(Approximate Identity Mapping)&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;ResNet的核心思想：让堆叠层拟合&lt;strong&gt;残差&lt;/strong&gt;$F(\mathbf{x}) = H(\mathbf{x}) - \mathbf{x}$，而非直接拟合$H(\mathbf{x})$&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;$$
H(\mathbf{x}) = F(\mathbf{x}) + \mathbf{x}
$$&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;若恒等映射$H(\mathbf{x}) = \mathbf{x}$是最优的，残差块只需将$F(\mathbf{x})$逼近0（比拟合复杂映射更容易）&lt;/li&gt;
&lt;li&gt;保证了深层的梯度可以直接通过跳跃连接回传，缓解梯度消失&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;类激活图(CAM)&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;通过全局平均池化层的权重，生成&lt;strong&gt;类别响应的热力图&lt;/strong&gt;，定位图像中判别性区域&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;结构：CNN特征提取 → 全局平均池化 → 全连接(softmax)&lt;/li&gt;
&lt;li&gt;对最后一层卷积特征图$\mathbf{f}_k$（第$k$个通道）加权求和：$M_c(x,y) = \sum_k w_k^c \cdot \mathbf{f}_k(x,y)$&lt;/li&gt;
&lt;li&gt;$w_k^c$是类别$c$对应第$k$个特征图的权重，热力图高亮区域即为分类依据区域&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;局限&lt;/strong&gt;：需修改网络结构（将全连接替换为全局平均池化）&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;空域注意力(Spatial Attention)&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;关注&quot;&lt;strong&gt;哪里&lt;/strong&gt;&quot;是重要区域，生成空间维度的注意力权重图&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;对特征图$\mathbf{X} \in \mathbb{R}^{C \times H \times W}$，通过卷积或池化生成空间权重$\mathbf{M}_s \in \mathbb{R}^{1 \times H \times W}$&lt;/li&gt;
&lt;li&gt;每个空间位置$(i,j)$获得一个权重值，表示该位置的重要性&lt;/li&gt;
&lt;li&gt;权重与原始特征逐元素相乘：$\mathbf{X}&apos; = \mathbf{X} \odot \mathbf{M}_s$&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;通道注意力(Channel Attention)&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;关注&quot;&lt;strong&gt;什么&lt;/strong&gt;&quot;是重要的特征通道，生成通道维度的权重向量&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;典型代表：&lt;strong&gt;SENet(Squeeze-and-Excitation Network)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Squeeze&lt;/strong&gt;：全局平均池化将$C \times H \times W$压缩为$C \times 1 \times 1$&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Excitation&lt;/strong&gt;：通过两个全连接层（降维→升维）学习通道间依赖，经Sigmoid输出0~1权重&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scale&lt;/strong&gt;：权重与原始特征图逐通道相乘&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;每个通道获得一个标量权重，表示该通道的重要性&lt;/li&gt;
&lt;li&gt;计算开销小，可嵌入任意网络&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;CBAM(Convolutional Block Attention Module)&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;通道注意力 + 空域注意力&lt;/strong&gt;串联，兼顾&quot;什么&quot;和&quot;哪里&quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;通道注意力模块&lt;/strong&gt;：先对特征图进行全局平均池化和全局最大池化，经共享MLP后相加，经Sigmoid得到通道权重&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;空域注意力模块&lt;/strong&gt;：沿通道维度进行平均池化和最大池化，拼接后经7×7卷积 + Sigmoid得到空间权重&lt;/li&gt;
&lt;li&gt;两模块串联：特征 → 通道注意力 → 空域注意力 → 输出&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;特点&lt;/strong&gt;：轻量级即插即用模块，在分类和检测任务上均有效提升性能&lt;/p&gt;
&lt;h2&gt;ECANet(Efficient Channel Attention Network)&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;对SENet的改进，用&lt;strong&gt;一维卷积&lt;/strong&gt;替代全连接层，实现更高效的通道注意力&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;去掉了SENet中的降维操作（全连接），直接通过&lt;strong&gt;一维卷积&lt;/strong&gt;捕捉局部跨通道交互&lt;/li&gt;
&lt;li&gt;卷积核大小$k$由通道数$C$自适应决定：$k = \psi(C) = \left|\frac{\log_2 C}{\gamma} + \frac{b}{\gamma}\right|_{\text{odd}}$&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;特点&lt;/strong&gt;：参数极少（仅$k$个参数），计算效率高，性能优于SENet&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>[模式识别与机器学习] 神经网络优化</title><link>https://alkaid114.github.io/posts/ml/nn_opt/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/ml/nn_opt/</guid><pubDate>Sat, 27 Jun 2026 21:29:00 GMT</pubDate><content:encoded>&lt;h2&gt;反向传播算法&lt;/h2&gt;
&lt;p&gt;在&lt;a href=&quot;/post/ml/nonlinear_classifier#%E5%8F%8D%E5%90%91%E4%BC%A0%E6%92%AD%E7%AE%97%E6%B3%95&quot;&gt;非线性分类器&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;优化器(不考)&lt;/h2&gt;
&lt;p&gt;$\eta$ 学习率&lt;/p&gt;
&lt;h3&gt;GD梯度下降&lt;/h3&gt;
&lt;p&gt;最普通的优化方法，一次计算所有样本的损失的梯度，更新参数&lt;/p&gt;
&lt;p&gt;$$
\theta_t = \theta_{t-1} - \eta \nabla_\theta J(\theta_{t-1})
$$&lt;/p&gt;
&lt;h3&gt;SGD随机梯度下降&lt;/h3&gt;
&lt;p&gt;每次只计算随机一个样本的损失的梯度，更新参数&lt;/p&gt;
&lt;p&gt;$$
\theta_t = \theta_{t-1} - \eta \nabla_\theta J(\theta_{t-1}; x^{(i)}, y^{(i)})
$$&lt;/p&gt;
&lt;h3&gt;Mini-batch SGD小批量随机梯度下降&lt;/h3&gt;
&lt;p&gt;每次随机选择一小批样本，计算损失的梯度，更新参数&lt;/p&gt;
&lt;p&gt;$$
\theta_t = \theta_{t-1} - \eta \nabla_\theta J(\theta_{t-1}; x^{(i:i+n)}, y^{(i:i+n)})
$$&lt;/p&gt;
&lt;h3&gt;Momentum动量法&lt;/h3&gt;
&lt;p&gt;模拟物理中的动量，更新参数时考虑上一次的更新方向&lt;/p&gt;
&lt;p&gt;$$
v_t = \beta v_{t-1} +\nabla_\theta J(\theta_{t-1}) \
\theta_t = \theta_{t-1} - \eta v_t
$$&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$\beta$ 是动量系数，通常取值在 [0.9, 0.99] 之间&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Nesterov加速梯度法&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;改进自动量法&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;先在当前位置按上次的动量方向走一点再算梯度&lt;/p&gt;
&lt;p&gt;$$
v_t = \beta v_{t-1} +\nabla_\theta J(\theta_{t-1}) \
\theta_{t} = \theta_{t-1} - \eta (\nabla_\theta J(\theta_{t-1})+ \beta v_{t})
$$&lt;/p&gt;
&lt;h3&gt;Adagrad自适应梯度算法&lt;/h3&gt;
&lt;p&gt;令$g_{t,i}$为第$i$个参数$\theta_i$在第$t$次迭代的梯度，累计梯度平方和：&lt;/p&gt;
&lt;p&gt;$$
G_{t,i} = \sum_{\tau=1}^{t} g_{\tau,i}^2
$$&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;实际实现是递推相加避免重复计算：$G_{t,i} = G_{t-1,i} + g_{t,i}^2$&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;则参数更新：&lt;/p&gt;
&lt;p&gt;$$
\theta_{t,i} = \theta_{t-1,i} - \frac{\eta}{\sqrt{G_{t-1,i}} + \epsilon} \cdot g_{t,i}
$$&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$\epsilon$ 是一个小常数，防止除零错误，通常取 $10^{-8}$&lt;/li&gt;
&lt;li&gt;$\eta$ 是初始学习率，通常取 $0.01$&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;缺点：学习率单调递减，最后学不动&lt;/p&gt;
&lt;h3&gt;RMSProp均方根传播算法&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;改进自Adagrad，解决学习率单调递减的问题&lt;/p&gt;
&lt;p&gt;核心思想是按比例丢弃历史的梯度平方和，且按比例新增梯度平方，限制梯度平方和的增长速度&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;定义梯度平方和的指数移动平均$r_t$(或$E[g_t^2]$/$v_t$)：&lt;/p&gt;
&lt;p&gt;$$
r_t = \rho r_{t-1} + (1 - \rho) g_t^2
$$&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$\rho$ 是衰减率，通常取 $0.9$&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;参数更新：&lt;/p&gt;
&lt;p&gt;$$
\theta_{t} = \theta_{t-1} - \frac{\eta}{\sqrt{r_t} + \epsilon} \cdot g_t
$$&lt;/p&gt;
&lt;h3&gt;Adam自适应矩估计算法&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;结合Momentum和RMSProp&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;$$
\text{一阶矩} \quad m_t = \beta_1 m_{t-1} + (1 - \beta_1) g_t \
\text{二阶矩} \quad v_t = \beta_2 v_{t-1} + (1 - \beta_2) g_t^2
$$&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$\beta_1$ 是一阶矩的衰减率，通常取 $0.9$&lt;/li&gt;
&lt;li&gt;$\beta_2$ 是二阶矩的衰减率，通常取 $0.999$&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;$m_t$和$v_t$初始化为0, 训练初期期望值会偏向0导致更新过小，需进行偏差修正：&lt;/p&gt;
&lt;p&gt;$$
m_t = \frac{m_t}{1 - \beta_1^t} \
v_t = \frac{v_t}{1 - \beta_2^t}
$$&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$t$ 是迭代次数&lt;/li&gt;
&lt;li&gt;$\beta_1^t$ 和 $\beta_2^t$ 是衰减率的$t$次幂，随着迭代次数增加，趋近于0&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;参数更新：&lt;/p&gt;
&lt;p&gt;$$
\theta_{t} = \theta_{t-1} - \eta \cdot  \frac{m_t}{\sqrt{v_t} + \epsilon}
$$&lt;/p&gt;
&lt;h3&gt;AdamW自适应矩估计权重衰减算法&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;改进自Adam，解决L2正则化在Adam中不生效的问题&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;在Adam的基础上，参数更新后再进行权重衰减：&lt;/p&gt;
&lt;p&gt;$$
\theta_{t} = \theta_{t-1} - \eta \cdot  \frac{m_t}{\sqrt{v_t} + \epsilon} - \eta \lambda \theta_{t-1}
$$&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$\lambda$ 是权重衰减系数，通常取 $[10^{-2}, 10^{-1}]$&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;激活函数&lt;/h2&gt;
&lt;h3&gt;对数Sigmoid函数&lt;/h3&gt;
&lt;p&gt;$$
\sigma(x) = \frac{1}{1 + e^{-x}}
$$&lt;/p&gt;
&lt;h3&gt;双曲正切函数&lt;/h3&gt;
&lt;p&gt;$$
\tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} = 2\sigma(2x) - 1
$$&lt;/p&gt;
&lt;h3&gt;ReLU&lt;/h3&gt;
&lt;p&gt;$$
\text{ReLU}(x) = \max(0, x)
$$&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[!NOTE]
平滑ReLU（Softplus）：
$$
\text{Softplus}(x) = \log(1 + e^x)
$$&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;批归一化(BN)&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;通过规范化每层输入，解决训练过程中**内部协变量偏移(Internal Covariate Shift)**问题，即前层参数变化导致后层输入分布持续变化的现象。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;前向传播&lt;/h3&gt;
&lt;p&gt;对每个 mini-batch $\mathcal{B} = {\mathbf{x}_1, \dots, \mathbf{x}_m}$，对每个特征维独立进行归一化：&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
\mu_{\mathcal{B}} &amp;amp;= \frac{1}{m} \sum_{i=1}^m \mathbf{x}&lt;em&gt;i \qquad \text{(批均值)} \[1em]
\sigma&lt;/em&gt;{\mathcal{B}}^2 &amp;amp;= \frac{1}{m} \sum_{i=1}^m (\mathbf{x}&lt;em&gt;i - \mu&lt;/em&gt;{\mathcal{B}})^2 \qquad \text{(批方差)} \[1em]
\hat{\mathbf{x}}&lt;em&gt;i &amp;amp;= \frac{\mathbf{x}&lt;em&gt;i - \mu&lt;/em&gt;{\mathcal{B}}}{\sqrt{\sigma&lt;/em&gt;{\mathcal{B}}^2 + \epsilon}} \qquad \text{(归一化)} \[1em]
\mathbf{y}_i &amp;amp;= \gamma \hat{\mathbf{x}}_i + \beta \qquad \text{(缩放平移)}
\end{aligned}
$$&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$\gamma$（缩放参数）、$\beta$（平移参数）是可学习参数，恢复网络的表达能力&lt;/li&gt;
&lt;li&gt;$\epsilon$ 防止除零，通常取 $10^{-5}$&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;引入 $\gamma, \beta$ 的原因是：单纯归一化会将数据限制在单位方差、零均值，可能破坏网络的表达能力（如将原本在 Sigmoid 线性区的输入推到饱和区）；通过可学习的 $\gamma, \beta$，网络可以自行决定是否恢复原始分布。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;训练与推理的差异&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;训练时&lt;/strong&gt;：使用当前 mini-batch 的 $\mu_{\mathcal{B}}, \sigma_{\mathcal{B}}^2$ 进行归一化&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;推理时&lt;/strong&gt;：使用训练集上累积的&lt;strong&gt;全局&lt;/strong&gt;均值 $\mu_{\text{run}}$ 和方差 $\sigma_{\text{run}}^2$（指数移动平均）：&lt;/p&gt;
&lt;p&gt;$$
\mu_{\text{run}} \leftarrow \alpha \mu_{\text{run}} + (1 - \alpha) \mu_{\mathcal{B}} \
\sigma_{\text{run}}^2 \leftarrow \alpha \sigma_{\text{run}}^2 + (1 - \alpha) \sigma_{\mathcal{B}}^2
$$&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$\alpha$ 为动量系数（通常 $0.9$），推理时固定该统计量&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;反向传播&lt;/h3&gt;
&lt;p&gt;BN 层参与梯度计算，链式法则需考虑 $\mu$ 和 $\sigma^2$ 对输入的依赖。现代框架自动处理，梯度通过归一化、$\gamma$、$\beta$ 逐层回传。&lt;/p&gt;
&lt;h3&gt;放置位置&lt;/h3&gt;
&lt;p&gt;通常置于&lt;strong&gt;线性变换之后、激活函数之前&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;$$
\mathbf{z} = \mathbf{W}\mathbf{x} + \mathbf{b} \rightarrow \text{BN}(\mathbf{z}) \rightarrow \sigma(\cdot)
$$&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;因 BN 含有平移参数 $\beta$，线性层中的偏置 $\mathbf{b}$ 可省略。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;作用与效果&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;作用&lt;/th&gt;
&lt;th&gt;说明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;加速收敛&lt;/td&gt;
&lt;td&gt;缓解梯度消失/梯度爆炸，允许使用更大的学习率&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;减少过拟合&lt;/td&gt;
&lt;td&gt;每个 batch 的均值方差存在随机性，带来轻微正则化效果&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;降低对初始化的依赖&lt;/td&gt;
&lt;td&gt;每层输入分布相对稳定，参数初始化不必过于精确&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;允许更大学习率&lt;/td&gt;
&lt;td&gt;输出分布受控，不易发散&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;局限&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;小 batch 不友好&lt;/strong&gt;：batch 过小时统计量不稳定，影响训练质量（替代方案：LayerNorm、GroupNorm）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;训练与推理行为不一致&lt;/strong&gt;：训练依赖 batch 内其他样本，推理使用全局统计量&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;对序列模型不直接适用&lt;/strong&gt;：RNN 中不同时间步共享 BN 参数需特殊处理&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>[模式识别与机器学习] 贝叶斯学习</title><link>https://alkaid114.github.io/posts/ml/bayes_learn/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/ml/bayes_learn/</guid><pubDate>Fri, 26 Jun 2026 19:37:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;[!NOTE]
$\sigma(z) = \dfrac{1}{1 + e^{-z}} \qquad \text{Sigmoid}$&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Logistic回归(以二分类为例)&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;直接学习$P(\omega_i | \mathbf{x})$&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;输出的不是类别标签而是一个概率值，表示输入样本属于某个类的概率。使用Sigmoid函数将线性判别函数的输出映射到(0, 1)区间：&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
P(y=1|\mathbf{x}) &amp;amp;= \sigma(\mathbf{w}^T \mathbf{x}) = \dfrac{1}{1 + e^{-\mathbf{w}^T \mathbf{x}}} \
P(y=0|\mathbf{x}) &amp;amp;= 1 - P(y=1|\mathbf{x}) \ &amp;amp;= \dfrac{e^{-\mathbf{w}^T \mathbf{x}}}{1 + e^{-\mathbf{w}^T \mathbf{x}}}
\end{aligned}
$$&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$y$：类别标签，取值为0或1&lt;/li&gt;
&lt;li&gt;$\sigma(z)$：Sigmoid函数，将输入映射到(0, 1)区间&lt;/li&gt;
&lt;li&gt;$\mathbf{w}$：增广权重向量，包含偏置项&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果概率大于0.5，则预测为正类，否则预测为负类。&lt;/p&gt;
&lt;p&gt;Logistic回归的损失函数：&lt;/p&gt;
&lt;p&gt;$$
J(\mathbf{w}) = -\log P(y|\mathbf{x}; \mathbf{w}) = -\log \sigma((2y-1)\mathbf{w}^T \mathbf{x})
$$&lt;/p&gt;
&lt;p&gt;从输出中选取真实类别对应的概率值，取负对数，为了能够求导，采用one-hot编码表示类别标签：&lt;/p&gt;
&lt;p&gt;$$
\mathbf{y} = \begin{bmatrix}y_1 \ y_2\end{bmatrix} = \begin{bmatrix}1 \ 0\end{bmatrix} \text{或} \begin{bmatrix}0 \ 1\end{bmatrix}
$$&lt;/p&gt;
&lt;p&gt;$$
J(\mathbf{w}) = -\sum_{i=1}^c y_i \log P(y_i|\mathbf{x}; \mathbf{w})
$$&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$c$：类别数，对于二分类问题，$c=2$&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;前面二分类的损失函数就是one-hot的其中一种情况&lt;/p&gt;
&lt;h2&gt;参数估计和非参数估计&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;比较方面&lt;/th&gt;
&lt;th&gt;参数估计&lt;/th&gt;
&lt;th&gt;非参数估计&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;模型假设&lt;/td&gt;
&lt;td&gt;假设数据服从某种分布，参数是未知的&lt;/td&gt;
&lt;td&gt;不假设数据服从某种分布&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;模型复杂度&lt;/td&gt;
&lt;td&gt;模型复杂度固定，参数个数有限&lt;/td&gt;
&lt;td&gt;模型复杂度随数据量增加而增加，参数个数可能无限&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;数据需求&lt;/td&gt;
&lt;td&gt;需要较少的数据来估计参数&lt;/td&gt;
&lt;td&gt;需要大量的数据来估计分布&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;计算复杂度&lt;/td&gt;
&lt;td&gt;计算复杂度较低&lt;/td&gt;
&lt;td&gt;计算复杂度较高&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;泛化能力&lt;/td&gt;
&lt;td&gt;可能存在模型偏差，如果假设不成立，泛化能力较差&lt;/td&gt;
&lt;td&gt;泛化能力较好，能够适应复杂的数据分布&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;常见的参数估计方法&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;极大似然估计(MLE)：通过最大化似然函数来估计参数。&lt;/li&gt;
&lt;li&gt;矩估计：通过样本矩来估计参数。&lt;/li&gt;
&lt;li&gt;贝叶斯估计：通过先验分布和观测数据来估计参数。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;常见的非参数估计方法&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;核密度估计(KDE)：通过核函数对样本进行平滑，估计概率密度函数。&lt;/li&gt;
&lt;li&gt;经验分布函数(EDF)：通过样本的经验分布来估计总体分布。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Parzen窗核密度估计&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;窗口固定，密集处样本多，稀疏处样本少&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;先固定窗口宽度$h$，然后对每个样本点$\mathbf{x}_i$，在其周围放置一个核函数$K(\cdot)$，计算所有核函数的平均值作为估计的概率密度函数：&lt;/p&gt;
&lt;p&gt;$$
\hat{p}(\mathbf{x}) = \frac{1}{n h} \sum_{i=1}^{n} K\left(\frac{\mathbf{x} - \mathbf{x}_i}{h}\right)
$$&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$K(\cdot)$：核函数，决定每个样本的贡献值&lt;/li&gt;
&lt;li&gt;$h$：窗口宽度，一维就是长度，二维就是正方形的边长，...&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;K近邻密度估计(KNN)&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;窗口大小自动变化，稀疏处扩大，密集处缩小&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;在样本中寻找距离输入样本$\mathbf{x}$最近的$k$个样本点，计算这些样本点覆盖的区域体积$V$，然后估计概率密度函数为：&lt;/p&gt;
&lt;p&gt;$$
\hat{p}(\mathbf{x}) = \frac{k}{n V}
$$&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$V$：「体积」在一维中就是长度，二维中就是面积，三维中就是体积。&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>[模式识别与机器学习] 贝叶斯决策理论</title><link>https://alkaid114.github.io/posts/ml/bayes_decision/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/ml/bayes_decision/</guid><pubDate>Fri, 26 Jun 2026 16:35:00 GMT</pubDate><content:encoded>&lt;h2&gt;概率论复习&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;条件概率&lt;/strong&gt;：$P(A|B) = \frac{P(AB)}{P(B)}$&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;联合概率&lt;/strong&gt;：$P(A \cap B) = P(A|B)P(B) = P(B|A)P(A)$&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;全概率公式&lt;/strong&gt;：$P(A) = \sum_{i} P(A|B_i)P(B_i)$&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;贝叶斯定理&lt;/strong&gt;：$P(B|A) = \frac{P(A|B)P(B)}{P(A)}$&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;贝叶斯定理&lt;/h2&gt;
&lt;p&gt;$$
P(A | B) = \frac{P(B | A) P(A)}{P(B)}
$$&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$P(A)$：先验概率，在看到证据B之前对事件A的初始认知&lt;/li&gt;
&lt;li&gt;$P(B|A)$：似然函数，表示假设A成立的条件下，观测到证据B的概率&lt;/li&gt;
&lt;li&gt;$P(B)$：证据B的边缘概率，可以通过全概率公式计算得到，表示在所有可能的事件A下，观测到证据B的总概率&lt;/li&gt;
&lt;li&gt;$P(A|B)$：后验概率，表示在观察到证据B后，事件A发生的概率&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;贝叶斯决策理论(不考)&lt;/h2&gt;
&lt;h3&gt;最小错误率(最小平均风险的特殊情况)&lt;/h3&gt;
&lt;p&gt;哪个后验概率大选哪个：&lt;/p&gt;
&lt;p&gt;$$
i = \arg\max_{1\leq j \leq c} P(\omega_j | x) \quad \mathbf{x} \in \omega_i
$$&lt;/p&gt;
&lt;h3&gt;最小平均风险(贝叶斯准则)&lt;/h3&gt;
&lt;p&gt;有$c$个类别$\omega_1, \omega_2, \ldots, \omega_c$，将属于$\omega_i$的样本判别为$\omega_j$的代价为$\lambda_{ij}$&lt;/p&gt;
&lt;p&gt;则将样本$\mathbf{x}$判别为$\omega_j$类的平均风险为：&lt;/p&gt;
&lt;p&gt;$$
\gamma_j(\mathbf{x}) = \sum_{i=1}^c \lambda_{ij} P(\omega_i | \mathbf{x})
$$&lt;/p&gt;
&lt;p&gt;选择平均风险最小的类别：&lt;/p&gt;
&lt;p&gt;哪个平均风险小选哪个&lt;/p&gt;
&lt;p&gt;$$
i = \arg\min_{1\leq j \leq c} \gamma_j(\mathbf{x}) \quad \mathbf{x} \in \omega_i
$$&lt;/p&gt;
&lt;p&gt;当代价为0-1代价函数时，效果跟&lt;a href=&quot;#%E6%9C%80%E5%B0%8F%E9%94%99%E8%AF%AF%E7%8E%87&quot;&gt;最小错误率&lt;/a&gt;相同&lt;/p&gt;
&lt;p&gt;$$
\lambda_{ij} = \begin{cases}
0, &amp;amp; i = j \
1, &amp;amp; i \neq j
\end{cases}
$$&lt;/p&gt;
&lt;h3&gt;Neyman-Pearson准则(代价未知)&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;无需先验概率&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;代价未知时可通过NP准则控制到指定的错误率，在限定一类错误率的前提下，最小化另一类错误率&lt;/p&gt;
&lt;p&gt;已知要求将属于$\omega_1$的样本判别为$\omega_2$的错误率不超过$\alpha$，即：&lt;/p&gt;
&lt;p&gt;$$
P(\text{判为}\omega_2 | \omega_1) \leq \alpha
$$&lt;/p&gt;
&lt;p&gt;进行似然比检验：&lt;/p&gt;
&lt;p&gt;$$
\frac{P(\mathbf{x} | \omega_1)}{P(\mathbf{x} | \omega_2)}  \begin{cases}
\geq \eta, &amp;amp; \text{判为}\omega_1 \
&amp;lt; \eta, &amp;amp; \text{判为}\omega_2
\end{cases}
$$&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$\eta$：阈值，控制错误率&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;通过$\alpha$计算$\eta$：&lt;/p&gt;
&lt;p&gt;$$
P(\text{判为}\omega_2 | \omega_1) = P(\frac{P(\mathbf{x} | \omega_1)}{P(\mathbf{x} | \omega_2)} &amp;lt; \eta | \omega_1) = \alpha
$$&lt;/p&gt;
&lt;p&gt;之后解方程确定分布函数右边的面积等于$\alpha$，即可得到$\eta$的值&lt;/p&gt;
&lt;h3&gt;极小极大准则(先验概率未知)&lt;/h3&gt;
&lt;p&gt;最小化最大风险，适用于不确定的代价函数&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;考虑最坏情况&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;$$
i = \arg\min_{1\leq j \leq c} \max_{1\leq i \leq c} \lambda_{ij} P(\omega_i | \mathbf{x}) \quad \mathbf{x} \in \omega_i
$$&lt;/p&gt;
&lt;h2&gt;贝叶斯分类器&lt;/h2&gt;
&lt;h3&gt;判别函数&lt;/h3&gt;
&lt;p&gt;实际工程上后验概率很难算，通常使用判别函数$g_i(\mathbf{x})$来代替后验概率$P(\omega_i | \mathbf{x})$，满足：&lt;/p&gt;
&lt;p&gt;$$
g_i(\mathbf{x}) &amp;gt; g_j(\mathbf{x}), \quad \text{当且仅当} P(\omega_i | \mathbf{x}) &amp;gt; P(\omega_j | \mathbf{x})
$$&lt;/p&gt;
&lt;p&gt;判别函数是单调的，常见的判别函数有：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;线性判别函数&lt;/strong&gt;：$g_i(\mathbf{x}) = \mathbf{w}&lt;em&gt;i^T \mathbf{x} + w&lt;/em&gt;{i0}$，其中$\mathbf{w}&lt;em&gt;i$是权重向量，$w&lt;/em&gt;{i0}$是偏置项&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;二次判别函数&lt;/strong&gt;：$g_i(\mathbf{x}) = -\frac{1}{2} \mathbf{x}^T \Sigma_i^{-1} \mathbf{x} + \mathbf{w}&lt;em&gt;i^T \mathbf{x} + w&lt;/em&gt;{i0}$，其中$\Sigma_i$是协方差矩阵&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;对数判别函数&lt;/strong&gt;：$g_i(\mathbf{x}) = \ln P(\omega_i) + \ln P(\mathbf{x} | \omega_i)$，适用于朴素贝叶斯分类器(Naive Bayes Classifier)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;距离判别函数&lt;/strong&gt;：$g_i(\mathbf{x}) = -|\mathbf{x} - \boldsymbol{\mu}_i|^2$，其中$\boldsymbol{\mu}_i$是类别$\omega_i$的均值向量&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;概率判别函数&lt;/strong&gt;：$g_i(\mathbf{x}) = P(\omega_i | \mathbf{x})$，直接使用后验概率作为判别函数&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;$\mu_i$是属于类别$\omega_i$的样本的均值向量&lt;/p&gt;
&lt;h3&gt;朴素贝叶斯分类器(Naive Bayes Classifier)&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;先估计 $P(\mathbf{x} | \omega_i)$，再用贝叶斯公式求 $P(\omega_i | \mathbf{x})$&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;动机：维度灾难&lt;/h4&gt;
&lt;p&gt;对于 $d$ 维特征向量 $\mathbf{x} = (x_1, x_2, \ldots, x_d)^T$，要直接估计联合条件概率 $P(x_1, x_2, \ldots, x_d | \omega_i)$，参数空间随 $d$ 呈&lt;strong&gt;指数级增长&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;若每个特征 $x_j$ 为&lt;strong&gt;二值变量&lt;/strong&gt;（取值 ${0, 1}$），$d$ 个特征的联合分布有 $2^d - 1$ 个独立参数需估计&lt;/li&gt;
&lt;li&gt;若每个特征 $x_j$ 取 $k$ 个离散值，则需估计 $k^d - 1$ 个独立参数&lt;/li&gt;
&lt;li&gt;$d = 10, k = 5$ 时，需约 $5^{10} \approx 10^7$ 个参数——远超实际训练样本数&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;即使每个特征为二值，$d = 30$ 时已有 $2^{30} \approx 10^9$ 种组合，需要&lt;strong&gt;指数级数量的样本&lt;/strong&gt;才能可靠估计每种组合的概率，这在实际中根本不可能。这就是所谓的&lt;strong&gt;维度灾难&lt;/strong&gt;（the curse of dimensionality）。&lt;/p&gt;
&lt;h4&gt;核心假设：条件独立性&lt;/h4&gt;
&lt;p&gt;朴素贝叶斯假设&lt;strong&gt;给定类别 $\omega_i$ 时，各特征条件独立&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;$$
P(x_1, x_2, \ldots, x_d | \omega_i) = \prod_{j=1}^d P(x_j | \omega_i)
$$&lt;/p&gt;
&lt;h4&gt;举个例子看懂怎么用&lt;/h4&gt;
&lt;p&gt;先看贝叶斯公式：&lt;/p&gt;
&lt;p&gt;$$
P(\omega_i | \mathbf{x}) = \frac{P(\mathbf{x} | \omega_i) P(\omega_i)}{P(\mathbf{x})}
$$&lt;/p&gt;
&lt;p&gt;假设要做一个垃圾邮件识别器，则类别为 $\omega_1$（垃圾邮件）和 $\omega_2$（非垃圾邮件），特征向量 $\mathbf{x}$ 为邮件中是否包含某些关键词的二值向量，例如：&lt;/p&gt;
&lt;p&gt;$$
\mathbf{x} =\left [x_1, x_2, x_3 \right ]^T = (\text{包含“免费”}, \text{包含“中奖”}, \text{包含“优惠”})^T
$$&lt;/p&gt;
&lt;p&gt;现在有一封邮件，其中包含“免费”和“优惠”，但不包含“中奖”，则 $\mathbf{x} = [1, 0, 1]^T$。&lt;/p&gt;
&lt;p&gt;假设同时我们有一批邮件样本数据集，经过统计得到以下数据：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;先验概率(垃圾邮件和非垃圾邮件的占比)$P(\omega_1) = 0.4, P(\omega_2) = 0.6$&lt;/li&gt;
&lt;li&gt;条件概率(垃圾邮件中出现各个词的占比)$P(x_1=1 | \omega_1) = 0.8, P(x_2=0 | \omega_1) = 0.7, P(x_3=1 | \omega_1) = 0.9$&lt;/li&gt;
&lt;li&gt;条件概率(非垃圾邮件中出现各个词的占比)$P(x_1=1 | \omega_2) = 0.2, P(x_2=0 | \omega_2) = 0.3, P(x_3=1 | \omega_2) = 0.1$&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;现对其进行分类，计算其属于垃圾邮件的后验概率：&lt;/p&gt;
&lt;p&gt;$$
P(\omega_1 | \mathbf{x}) = \frac{P(\mathbf{x} | \omega_1) P(\omega_1)}{P(\mathbf{x})} = \frac{P(x_1=1, x_2=0, x_3=1 | \omega_1) P(\omega_1)}{P(\mathbf{x})}
$$&lt;/p&gt;
&lt;p&gt;因为朴素贝叶斯假设条件独立性，所以：&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
P&amp;amp;(x_1=1, x_2=0, x_3=1 | \omega_1) \ &amp;amp;= P(x_1=1 | \omega_1) P(x_2=0 | \omega_1) P(x_3=1 | \omega_1) \
&amp;amp;= 0.8 \times 0.7 \times 0.9 = 0.504
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;则其属于垃圾邮件的后验概率为：&lt;/p&gt;
&lt;p&gt;$$
P(\omega_1 | \mathbf{x}) = \frac{0.504 \times 0.4}{P(\mathbf{x})} = \frac{0.2016}{P(\mathbf{x})}
$$&lt;/p&gt;
&lt;p&gt;同理得到其属于非垃圾邮件的后验概率：&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
P(\omega_2 | \mathbf{x}) &amp;amp;= \frac{P(\mathbf{x} | \omega_2) P(\omega_2)}{P(\mathbf{x})} \[1em] &amp;amp;= \frac{0.2 \times 0.3 \times 0.1 \times 0.6}{P(\mathbf{x})} = \frac{0.0036}{P(\mathbf{x})}
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;$P(\mathbf{x})$ 不需要计算，因为它是共用的，不影响比大小结果，除非需要计算具体概率：&lt;/p&gt;
&lt;p&gt;$$
P(\mathbf{x}) = P(\mathbf{x} | \omega_1) P(\omega_1) + P(\mathbf{x} | \omega_2) P(\omega_2) = 0.2016 + 0.0036 = 0.2052
$$&lt;/p&gt;
&lt;p&gt;则：&lt;/p&gt;
&lt;p&gt;$$
P(\omega_1 | \mathbf{x}) = \frac{0.2016}{0.2052} \approx 0.9825, \quad P(\omega_2 | \mathbf{x}) = \frac{0.0036}{0.2052} \approx 0.0175
$$&lt;/p&gt;
&lt;p&gt;这封邮件属于垃圾邮件的概率为98.25%，属于非垃圾邮件的概率为1.75%，因此可以判定这封邮件是垃圾邮件。&lt;/p&gt;
</content:encoded></item><item><title>[模式识别与机器学习] 多层感知机</title><link>https://alkaid114.github.io/posts/ml/mlp/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/ml/mlp/</guid><pubDate>Thu, 25 Jun 2026 19:27:00 GMT</pubDate><content:encoded>&lt;h2&gt;常见的损失函数&lt;/h2&gt;
&lt;h3&gt;均方误差损失函数&lt;/h3&gt;
&lt;p&gt;$$
J(\theta) = \frac{1}{2m} \sum_{i=1}^m | h_\theta(\mathbf{x}^{(i)}) - \mathbf{y}^{(i)} |^2
$$&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$h_\theta(\mathbf{x}^{(i)})$：模型预测值&lt;/li&gt;
&lt;li&gt;$\mathbf{y}^{(i)}$：真实值&lt;/li&gt;
&lt;li&gt;$m$：样本数量&lt;/li&gt;
&lt;li&gt;$\theta$：模型参数&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;L1范数损失函数&lt;/h3&gt;
&lt;p&gt;$$
J(\theta) = \frac{1}{m} \sum_{i=1}^m | h_\theta(\mathbf{x}^{(i)}) - \mathbf{y}^{(i)} |_1
$$&lt;/p&gt;
&lt;h3&gt;交叉熵损失&lt;/h3&gt;
&lt;h4&gt;二分类交叉熵损失函数BCE&lt;/h4&gt;
&lt;p&gt;定义$z=h_\theta(\mathbf{x})$，$z$是$\mathbf{x}$属于正类的评分&lt;/p&gt;
&lt;p&gt;使用sigmoid函数将评分映射到概率空间：&lt;/p&gt;
&lt;p&gt;$$
p = \sigma(z) = \frac{1}{1 + e^{-z}}
$$&lt;/p&gt;
&lt;p&gt;则$P(y=1|\mathbf{x}) = p$，$P(y=0|\mathbf{x}) = 1-p$&lt;/p&gt;
&lt;p&gt;所以：&lt;/p&gt;
&lt;p&gt;$$
P(y|\mathbf{x}) = \begin{cases}
\sigma(z), \quad y = 1 \
1 - \sigma(z), \quad y = 0
\end{cases}
$$&lt;/p&gt;
&lt;p&gt;因为$1-\sigma(z) = \sigma(-z)$，所以可以统一表示为：&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
P(y|\mathbf{x}) &amp;amp;= \sigma(zy + (1-y)(-z)) \
&amp;amp;= \sigma((2y-1)z)
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;则损失函数为：&lt;/p&gt;
&lt;p&gt;$$
J(\theta) = -\log P(y|\mathbf{x}) = -\log \sigma((2y-1)z)
$$&lt;/p&gt;
&lt;h4&gt;多分类交叉熵损失函数CE&lt;/h4&gt;
&lt;p&gt;Softmax函数将评分映射到概率空间：&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
p_i = \dfrac{e^{z_i}}{\sum_{j=1}^c e^{z_j}}
\end{aligned}
$$&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$c$：类别数&lt;/li&gt;
&lt;li&gt;$z_i$：样本属于第$i$类的评分&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;实际上为了数值稳定性，通常使用$\log \text{softmax}$来计算交叉熵损失，即：&lt;/p&gt;
&lt;p&gt;$$
J(\theta) = -\log p_y = -\log \frac{e^{z_y}}{\sum_{j=1}^c e^{z_j}} = -z_y + \log \sum_{j=1}^c e^{z_j} \qquad \text{第y类的损失}
$$&lt;/p&gt;
&lt;h2&gt;最大均值差异MMD&lt;/h2&gt;
&lt;p&gt;通过将样本映射到高维特征空间，计算不同分布的均值差异来衡量分布之间的差异。&lt;/p&gt;
&lt;p&gt;$$
\text{MMD}^2(p, q) = \sup_{|f| \leq 1} \left( \mathbb{E}&lt;em&gt;{x \sim p}[f(x)] - \mathbb{E}&lt;/em&gt;{y \sim q}[f(y)] \right)
$$&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$p$：分布$p$的样本&lt;/li&gt;
&lt;li&gt;$q$：分布$q$的样本&lt;/li&gt;
&lt;li&gt;$f$：在特征空间中的函数，满足$|f| \leq 1$，通常使用核函数来定义特征空间&lt;/li&gt;
&lt;li&gt;$\mathbb{E}$：期望操作，表示对样本的平均值&lt;/li&gt;
&lt;li&gt;sup：上确界，表示在所有满足条件的函数中取最大的值&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>[模式识别与机器学习] 非监督学习</title><link>https://alkaid114.github.io/posts/ml/unsupervised/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/ml/unsupervised/</guid><pubDate>Thu, 18 Jun 2026 20:43:00 GMT</pubDate><content:encoded>&lt;h2&gt;分类和聚类&lt;/h2&gt;
&lt;h3&gt;分类&lt;/h3&gt;
&lt;p&gt;给定样本和类别标签，确定决策函数用于分类，属于监督学习&lt;/p&gt;
&lt;h3&gt;聚类&lt;/h3&gt;
&lt;p&gt;只给定样本，根据样本之间的相似性将样本分组，形成簇，属于非监督学习&lt;/p&gt;
&lt;h2&gt;聚类准则函数&lt;/h2&gt;
&lt;p&gt;将样本分成$c$个子集$D_1, \cdots, D_c$, $n_i$为第$i$个子集中的样本数，$\mathbf{m_i}$为第$i$个子集的样本均值&lt;/p&gt;
&lt;p&gt;$$
\mathbf{m_i} = \frac{1}{n_i} \sum_{\mathbf{x} \in D_i} \mathbf{x}
$$&lt;/p&gt;
&lt;h3&gt;误差平方和准则&lt;/h3&gt;
&lt;p&gt;$$
J_e = \sum_{i=1}^c \sum_{\mathbf{x} \in D_i} |\mathbf{x} - \mathbf{m_i}|^2
$$&lt;/p&gt;
&lt;h2&gt;散布矩阵&lt;/h2&gt;
&lt;h3&gt;类内散布矩阵&lt;/h3&gt;
&lt;p&gt;$$
\mathbf{S_w} = \sum_{i=1}^c \sum_{\mathbf{x} \in D_i} (\mathbf{x} - \mathbf{m_i})(\mathbf{x} - \mathbf{m_i})^T
$$&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;就是误差平方和准则的矩阵形式&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;反映了各个子集的样本与其均值之间的差异，衡量了各个子集内部的紧密程度&lt;/p&gt;
&lt;h3&gt;类间散布矩阵&lt;/h3&gt;
&lt;p&gt;$$
\mathbf{S_B} = \sum_{i=1}^c n_i (\mathbf{m_i} - \mathbf{m})(\mathbf{m_i} - \mathbf{m})^T
$$&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$\mathbf{m}$为所有样本的均值&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;反映了各个子集的均值与整体均值之间的差异，衡量了各个子集之间的分离程度&lt;/p&gt;
&lt;h3&gt;总体散布矩阵&lt;/h3&gt;
&lt;p&gt;$$
\mathbf{S_T} = \sum_{i=1}^c \sum_{\mathbf{x} \in D_i} (\mathbf{x} - \mathbf{m})(\mathbf{x} - \mathbf{m})^T = S_w + S_B
$$&lt;/p&gt;
&lt;p&gt;反映了所有样本的分散程度，衡量了所有样本之间的差异&lt;/p&gt;
&lt;h2&gt;散布准则&lt;/h2&gt;
&lt;p&gt;基于行列式的散布准则：&lt;/p&gt;
&lt;p&gt;$$
J_d = |\mathbf{S_w}|
$$&lt;/p&gt;
&lt;p&gt;基于不变量的散布准则：&lt;/p&gt;
&lt;p&gt;$$
J_f = \text{tr}(\mathbf{S_T^{-1}}\mathbf{S_w})
$$&lt;/p&gt;
&lt;h2&gt;准则函数的优化&lt;/h2&gt;
&lt;h3&gt;穷举法优化&lt;/h3&gt;
&lt;p&gt;对于每个样本，尝试将其分配到不同的子集中，计算准则函数的值，选择使准则函数最小的分配方式，NP问题，不现实&lt;/p&gt;
&lt;h3&gt;迭代最优化&lt;/h3&gt;
&lt;p&gt;随机设置初始聚类，计算将样本$\mathbf{x}$从子集$D_i$移动到子集$D_j$后的准则函数值是否减小，如果减小则进行移动，直到没有样本可以移动为止&lt;/p&gt;
&lt;h2&gt;层次聚类&lt;/h2&gt;
&lt;h3&gt;凝聚层次聚类&lt;/h3&gt;
&lt;p&gt;初始每个样本作为一类，计算&lt;strong&gt;距离&lt;/strong&gt;，合并距离最近的两类，直到达到要求的类数为止&lt;/p&gt;
&lt;h3&gt;距离&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;两类最近的样本的距离最小&lt;/li&gt;
&lt;li&gt;两类的中心的距离最小&lt;/li&gt;
&lt;li&gt;如何定义距离(欧氏距离、曼哈顿距离等)&lt;/li&gt;
&lt;li&gt;如何定义类的中心(均值、质心等)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;k-均值聚类(K-means)&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;随机选择$k$个样本作为初始聚类中心&lt;/li&gt;
&lt;li&gt;将每个样本分配到距离最近的聚类中心所在的子集中&lt;/li&gt;
&lt;li&gt;重新计算每个子集内所有点的均值作为新的聚类中心&lt;/li&gt;
&lt;li&gt;重复步骤2和3，直到聚类中心不再发生变化或达到最大迭代次数为止&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;可看作是对&lt;strong&gt;平方误差准则&lt;/strong&gt;的&lt;strong&gt;贪心搜索&lt;/strong&gt;算法&lt;/p&gt;
&lt;p&gt;聚类结果受初始聚类中心的选择影响较大，可能会陷入局部最优解&lt;/p&gt;
&lt;h2&gt;高斯混合模型(GMM)&lt;/h2&gt;
&lt;p&gt;一个复杂的概率密度分布函数可以由多个简单的密度函数线性组合而成：&lt;/p&gt;
&lt;p&gt;$$
p(\mathbf{x}|\theta) = \sum_{i=1}^M a_i p_i(\mathbf{x}|\theta_i) \qquad \sum_{i=1}^M a_i = 1, a_i \geq 0
$$&lt;/p&gt;
&lt;p&gt;最常用的是GMM:&lt;/p&gt;
&lt;p&gt;$$
p(\mathbf{x}) = \sum_{i=1}^M a_i N(\mathbf{x};\mathbf{\mu_i}, \mathbf{\Sigma_i}) \qquad \sum_{i=1}^M a_i = 1
$$&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$\mu_i$为第$i$个高斯函数的均值（中心位置）&lt;/li&gt;
&lt;li&gt;$\Sigma_i$为第$i$个高斯函数的协方差矩阵（控制形状和方向）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;GMM能得到每个样本属于每个子集的概率，适用于样本分布不均匀的情况，可用于软聚类，输出属于哪类的可能性，而非硬聚类的类别标签&lt;/p&gt;
&lt;h2&gt;期望最大化算法(EM)&lt;/h2&gt;
&lt;h3&gt;E-Step求期望&lt;/h3&gt;
&lt;p&gt;根据先验随机初始化模型参数$\theta = {a_k, \mathbf{\mu_k}, \mathbf{\Sigma_k}}$&lt;/p&gt;
&lt;p&gt;用当前参数计算每个样本$\mathbf{x_i}$由每个高斯分量$k$生成的&lt;strong&gt;后验概率&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;$$
\gamma_{ik} = \frac{a_k N(\mathbf{x_i};\mathbf{\mu_k}, \mathbf{\Sigma_k})}{\sum_{j=1}^M a_j N(\mathbf{x_i};\mathbf{\mu_j}, \mathbf{\Sigma_j})}
$$&lt;/p&gt;
&lt;h3&gt;M-Step求最大化&lt;/h3&gt;
&lt;p&gt;根据E-Step计算的后验概率，重新估计参数：&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
\text{新权重} \quad a_k &amp;amp;= \frac{1}{N} \sum_{i=1}^N \gamma_{ik} \[1.5em]
\text{新均值} \quad \mathbf{\mu_k} &amp;amp;= \frac{\sum_{i=1}^N \gamma_{ik} \mathbf{x_i}}{\sum_{i=1}^N \gamma_{ik}} \[1.5em]
\text{新协方差矩阵} \quad \mathbf{\Sigma_k} &amp;amp;= \frac{\sum_{i=1}^N \gamma_{ik} (\mathbf{x_i} - \mathbf{\mu_k})(\mathbf{x_i} - \mathbf{\mu_k})^T}{\sum_{i=1}^N \gamma_{ik}}
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;得到新参数后重复E-Step和M-Step，直到参数收敛为止&lt;/p&gt;
</content:encoded></item><item><title>[模式识别与机器学习] 特征提取</title><link>https://alkaid114.github.io/posts/ml/feature_extraction/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/ml/feature_extraction/</guid><pubDate>Thu, 18 Jun 2026 11:58:00 GMT</pubDate><content:encoded>&lt;h2&gt;特征选择&lt;/h2&gt;
&lt;h3&gt;单变量选择&lt;/h3&gt;
&lt;p&gt;独立计算每个特征向量的得分，选择得分最高的m个特征&lt;/p&gt;
&lt;p&gt;缺点：不能捕捉特征之间的相关性&lt;/p&gt;
&lt;h3&gt;搜索法&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;前向选择：从空特征集开始，每次添加一个特征，直到达到预定数量或性能不再提升&lt;/li&gt;
&lt;li&gt;后向消除：从全特征集开始，每次删除一个特征，直到达到预定数量或性能不再提升&lt;/li&gt;
&lt;li&gt;双向搜索：结合前向选择和后向消除&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;嵌入式方法&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;SVM-RFE(递归特征消除)：训练SVM模型，根据权重大小递归地消除特征(得到的支持向量就是重要的特征)&lt;/li&gt;
&lt;li&gt;L1正则化(Lasso回归)：通过引入L1正则项，使得一些特征的权重变为零，从而实现特征选择&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;相关性评价&lt;/h2&gt;
&lt;h3&gt;熵(信息熵)&lt;/h3&gt;
&lt;p&gt;$$
H(X) = -\sum_{i=1}^{n} p(x_i) \log p(x_i)
$$&lt;/p&gt;
&lt;h3&gt;联合熵&lt;/h3&gt;
&lt;p&gt;$$
H(X,Y) = -\sum_{i=1}^{n} \sum_{j=1}^{m} p(x_i, y_j) \log p(x_i, y_j)
$$&lt;/p&gt;
&lt;h3&gt;Kullback-Leibler散度&lt;/h3&gt;
&lt;p&gt;$$
D_{KL}(P||Q) = \sum_{i=1}^{n} p(x_i) \log \frac{p(x_i)}{q(x_i)}
$$&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;非负性&lt;/li&gt;
&lt;li&gt;KL散度为0: PQ同分布&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;不对称&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Jensen-Shannon散度&lt;/h3&gt;
&lt;p&gt;$$
D_{JS}(P||Q) = \frac{1}{2} D_{KL}(P||M) + \frac{1}{2} D_{KL}(Q||M) \[1em]
M = \frac{1}{2}(P + Q) \quad \text{两个分布的平均值}
$$&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;非负性&lt;/li&gt;
&lt;li&gt;JS散度为0: PQ同分布&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;对称&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;特征提取(线性方法)&lt;/h2&gt;
&lt;h3&gt;主成分分析(PCA)&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;别名：离散K-L变换，Hotelling变换&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;无监督学习&lt;/strong&gt;，寻找数据中方差最大的方向作为新的特征轴，实现降维。&lt;/p&gt;
&lt;h4&gt;核心思想&lt;/h4&gt;
&lt;p&gt;将 $d$ 维数据投影到 $k$ 维子空间 ($k &amp;lt; d$)，使得投影后的数据方差最大化（或重构误差最小化）。&lt;/p&gt;
&lt;h4&gt;数学推导&lt;/h4&gt;
&lt;p&gt;给定中心化后的数据矩阵 $\mathbf{X} \in \mathbb{R}^{n \times d}$（每行为一个样本，已减去均值），协方差矩阵为：&lt;/p&gt;
&lt;p&gt;$$
\mathbf{\Sigma} = \frac{1}{n} \mathbf{X}^T \mathbf{X}
$$&lt;/p&gt;
&lt;p&gt;寻找投影方向 $\mathbf{w}$，使得投影后方差最大：&lt;/p&gt;
&lt;p&gt;$$
\max_{\mathbf{w}} \mathbf{w}^T \mathbf{\Sigma} \mathbf{w} \quad \text{s.t.} \quad |\mathbf{w}| = 1
$$&lt;/p&gt;
&lt;p&gt;由拉格朗日乘子法得 $\mathbf{\Sigma} \mathbf{w} = \lambda \mathbf{w}$，即 $\mathbf{w}$ 为 $\mathbf{\Sigma}$ 的特征向量，$\lambda$ 为对应特征值。&lt;/p&gt;
&lt;h4&gt;算法步骤&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;对数据&lt;strong&gt;中心化&lt;/strong&gt;：$\mathbf{x}_i \leftarrow \mathbf{x}_i - \bar{\mathbf{x}}$&lt;/li&gt;
&lt;li&gt;计算协方差矩阵 $\mathbf{\Sigma}$&lt;/li&gt;
&lt;li&gt;对 $\mathbf{\Sigma}$ 进行特征值分解，得到特征值 $\lambda_1 \geq \lambda_2 \geq \cdots \geq \lambda_d$ 及对应特征向量&lt;/li&gt;
&lt;li&gt;取前 $k$ 个最大特征值对应的特征向量构成投影矩阵 $\mathbf{W} \in \mathbb{R}^{d \times k}$&lt;/li&gt;
&lt;li&gt;得到降维后数据：$\mathbf{Z} = \mathbf{X} \mathbf{W}$&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;方差解释率&lt;/h4&gt;
&lt;p&gt;第 $i$ 个主成分的方差解释率为 $\lambda_i / \sum_{j=1}^d \lambda_j$，前 $k$ 个主成分的累积方差解释率为 $\sum_{i=1}^k \lambda_i / \sum_{j=1}^d \lambda_j$，常以此选择 $k$。&lt;/p&gt;
&lt;h4&gt;SVD 实现&lt;/h4&gt;
&lt;p&gt;实际中通过对 $\mathbf{X}$ 进行 SVD 分解 $\mathbf{X} = \mathbf{U} \mathbf{\Sigma} \mathbf{V}^T$ 实现，$\mathbf{V}$ 的列即为主成分方向，计算更稳定。&lt;/p&gt;
&lt;h4&gt;性质与局限&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;无监督，不使用标签信息&lt;/li&gt;
&lt;li&gt;假设数据分布为高斯分布&lt;/li&gt;
&lt;li&gt;对离群点敏感&lt;/li&gt;
&lt;li&gt;仅能捕获线性结构&lt;/li&gt;
&lt;li&gt;主成分方向通常是&lt;strong&gt;不可解释&lt;/strong&gt;的（每个主成分是所有原始特征的线性组合）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;线性判别分析(LDA/FDA)&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;别名：Fisher判别分析(FDA)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;有监督学习&lt;/strong&gt;，寻找能够最大化类间散度与最小化类内散度的线性组合，以保留类别可分性。&lt;/p&gt;
&lt;h4&gt;核心思想&lt;/h4&gt;
&lt;p&gt;与 PCA 最大化整体方差不同，LDA 利用标签信息，找到使&lt;strong&gt;类间距离最大、类内距离最小&lt;/strong&gt;的投影方向。&lt;/p&gt;
&lt;h4&gt;散度矩阵&lt;/h4&gt;
&lt;p&gt;给定 $c$ 类数据，第 $i$ 类样本集 $D_i$，样本数 $n_i$，均值 $\mathbf{m}_i$，全局均值 $\mathbf{m}$：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;类内散度矩阵&lt;/strong&gt;（反映类内紧密程度）：&lt;/p&gt;
&lt;p&gt;$$
\mathbf{S}&lt;em&gt;w = \sum&lt;/em&gt;{i=1}^c \sum_{\mathbf{x} \in D_i} (\mathbf{x} - \mathbf{m}_i)(\mathbf{x} - \mathbf{m}_i)^T
$$&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;类间散度矩阵&lt;/strong&gt;（反映类间分离程度）：&lt;/p&gt;
&lt;p&gt;$$
\mathbf{S}&lt;em&gt;b = \sum&lt;/em&gt;{i=1}^c n_i (\mathbf{m}_i - \mathbf{m})(\mathbf{m}_i - \mathbf{m})^T
$$&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;总体散度矩阵&lt;/strong&gt;：$\mathbf{S}_t = \mathbf{S}_w + \mathbf{S}_b$&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Fisher 准则&lt;/h4&gt;
&lt;p&gt;寻找投影方向 $\mathbf{w}$，最大化 Fisher 准则：&lt;/p&gt;
&lt;p&gt;$$
J(\mathbf{w}) = \frac{\mathbf{w}^T \mathbf{S}_b \mathbf{w}}{\mathbf{w}^T \mathbf{S}_w \mathbf{w}}
$$&lt;/p&gt;
&lt;p&gt;等价于求解广义特征值问题：&lt;/p&gt;
&lt;p&gt;$$
\mathbf{S}_b \mathbf{w} = \lambda \mathbf{S}_w \mathbf{w}
$$&lt;/p&gt;
&lt;p&gt;投影方向 $\mathbf{w}$ 为 $\mathbf{S}_w^{-1} \mathbf{S}_b$ 的&lt;strong&gt;最大特征值对应的特征向量&lt;/strong&gt;。&lt;/p&gt;
&lt;h4&gt;算法步骤&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;计算每类均值 $\mathbf{m}_i$ 和全局均值 $\mathbf{m}$&lt;/li&gt;
&lt;li&gt;计算 $\mathbf{S}_w$ 和 $\mathbf{S}_b$&lt;/li&gt;
&lt;li&gt;求解 $\mathbf{S}_w^{-1} \mathbf{S}_b$ 的特征值问题&lt;/li&gt;
&lt;li&gt;取前 $k$ 个最大特征值对应的特征向量构成投影矩阵 $\mathbf{W}$&lt;/li&gt;
&lt;li&gt;得到降维后数据：$\mathbf{Z} = \mathbf{X} \mathbf{W}$&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;降维上限&lt;/h4&gt;
&lt;p&gt;$\mathbf{S}_b$ 的秩最多为 $c-1$，因此 LDA 最多将数据降至 &lt;strong&gt;$c-1$ 维&lt;/strong&gt;，与原始维度无关。&lt;/p&gt;
&lt;h4&gt;局限&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;小样本问题&lt;/strong&gt;：样本数小于特征数时 $\mathbf{S}_w$ 奇异，不可逆&lt;/li&gt;
&lt;li&gt;假设各类的&lt;strong&gt;协方差矩阵相同&lt;/strong&gt;（类内分布相同）&lt;/li&gt;
&lt;li&gt;对非高斯分布数据效果较差&lt;/li&gt;
&lt;li&gt;降维维度受类别数限制&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;PCA vs LDA&lt;/h4&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;特性&lt;/th&gt;
&lt;th&gt;PCA&lt;/th&gt;
&lt;th&gt;LDA&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;监督性&lt;/td&gt;
&lt;td&gt;无监督&lt;/td&gt;
&lt;td&gt;有监督&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;目标&lt;/td&gt;
&lt;td&gt;最大化方差&lt;/td&gt;
&lt;td&gt;最大化类间/类内散度比&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;利用标签&lt;/td&gt;
&lt;td&gt;否&lt;/td&gt;
&lt;td&gt;是&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;降维上限&lt;/td&gt;
&lt;td&gt;$d$&lt;/td&gt;
&lt;td&gt;$c-1$&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;适用场景&lt;/td&gt;
&lt;td&gt;数据压缩、可视化&lt;/td&gt;
&lt;td&gt;分类预处理、特征提取&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;特征提取(非线性方法)&lt;/h2&gt;
&lt;h3&gt;流形学习&lt;/h3&gt;
&lt;p&gt;假设数据在低维流形上分布，寻找一个映射将数据从高维空间映射到低维空间，同时保持局部结构&lt;/p&gt;
&lt;h3&gt;核特征提取&lt;/h3&gt;
&lt;p&gt;通过核函数将数据映射到高维特征空间，在高维空间中进行PCA&lt;/p&gt;
</content:encoded></item><item><title>[模式识别与机器学习] 非线性分类器</title><link>https://alkaid114.github.io/posts/ml/nonlinear_classifier/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/ml/nonlinear_classifier/</guid><pubDate>Wed, 17 Jun 2026 17:33:00 GMT</pubDate><content:encoded>&lt;h2&gt;距离函数&lt;/h2&gt;
&lt;h3&gt;欧氏距离&lt;/h3&gt;
&lt;p&gt;$$
d(\mathbf{x}, \mathbf{y}) = \sqrt{\sum_{i=1}^n (x_i - y_i)^2}
$$&lt;/p&gt;
&lt;h3&gt;曼哈顿距离&lt;/h3&gt;
&lt;p&gt;$$
d(\mathbf{x}, \mathbf{y}) = \sum_{i=1}^n |x_i - y_i|
$$&lt;/p&gt;
&lt;h3&gt;明氏距离&lt;/h3&gt;
&lt;p&gt;$$
d(\mathbf{x}, \mathbf{y}) = \left( \sum_{i=1}^n |x_i - y_i|^p \right)^{1/p}
$$&lt;/p&gt;
&lt;h3&gt;马氏距离&lt;/h3&gt;
&lt;p&gt;$$
d(\mathbf{x}, \mathbf{y}) = \sqrt{(\mathbf{x} - \mathbf{y})^T \mathbf{\Sigma}^{-1} (\mathbf{x} - \mathbf{y})}
$$&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$\mathbf{\Sigma}$：协方差矩阵，反映数据的分布和相关性&lt;/li&gt;
&lt;li&gt;$\mathbf{\Sigma}=\mathbf{I}$ 时，马氏距离退化为欧氏距离&lt;/li&gt;
&lt;li&gt;Cholesky分解：$\mathbf{\Sigma} = \mathbf{L}\mathbf{L}^T$，$\mathbf{L}^{-1}\mathbf{x}$ 的欧氏距离等价于 $\mathbf{x}$ 的马氏距离&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;海明距离&lt;/h3&gt;
&lt;p&gt;$$
d(\mathbf{x}, \mathbf{y}) = \sum_{i=1}^n \delta(x_i, y_i)
$$&lt;/p&gt;
&lt;p&gt;其中 $\delta(x_i, y_i)$ 是一个指示函数，当 $x_i \neq y_i$ 时为 1，否则为 0。&lt;/p&gt;
&lt;h3&gt;角度相似函数&lt;/h3&gt;
&lt;p&gt;$$
d(\mathbf{x}, \mathbf{y}) = \frac{\mathbf{x}^T\mathbf{y}}{|\mathbf{x}| |\mathbf{y}|}
$$&lt;/p&gt;
&lt;h2&gt;最近邻分类器&lt;/h2&gt;
&lt;h3&gt;k-最近邻算法&lt;/h3&gt;
&lt;p&gt;对于一个新的输入样本，找到训练集中距离最近的k个样本，根据这k个样本的类别进行投票，决定新样本的类别。&lt;/p&gt;
&lt;p&gt;$k=1$ 时，称为最近邻分类器，边界复杂易受噪声影响。$k$较大时，边界更平滑但可能丢失细节。&lt;/p&gt;
&lt;h4&gt;Voronoi网格&lt;/h4&gt;
&lt;p&gt;将输入空间划分为若干个区域，每个区域对应一个训练样本，区域内的所有点都被分类为该样本的类别。Voronoi网格的边界就是最近邻分类器的决策边界。&lt;/p&gt;
&lt;h2&gt;多层感知机(MLP)&lt;/h2&gt;
&lt;h3&gt;反向传播算法&lt;/h3&gt;
&lt;p&gt;设输入层有 $n$ 个神经元，隐藏层有 $h$ 个神经元，输出层有 $m$ 个神经元。&lt;/p&gt;
&lt;p&gt;我们需要得到第$i$层的梯度$\frac{\partial J}{\partial \mathbf{W}^{(i)}}$，其中 $J$ 是损失，$\mathbf{W}^{(i)}$ 是第$i$层的权重。&lt;/p&gt;
&lt;p&gt;根据链式法则：&lt;/p&gt;
&lt;p&gt;$$
\frac{\partial J}{\partial \mathbf{W}^{(i)}} = \frac{\partial J}{\partial \mathbf{z}^{(i)}} \cdot \frac{\partial \mathbf{z}^{(i)}}{\partial \mathbf{W}^{(i)}}
$$&lt;/p&gt;
&lt;p&gt;$\mathbf{z}^{(i)}$ 是第$i$层的线性输出，$\mathbf{z}^{(i)} = \mathbf{W}^{(i)} \mathbf{a}^{(i-1)} + \mathbf{b}^{(i)}$，其中 $\mathbf{a}^{(i-1)}$ 是第$i-1$层的激活输出（也是第$i$层的输入）。&lt;/p&gt;
&lt;p&gt;所以：&lt;/p&gt;
&lt;p&gt;$$
\frac{\partial \mathbf{z}^{(i)}}{\partial \mathbf{W}^{(i)}} = \mathbf{a}^{(i-1)}
$$&lt;/p&gt;
&lt;p&gt;则：&lt;/p&gt;
&lt;p&gt;$$
\frac{\partial J}{\partial \mathbf{W}^{(i)}} = \frac{\partial J}{\partial \mathbf{z}^{(i)}} \cdot \mathbf{a}^{(i-1)}
$$&lt;/p&gt;
&lt;p&gt;$\dfrac{\partial J}{\partial \mathbf{z}^{(i)}}$被称作第$i$层的局部误差&lt;/p&gt;
&lt;p&gt;若$i$是最后一层时，则$\frac{\partial J}{\partial \mathbf{z}^{(i)}}$ 可以直接计算；若$i$不是最后一层，则从最后一层开始，逐层向前计算$\frac{\partial J}{\partial \mathbf{z}^{(i)}}$，直到计算到第$i$层。&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
\frac{\partial J}{\partial \mathbf{z}^{(i-1)}} &amp;amp;= \frac{\partial J}{\partial \mathbf{z}^{(i)}} \cdot \frac{\partial \mathbf{z}^{(i)}}{\partial \mathbf{a}^{(i-1)}} \cdot \frac{\partial \mathbf{a}^{(i-1)}}{\partial \mathbf{z}^{(i-1)}} \
&amp;amp;= (\mathbf{W}^{(i)})^T  \cdot \frac{\partial J}{\partial \mathbf{z}^{(i)}} \cdot \sigma&apos;(\mathbf{z}^{(i-1)})
\end{aligned}
$$&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[!TIP]
$\dfrac{\partial \mathbf{a}^{(i-1)}}{\partial \mathbf{z}^{(i-1)}}$就是激活函数的导数&lt;/p&gt;
&lt;p&gt;$z^{(i)} = W^{(i)} a^{(i-1)} + b^{(i)}$，所以$\dfrac{\partial \mathbf{z}^{(i)}}{\partial \mathbf{a}^{(i-1)}} = W^{(i)}$&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;决策树&lt;/h2&gt;
&lt;p&gt;一直问&quot;是A还是B&quot;来缩小范围，叶节点就是答案。&lt;/p&gt;
&lt;h3&gt;信息增益(ID3)&lt;/h3&gt;
&lt;p&gt;选让分完后数据&lt;strong&gt;最不混乱&lt;/strong&gt;的那个特征来分类&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;熵&lt;/strong&gt; 衡量混乱程度（详见&lt;a href=&quot;/posts/feature_extraction/&quot;&gt;特征提取&lt;/a&gt;），数据集 $D$ 的熵：&lt;/p&gt;
&lt;p&gt;$$
H(D) = -\sum_{k} p_k \log_2 p_k
$$&lt;/p&gt;
&lt;p&gt;$p_k$ 是第 $k$ 类占的比例。熵越大越乱，全是同一类时熵=0。&lt;/p&gt;
&lt;p&gt;按特征 $A$ 的每个取值 $v$ 把数据分成若干子集 $D^v$，各子集的熵加权平均就是&lt;strong&gt;条件熵&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;$$
H(D|A) = \sum_{v} \frac{|D^v|}{|D|} H(D^v)
$$&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$|D|$：总样本数&lt;/li&gt;
&lt;li&gt;$|D^v|$：特征 $A=v$ 的样本子集的样本数&lt;/li&gt;
&lt;li&gt;$\dfrac{|D^v|}{|D|}$：$A=v$ 的样本占全部的比重&lt;/li&gt;
&lt;li&gt;$H(D^v)$：样本子集自己的熵&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;信息增益&lt;/strong&gt; = 划分前熵 - 划分后熵，越大说明这个特征分得越好：&lt;/p&gt;
&lt;p&gt;$$
\text{Gain}(D, A) = H(D) - H(D|A)
$$&lt;/p&gt;
&lt;h3&gt;增益率(C4.5)&lt;/h3&gt;
&lt;p&gt;ID3的缺点：过于偏好取值多的特征（比如&quot;编号/ID&quot;这种每个样本值都不同，增益直接拉满但不泛化）。C4.5引入&lt;strong&gt;固有值&lt;/strong&gt;来惩罚取值多的特征，增益除以它进行校正：&lt;/p&gt;
&lt;p&gt;$$
\text{IV}(A) = -\sum_{v} \frac{|D^v|}{|D|} \log_2 \frac{|D^v|}{|D|} \[1em]
\text{GainRatio}(D, A) = \frac{\text{Gain}(D, A)}{\text{IV}(A)}
$$&lt;/p&gt;
&lt;h3&gt;基尼指数(CART)&lt;/h3&gt;
&lt;p&gt;CART用基尼值代替熵$H(D)$，计算更简单：&lt;/p&gt;
&lt;p&gt;$$
\text{Gini}(D) = 1 - \sum_k p_k^2 \[1em]
\text{Gini}{(D|A)} = \sum_v \frac{|D^v|}{|D|} \text{Gini}(D^v)
$$&lt;/p&gt;
&lt;p&gt;纯的类基尼=0（全是同一类），最乱时接近0.5。&lt;/p&gt;
&lt;h2&gt;核方法&lt;/h2&gt;
&lt;p&gt;根据线性分类器的判别函数(非增广形式)：&lt;/p&gt;
&lt;p&gt;$$
g(\mathbf{x}) = \mathbf{w}^T\mathbf{x} + w_0
$$&lt;/p&gt;
&lt;p&gt;又根据感知器算法和SVM算法的权重更新规则：&lt;/p&gt;
&lt;p&gt;$$
w_0 \leftarrow w_0 + \eta y_i
$$&lt;/p&gt;
&lt;p&gt;$$
\mathbf{w} \leftarrow \mathbf{w} + \eta y_i \mathbf{x}_i
$$&lt;/p&gt;
&lt;p&gt;可以发现最优解$\mathbf{w}$和$w_0$可以表示为训练样本的线性组合：&lt;/p&gt;
&lt;p&gt;$$
\mathbf{w} = \sum_{i=1}^N \alpha_i \mathbf{x}_i
$$&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;SVM时大多数$\alpha_i=0$，只有支持向量对应的$\alpha_i$非零&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;将$\mathbf{w}$代入判别函数：&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
g(\mathbf{x}) &amp;amp;= \left (\sum_{i=1}^N \alpha_i \mathbf{x}&lt;em&gt;i \right )^T \mathbf{x} + w_0 \[1em]
&amp;amp;= \sum&lt;/em&gt;{i=1}^N \alpha_i(\mathbf{x}^T \mathbf{x}_i) + w_0
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;因此只要得到训练样本之间的内积$\mathbf{x}^T \mathbf{x}_i$，就可以计算判别函数的值。&lt;/p&gt;
&lt;p&gt;为了处理非线性可分问题，可以将输入空间映射到一个高维特征空间：&lt;/p&gt;
&lt;p&gt;$$
\phi: \mathbb{R}^n \rightarrow \mathbb{R}^m
$$&lt;/p&gt;
&lt;p&gt;但是这个映射的计算非常昂贵。核方法的核心思想是引入一个核函数$K(\mathbf{x}, \mathbf{y})$，直接计算输入空间中的内积在特征空间中的值：&lt;/p&gt;
&lt;p&gt;$$
K(\mathbf{x}, \mathbf{y}) = \phi(\mathbf{x})^T \phi(\mathbf{y})
$$&lt;/p&gt;
&lt;p&gt;常用的核函数包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;线性核：$K(\mathbf{x}, \mathbf{y}) = \mathbf{x}^T \mathbf{y}$&lt;/li&gt;
&lt;li&gt;多项式核(Polynomial Kernel)：$K(\mathbf{x}, \mathbf{y}) = (\mathbf{x}^T \mathbf{y} + c)^d$&lt;/li&gt;
&lt;li&gt;径向基函数核(Gaussian RBF)：$K(\mathbf{x}, \mathbf{y}) = \exp(-\gamma |\mathbf{x} - \mathbf{y}|^2)$&lt;/li&gt;
&lt;li&gt;Sigmoid核：$K(\mathbf{x}, \mathbf{y}) = \tanh(\kappa \mathbf{x}^T \mathbf{y} + c)$&lt;/li&gt;
&lt;li&gt;Inverse Multiquadratic核：$K(\mathbf{x}, \mathbf{y}) = \frac{1}{\sqrt{|\mathbf{x} - \mathbf{y}|^2 + c^2}}$&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;[!TIP]
$\tanh(x) = \dfrac{e^x - e^{-x}}{e^x + e^{-x}}$&lt;/p&gt;
&lt;p&gt;当输入较大时，输出接近1；当输入较小时，输出接近-1&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;使用核函数后，判别函数可以表示为：&lt;/p&gt;
&lt;p&gt;$$
g(\mathbf{x}) = \sum_{i=1}^N \alpha_i K(\mathbf{x}, \mathbf{x}_i) + w_0
$$&lt;/p&gt;
&lt;h3&gt;基于核方法的Logistic回归&lt;/h3&gt;
&lt;p&gt;$$
\begin{aligned}
P(G=k|\mathbf{x}) &amp;amp;= \frac{\exp(\beta_{k0} + \sum_{i=1}^N \alpha_{ki} K(\mathbf{x}&lt;em&gt;i, \mathbf{x}))}{1 + \sum&lt;/em&gt;{l=1}^{K-1} \exp(\beta_{l0} + \sum_{i=1}^N \alpha_{li} K(\mathbf{x}&lt;em&gt;i, \mathbf{x}))} \[1em]
P(G=K|\mathbf{x}) &amp;amp;= \frac{1}{1 + \sum&lt;/em&gt;{l=1}^{K-1} \exp(\beta_{l0} + \sum_{i=1}^N \alpha_{li} K(\mathbf{x}_i, \mathbf{x}))}
\end{aligned}
$$&lt;/p&gt;
</content:encoded></item><item><title>[计算机视觉] 斑点检测</title><link>https://alkaid114.github.io/posts/cv/blob_detect/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/cv/blob_detect/</guid><pubDate>Sat, 06 Jun 2026 11:15:00 GMT</pubDate><content:encoded>&lt;h2&gt;高斯拉普拉斯算子(LoG Laplacian of Gaussian)&lt;/h2&gt;
&lt;p&gt;核心思想：先用高斯模糊去除噪声，再用拉普拉斯算子计算二阶导数&lt;/p&gt;
&lt;p&gt;$$
\text{LoG}(x, y) = \nabla^2 (G_{\sigma}(x, y) * I(x, y))
$$&lt;/p&gt;
&lt;p&gt;整个算子可以表示成一个卷积核：&lt;/p&gt;
&lt;p&gt;$$
\text{LoG}(x, y) = \frac{1}{\pi \sigma^4} \left(1 - \frac{x^2 + y^2}{2\sigma^2}\right) e^{-\frac{x^2 + y^2}{2\sigma^2}}
$$&lt;/p&gt;
&lt;p&gt;当这个卷积核与图像卷积时，输出结果为绝对值较大的点即为斑点&lt;/p&gt;
&lt;h3&gt;尺度归一化&lt;/h3&gt;
&lt;p&gt;因为斑点的大小不确定，所以需要对不同尺度的斑点进行归一化处理，通过数学推导发现：&lt;/p&gt;
&lt;p&gt;$$
\nabla^2 G \propto \frac{1}{\sigma^2}
$$&lt;/p&gt;
&lt;p&gt;所以在计算斑点响应时需要乘以$\sigma^2$来进行尺度归一化：&lt;/p&gt;
&lt;p&gt;$$
\text{LoG}(x, y) = \sigma^2 \nabla^2 (G_{\sigma}(x, y) * I(x, y))
$$&lt;/p&gt;
&lt;h2&gt;DoG差分高斯算子(Difference of Gaussian)&lt;/h2&gt;
&lt;p&gt;LoG计算压力较大，所以可以用两个不同$\sigma$的高斯模糊图像相减来近似LoG：&lt;/p&gt;
&lt;p&gt;$$
\text{DoG}(x, y) = G_{\sigma_1}(x, y) * I(x, y) - G_{\sigma_2}(x, y) * I(x, y)
$$&lt;/p&gt;
&lt;p&gt;SIFT算法就用的这个&lt;/p&gt;
</content:encoded></item><item><title>[计算机视觉] Harris哈里斯角点检测</title><link>https://alkaid114.github.io/posts/cv/harris/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/cv/harris/</guid><pubDate>Sat, 06 Jun 2026 10:36:00 GMT</pubDate><content:encoded>&lt;h2&gt;基本思想&lt;/h2&gt;
&lt;p&gt;想象一个小窗口在图像上滑动，可以分为三种情况：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;窗口在大面积像素值相近的平坦区域：无论怎么移动，窗口内的像素值变化都很小&lt;/li&gt;
&lt;li&gt;窗口在平直边缘上：沿着边缘方向移动，像素值变化很小；垂直于边缘方向移动，像素值变化很大&lt;/li&gt;
&lt;li&gt;窗口在角点上：无论怎么移动，窗口内的像素值变化都很大&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;所以我们只要找到无论怎么移动窗口，像素值变化都很大的点，也就是像素值变化量的最小值大于一个阈值的点，就可以认为它是一个角点&lt;/p&gt;
&lt;h2&gt;推导&lt;/h2&gt;
&lt;p&gt;假设窗口每次移动$(u, v)$，窗口内像素值的变化可以用平方差之和来表示为：&lt;/p&gt;
&lt;p&gt;$$
E(u, v) = \sum_{x, y} [I(x + u, y + v) - I(x, y)]^2
$$&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$I(x, y)$：图像在点$(x, y)$的像素值，后续简写为$I_x$和$I_y$&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;因为$u$和$v$很小，所以可以使用泰勒展开来近似$I(x + u, y + v)$：&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
I(x + u, y + v) &amp;amp;\approx I(x, y) + I_x \cdot u + I_y \cdot v \[1em]
&amp;amp;= I(x, y) + \begin{bmatrix}I_x &amp;amp; I_y\end{bmatrix} \begin{bmatrix}u \ v\end{bmatrix}
\end{aligned}
$$&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$I_x$和$I_y$：图像在点$(x, y)$的水平和垂直方向的梯度&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;所以：&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
E(u, v) &amp;amp;\approx \sum_{x, y} \left (\begin{bmatrix}I_x &amp;amp; I_y\end{bmatrix} \begin{bmatrix}u \ v\end{bmatrix}\right )^2
\[1em]
&amp;amp;= \sum_{x, y} \left(\begin{bmatrix}I_x &amp;amp; I_y\end{bmatrix} \begin{bmatrix}u \ v\end{bmatrix} \right )^T \left(\begin{bmatrix}I_x &amp;amp; I_y\end{bmatrix} \begin{bmatrix}u \ v\end{bmatrix} \right ) \[1em]
&amp;amp;= \sum_{x, y} \begin{bmatrix}u &amp;amp; v\end{bmatrix} \begin{bmatrix}I_x^2 &amp;amp; I_x I_y \ I_x I_y &amp;amp; I_y^2\end{bmatrix} \begin{bmatrix}u \ v\end{bmatrix} \[1em]
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;给中间矩阵取个名字：&lt;/p&gt;
&lt;p&gt;$$
H = \begin{bmatrix}I_x^2 &amp;amp; I_x I_y \ I_x I_y &amp;amp; I_y^2\end{bmatrix}
$$&lt;/p&gt;
&lt;p&gt;为了防止解出$u=v=0$的平凡解，所以设置约束$\Vert \mathbf{d}\Vert^2 = u^2 + v^2 = 1$，所以就转化为求解如下问题：&lt;/p&gt;
&lt;p&gt;$$
\underset{\Vert \mathbf{d} \Vert^2 = 1}{\text{min}} \quad \mathbf{d}^T H \mathbf{d}
$$&lt;/p&gt;
&lt;h3&gt;构造拉格朗日函数&lt;/h3&gt;
&lt;p&gt;$$
\begin{aligned}
\mathcal{L}(\mathbf{d}, \lambda) &amp;amp;= \mathbf{d}^T H \mathbf{d} - \lambda (\mathbf{d}^T \mathbf{d} - 1) \[1em]
&amp;amp;= u^2 H_{11} + 2 u v H_{12} + v^2 H_{22} - \lambda (u^2 + v^2 - 1)
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;对$u$求导并设置为零：&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
\frac{\partial \mathcal{L}}{\partial u} = 2 u H_{11} + 2 v H_{12} - 2 \lambda u &amp;amp;= 0 \[1em]
u H_{11} + v H_{12} &amp;amp;= \lambda u
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;对$v$求导并设置为零：&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
\frac{\partial \mathcal{L}}{\partial v} = 2 u H_{12} + 2 v H_{22} - 2 \lambda v &amp;amp;= 0 \[1em]
u H_{12} + v H_{22} &amp;amp;= \lambda v
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;得到方程组：&lt;/p&gt;
&lt;p&gt;$$
\begin{cases}
u H_{11} + v H_{12} = \lambda u \
u H_{12} + v H_{22} = \lambda v
\end{cases}
$$&lt;/p&gt;
&lt;p&gt;可以写成矩阵形式：&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
\begin{bmatrix}
H_{11} &amp;amp; H_{12} \
H_{12} &amp;amp; H_{22}
\end{bmatrix}
\begin{bmatrix}u \
v\end{bmatrix} &amp;amp;=
\lambda \begin{bmatrix}u \ v\end{bmatrix} \[1em]
H \mathbf{d} &amp;amp;= \lambda \mathbf{d}
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;后续步骤跟单应矩阵那块类似，先同左乘$d^T$，得到：&lt;/p&gt;
&lt;p&gt;$$
\mathbf{d}^T H \mathbf{d} = \lambda \mathbf{d}^T \mathbf{d} = \lambda \qquad (\text{约束}\Vert \mathbf{d} \Vert^2 = 1)
$$&lt;/p&gt;
&lt;p&gt;所以最小化$\mathbf{d}^T H \mathbf{d}$等价于最小化$\lambda$，如果这个最小特征值大于一个&lt;strong&gt;阈值&lt;/strong&gt;，就认为这个点是一个角点，但是这种方法需要计算特征值，比较麻烦，所以Harris提出了一个角点响应函数来避免计算特征值&lt;/p&gt;
&lt;h2&gt;角点响应函数&lt;/h2&gt;
&lt;p&gt;$$
R = \text{det}(H) - k \cdot \text{trace}(H)^2
$$&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$\lambda_1,\lambda_2$：$H$的两个特征值&lt;/li&gt;
&lt;li&gt;$\text{det}(H) = \lambda_1 \lambda_2$：特征值的乘积，表示窗口内像素值变化的程度&lt;/li&gt;
&lt;li&gt;$\text{trace}(H) = \lambda_1 + \lambda_2$：特征值的和，表示窗口内像素值变化的总量&lt;/li&gt;
&lt;li&gt;$k$：经验参数，通常取0.04到0.06之间&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;当处于角点，$\lambda_1$和$\lambda_2$都较大且相当，此时乘积会远大于和的平方，所以$R$为很大的正值；当处于边缘，$\lambda_1$和$\lambda_2$其中一个较大的另一个较小，此时乘积会小于和的平方，所以$R$为很小的负值；当平坦区域，$\lambda_1$和$\lambda_2$其中一个较大另一个较小，此时乘积和和的平方相差不大，所以$R$会接近于零&lt;/p&gt;
&lt;p&gt;$$
\begin{cases}
R \gg 0 &amp;amp; \text{角点} \
R \ll 0 &amp;amp; \text{边缘} \
R \approx 0 &amp;amp; \text{平坦区域}
\end{cases}
$$&lt;/p&gt;
</content:encoded></item><item><title>[计算机视觉] 霍夫变换</title><link>https://alkaid114.github.io/posts/cv/hough/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/cv/hough/</guid><pubDate>Sat, 06 Jun 2026 10:03:00 GMT</pubDate><content:encoded>&lt;p&gt;霍夫变换是一种「投票」方法，记录每条可能线上每个边缘点的投票，寻找投票数最多的线段，用于实现线段检测、圆形检测等&lt;/p&gt;
&lt;h2&gt;对线的参数化&lt;/h2&gt;
&lt;p&gt;常见的直线表示方式：&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
y = kx + b \quad \text{(斜率-截距形式)} \
Ax + By + C = 0 \quad \text{(一般式)} \
\frac{x}{a} + \frac{y}{b} = 1 \quad \text{(截距式)}
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;但它们都存在问题：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;斜率-截距形式在垂直线时斜率趋于无穷大，无法表示垂直线&lt;/li&gt;
&lt;li&gt;一般式存在无穷多解，无法唯一确定一条线&lt;/li&gt;
&lt;li&gt;截距式在垂直线时截距趋于无穷大，无法表示垂直线&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;所以霍夫变换使用极坐标形式(法线式)：&lt;/p&gt;
&lt;p&gt;$$
x \cos\theta + y \sin\theta = \rho
$$&lt;/p&gt;
&lt;h2&gt;参数空间&lt;/h2&gt;
&lt;p&gt;霍夫变换使用了参数空间的概念，平常我们用(x, y)来表示图像空间中的点，而在霍夫变换中，我们用(θ, ρ)来表示参数空间中的点，因此参数空间中的每个点(θ, ρ)都对应图像空间中的一条线段，而图像空间中的每个点(x, y)都对应参数空间中的一条曲线(正余弦波)&lt;/p&gt;
&lt;p&gt;当图像空间中有两个点时，它们在参数空间中对应的曲线会相交于一个点(θ, ρ)，这个点就代表了图像空间中通过这两个点的线段的参数，因此我们可以通过统计参数空间中每个点(θ, ρ)的投票数，来找到图像空间中出现频率最高的线段，而那个线段就是图像中最可能存在的线段&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;写程序时通常以1度为步长在[0, 180)范围内枚举θ，计算对应的ρ&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;霍夫圆变换&lt;/h2&gt;
&lt;p&gt;对于圆的参数化，使用圆心坐标和半径：&lt;/p&gt;
&lt;p&gt;$$
(x - a)^2 + (y - b)^2 = r^2
$$&lt;/p&gt;
&lt;p&gt;然后会发现圆方程在两个空间内是对应的：&lt;/p&gt;
&lt;p&gt;$$
(a - x)^2 + (b - y)^2 = r^2
$$&lt;/p&gt;
&lt;p&gt;调换一下位置即得到了参数空间内的形式(会发现r的大小是固定的，所以不用参与到参数空间内)，所以图像空间中的一个点在参数空间中对应一个圆，图像空间中的三个点在参数空间中就对应三个圆，这三个圆的交点就是图像空间中通过这三个点的圆的参数，因此我们可以通过统计参数空间中每个点(a, b)的投票数，来找到图像空间中出现频率最高的圆，而那个圆就是图像中最可能存在的圆&lt;/p&gt;
&lt;p&gt;但如果$r$未知，则需要在参数空间中增加一个维度来枚举$r$，这样就会增加计算复杂度，所以通常会使用霍夫梯度法&lt;/p&gt;
&lt;h2&gt;霍夫梯度法检测圆形&lt;/h2&gt;
&lt;p&gt;这个反而更好理解，因为都没参数空间什么事了&lt;/p&gt;
&lt;p&gt;步骤：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;对图像进行边缘检测，得到边缘点&lt;/li&gt;
&lt;li&gt;对每个边缘点，使用sobel算子计算其梯度方向(法线)，得到一个单位向量&lt;/li&gt;
&lt;li&gt;沿着梯度方向的反方向(因为圆心在边缘点的内侧)，以不同的半径$r$为步长，给经过的每一个点累加，每有一条线经过就+1&lt;/li&gt;
&lt;li&gt;累加值最大的点就是圆心，计算圆心和边缘点之间的距离就是半径&lt;/li&gt;
&lt;/ol&gt;
</content:encoded></item><item><title>[计算机视觉] 各类图像变换</title><link>https://alkaid114.github.io/posts/cv/transform/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/cv/transform/</guid><pubDate>Sat, 06 Jun 2026 09:34:00 GMT</pubDate><content:encoded>&lt;h2&gt;相似变换&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;形状保持不变&lt;/strong&gt;，只改变位置、大小和方向&lt;/p&gt;
&lt;p&gt;$$
H_\text{similarity} = \begin{bmatrix}s \cdot \cos\theta &amp;amp; -s \cdot \sin\theta &amp;amp; t_x \
s \cdot \sin\theta &amp;amp; s \cdot \cos\theta &amp;amp; t_y \
0 &amp;amp; 0 &amp;amp; 1
\end{bmatrix}
$$&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$s$：缩放因子$s &amp;gt; 0$&lt;/li&gt;
&lt;li&gt;$\theta$：旋转角度&lt;/li&gt;
&lt;li&gt;$(t_x, t_y)$：平移向量&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;相似变换有4个自由度：1+1+2&lt;/p&gt;
&lt;h2&gt;仿射变换&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;平行线保持不变&lt;/strong&gt;，但不保持形状，在相似变换的基础上增加了剪切操作&lt;/p&gt;
&lt;p&gt;$$
H_\text{affine} = \begin{bmatrix}a &amp;amp; b &amp;amp; t_x \
c &amp;amp; d &amp;amp; t_y \
0 &amp;amp; 0 &amp;amp; 1
\end{bmatrix}
$$&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$a, b, c, d$：线性变换矩阵的元素，包含缩放、旋转和剪切信息&lt;/li&gt;
&lt;li&gt;$(t_x, t_y)$：平移向量&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;当$a = d = s\cos\theta$且$b = -c = -s\sin\theta$时，仿射变换退化为相似变换&lt;/p&gt;
&lt;p&gt;仿射变换有6个自由度：4+2&lt;/p&gt;
&lt;h2&gt;单应变换/投影变换/透视变换&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;直线保持不变&lt;/strong&gt;，但不保持平行线，在仿射变换的基础上增加了透视效果&lt;/p&gt;
&lt;p&gt;$$
H_\text{homography} = \begin{bmatrix}h_{11} &amp;amp; h_{12} &amp;amp; h_{13} \
h_{21} &amp;amp; h_{22} &amp;amp; h_{23} \
h_{31} &amp;amp; h_{32} &amp;amp; h_{33}
\end{bmatrix}
$$&lt;/p&gt;
&lt;p&gt;通常将$h_{33}$归一化为1，所以单应变换有8个自由度：9-1&lt;/p&gt;
&lt;p&gt;当$h_{31} = h_{32} = 0$且$h_{33}$已归一化时，单应变换退化为仿射变换&lt;/p&gt;
&lt;h2&gt;最小二乘拟合求单应矩阵&lt;/h2&gt;
&lt;p&gt;现在我们有一对点$(x, y)$和$(x&apos;, y&apos;)$，以及单应矩阵$H$，满足：&lt;/p&gt;
&lt;p&gt;$$
\omega\begin{bmatrix}x&apos; \ y&apos; \ 1\end{bmatrix} = H \begin{bmatrix}x \ y \ 1\end{bmatrix}
$$&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;$\omega$是一个缩放因子，因为$h_{33}$不一定归一化为1&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;展开后得到：&lt;/p&gt;
&lt;p&gt;$$
\begin{cases}
\omega x&apos; = h_{11}x + h_{12}y + h_{13} \
\omega y&apos; = h_{21}x + h_{22}y + h_{23} \
\omega = h_{31}x + h_{32}y + h_{33}
\end{cases}
$$&lt;/p&gt;
&lt;p&gt;整理一下：&lt;/p&gt;
&lt;p&gt;$$
\begin{cases}
h_{11}x + h_{12}y + h_{13} - h_{31}xx&apos; - h_{32}yy&apos; - h_{33}x&apos; = 0 \
h_{21}x + h_{22}y + h_{23} - h_{31}xy&apos; - h_{32}yy&apos; - h_{33}y&apos; = 0
\end{cases}
$$&lt;/p&gt;
&lt;p&gt;可以写成矩阵形式了：&lt;/p&gt;
&lt;p&gt;$$
\begin{bmatrix}
x &amp;amp; y &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; -xx&apos; &amp;amp; -yx&apos; &amp;amp; -x&apos; \
0 &amp;amp; 0 &amp;amp; 0 &amp;amp; x &amp;amp; y &amp;amp; 1 &amp;amp; -xy&apos; &amp;amp; -yy&apos; &amp;amp; -y&apos;
\end{bmatrix}
\begin{bmatrix}h_{11} \ h_{12} \ h_{13} \ h_{21} \ h_{22} \ h_{23} \ h_{31} \ h_{32} \ h_{33}\end{bmatrix} = \mathbf{0}
$$&lt;/p&gt;
&lt;p&gt;由于单应矩阵有8个自由度，从上述矩阵可以看到一对点提供了两行约束，所以至少需要4对点才能求解单应矩阵&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;实际实现中通常使用更多的点来构建一个过约束的系统，然后通过最小二乘法来求解单应矩阵，以提高鲁棒性和精度&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;所以得到$n$对点后可以写出：&lt;/p&gt;
&lt;p&gt;$$
\mathbf{A} = \begin{bmatrix}
x_1 &amp;amp; y_1 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; -x_1x_1&apos; &amp;amp; -y_1x_1&apos; &amp;amp; -x_1&apos; \
0 &amp;amp; 0 &amp;amp; 0 &amp;amp; x_1 &amp;amp; y_1 &amp;amp; 1 &amp;amp; -x_1y_1&apos; &amp;amp; -y_1y_1&apos; &amp;amp; -y_1&apos; \
x_2 &amp;amp; y_2 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; -x_2x_2&apos; &amp;amp; -y_2x_2&apos; &amp;amp; -x_2&apos; \
0 &amp;amp; 0 &amp;amp; 0 &amp;amp; x_2 &amp;amp; y_2 &amp;amp; 1 &amp;amp; -x_2y_2&apos; &amp;amp; -y_2y_2&apos; &amp;amp; -y_2&apos; \
\vdots &amp;amp; \vdots &amp;amp; \vdots &amp;amp; \vdots &amp;amp; \vdots &amp;amp; \vdots &amp;amp; \vdots &amp;amp; \vdots &amp;amp; \vdots \
x_n &amp;amp; y_n &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; -x_nx_n&apos; &amp;amp; -y_nx_n&apos; &amp;amp; -x_n&apos; \
0 &amp;amp; 0 &amp;amp; 0 &amp;amp; x_n &amp;amp; y_n &amp;amp; 1 &amp;amp; -x_ny_n&apos; &amp;amp; -y_ny_n&apos; &amp;amp; -y_n&apos;
\end{bmatrix}
$$&lt;/p&gt;
&lt;p&gt;得到：&lt;/p&gt;
&lt;p&gt;$$
\mathbf{A} \mathbf{h} = \mathbf{0}
$$&lt;/p&gt;
&lt;p&gt;为避免解出$\mathbf{h} = \mathbf{0}$的平凡解，通常会添加约束条件$|\mathbf{h}| = 1$&lt;/p&gt;
&lt;h3&gt;将问题形式化&lt;/h3&gt;
&lt;p&gt;$$
\begin{aligned}
\underset{\mathbf{h}}{\min} |\mathbf{A} \mathbf{h}|^2 \quad \text{subject to} \quad |\mathbf{h}| = 1
\end{aligned}
$$&lt;/p&gt;
&lt;h3&gt;拉格朗日乘数法&lt;/h3&gt;
&lt;p&gt;构造拉格朗日函数：&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
\mathcal{L}(\mathbf{h}, \lambda) &amp;amp;= |\mathbf{A} \mathbf{h}|^2 - \lambda (|\mathbf{h}|^2 - 1) \[1em]
&amp;amp;= \mathbf{h}^T \mathbf{A}^T \mathbf{A} \mathbf{h} - \lambda (\mathbf{h}^T \mathbf{h} - 1)
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;对$\mathbf{h}$求导并设置为零：&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
\frac{\partial \mathcal{L}}{\partial \mathbf{h}} = 2 \mathbf{A}^T \mathbf{A} \mathbf{h} - 2 \lambda \mathbf{h} &amp;amp;= \mathbf{0} \[1em]
\mathbf{A}^T \mathbf{A} \mathbf{h} &amp;amp;= \lambda \mathbf{h}
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;所以解$\mathbf{h}$是矩阵$\mathbf{A}^T \mathbf{A}$的特征向量，对应的特征值为$\lambda$&lt;/p&gt;
&lt;p&gt;由于我们要最小化$|\mathbf{A} \mathbf{h}|^2$，也就是最小化$\mathbf{h}^T \mathbf{A}^T \mathbf{A} \mathbf{h}$，对特征方程变形一下：&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
\mathbf{h}^T \mathbf{A}^T \mathbf{A} \mathbf{h} &amp;amp;= \lambda \mathbf{h}^T \mathbf{h} \qquad (\text{约束}|\mathbf{h}| = 1) \[1em]
&amp;amp;= \lambda
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;所以取$\min \lambda$(最小特征值)对应的特征向量$\mathbf{h}$(9x1)，并将其重塑(&lt;code&gt;np.reshape&lt;/code&gt;)为3x3矩阵，即为求解得到的单应矩阵$H$&lt;/p&gt;
</content:encoded></item><item><title>[模式识别与机器学习] 线性分类器</title><link>https://alkaid114.github.io/posts/ml/linear_classifier/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/ml/linear_classifier/</guid><pubDate>Sun, 31 May 2026 17:23:00 GMT</pubDate><content:encoded>&lt;h2&gt;线性分类器&lt;/h2&gt;
&lt;p&gt;特点：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;决策面是线/平面或超平面(n维空间中的n-1维空间)&lt;/li&gt;
&lt;li&gt;判别函数是线性函数&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;判别函数&lt;/h2&gt;
&lt;p&gt;常用&lt;strong&gt;增广形式&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
g(\mathbf{x}) = \mathbf{w}^T \mathbf{x}
$$&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$\mathbf{w}$：权重向量，决策面方程的系数，包含偏置项&lt;/li&gt;
&lt;li&gt;$\mathbf{x}$：输入特征向量，包含一个1以处理偏置，称增广(齐次)的特征向量&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;$$
\mathbf{w} = \begin{bmatrix}w_0 \ w_1 \ \vdots \ w_n
\end{bmatrix} \quad \mathbf{x} = \begin{bmatrix}1 \ x_1 \ \vdots \ x_n
\end{bmatrix}
$$&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;判别函数的符号决定分类结果：$g(\mathbf{x}) &amp;gt; 0$ 属于一类，称之正类，$g(\mathbf{x}) &amp;lt; 0$ 属于另一类，称之负类，$g(\mathbf{x}) = 0$ 则位于决策面上&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;目标方程&lt;/h2&gt;
&lt;p&gt;有了判别函数后，我们需要一个目标方程来优化权重向量$\mathbf{w}$，也就是让每一个样本经过判别函数运算后都能得到正确的分类结果。写成矩阵的形式：&lt;/p&gt;
&lt;p&gt;$$
\mathbf{X}\mathbf{w} &amp;gt; \mathbf{0}
$$&lt;/p&gt;
&lt;p&gt;其中：&lt;/p&gt;
&lt;p&gt;$$
\mathbf{X} = \begin{bmatrix}\mathbf{x}_1^T \ \mathbf{x}_2^T \ \vdots \ \mathbf{x}&lt;em&gt;m^T \ -\mathbf{x}&lt;/em&gt;{m+1}^T \ \vdots \ -\mathbf{x}_N^T
\end{bmatrix} \qquad \mathbf{w} = \begin{bmatrix}w_0 \ w_1 \ \vdots \ w_n
\end{bmatrix}
$$&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$\mathbf{X}$：增广特征矩阵，前$m$行是正类样本的增广特征向量，后$N-m$行是负类样本的增广特征向量取反，取反是为了能统一大于0&lt;/li&gt;
&lt;li&gt;$\mathbf{w}$：权重向量，包含决策面方程的系数&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Logistic回归&lt;/h2&gt;
&lt;p&gt;详见&lt;a href=&quot;/posts/ml/bayes_learn/#logistic%E5%9B%9E%E5%BD%92%E4%BB%A5%E4%BA%8C%E5%88%86%E7%B1%BB%E4%B8%BA%E4%BE%8B&quot;&gt;贝叶斯学习&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;感知器算法&lt;/h2&gt;
&lt;p&gt;只能处理线性可分的数据&lt;/p&gt;
&lt;h3&gt;感知器准则&lt;/h3&gt;
&lt;p&gt;最直观的准则是「最少错分样本数准则」：&lt;/p&gt;
&lt;p&gt;$$
J_N(\mathbf{w}) = \text{样本集合中被误分类的样本数}
$$&lt;/p&gt;
&lt;p&gt;但这个&lt;strong&gt;不可导&lt;/strong&gt;，无法使用梯度下降法，因此改为以误分类样本的&lt;strong&gt;距离&lt;/strong&gt;和为准则：&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
J_P(\mathbf{w}) = \sum_{\mathbf{x} \in \mathcal{M}} \left ( - \mathbf{w}^T \mathbf{x} \right ) \[1.5em]
\nabla J_P(\mathbf{w}) = \sum_{\mathbf{x} \in \mathcal{M}} \left ( - \mathbf{x} \right )
\end{aligned}
$$&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$\mathcal{M}$：误分类样本集合&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;算法&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;初始化权重向量 $\mathbf{w}_0 \quad k = 0$&lt;/li&gt;
&lt;li&gt;对训练样本进行迭代：
&lt;ul&gt;
&lt;li&gt;计算判别函数 $g(\mathbf{x}_k)$，判断样本是否被正确分类&lt;/li&gt;
&lt;li&gt;如果$\mathbf{x}&lt;em&gt;k$被误分类，更新权重向量：$\mathbf{w}&lt;/em&gt;{k+1} \leftarrow \mathbf{w}_k + \mathbf{x}_k$&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;重复步骤2直到所有样本被正确分类或达到最大迭代次数&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;批量版算法&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;初始化权重向量 $\mathbf{w}_0 \quad k = 0$，学习率 $\eta_k$，收敛阈值 $\epsilon$&lt;/li&gt;
&lt;li&gt;对训练样本进行迭代，收集所有误分类样本 $\mathcal{M_k}$：
&lt;ul&gt;
&lt;li&gt;对每个样本计算判别函数 $g(\mathbf{x})$，判断样本是否被正确分类&lt;/li&gt;
&lt;li&gt;如果样本被误分类，将其加入集合 $\mathcal{M_k}$&lt;/li&gt;
&lt;li&gt;更新权重向量：$\mathbf{w}_{k+1} \leftarrow \mathbf{w}&lt;em&gt;k + \eta_k \sum\limits&lt;/em&gt;{\mathbf{x} \in \mathcal{M_k}} \mathbf{x}$&lt;/li&gt;
&lt;li&gt;若$\left | \eta_k \sum\limits_{\mathbf{x} \in \mathcal{M_k}} \mathbf{x} \right | &amp;lt; \epsilon$，则停止迭代&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;重复步骤2直到所有样本被正确分类或达到最大迭代次数&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;LMSE算法(最小均方误差)&lt;/h2&gt;
&lt;p&gt;传统的感知器是让判别函数输出的绝对值大于0, 但使用LMSE可以为输出设置一个非0的目标值, 以增加分类的置信度。&lt;/p&gt;
&lt;p&gt;LMSE可以处理&lt;strong&gt;线性不可分&lt;/strong&gt;的数据&lt;/p&gt;
&lt;h3&gt;LMSE的目标方程&lt;/h3&gt;
&lt;p&gt;$$
X\mathbf{w} = \mathbf{b}
$$&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$\mathbf{b}$：目标输出向量，前$m$个元素为正类样本的目标值，后$N-m$个元素为负类样本的目标值&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;LMSE准则函数&lt;/h3&gt;
&lt;p&gt;定义误差向量$\mathbf{e} = X\mathbf{w} - \mathbf{b}$，LMSE准则函数为误差的平方和：&lt;/p&gt;
&lt;p&gt;$$
J(\mathbf{w}) = \frac{1}{2} \left | \mathbf{e}\right |^2
$$&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;$\frac{1}{2}$ 是为了求导好看&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;求导：&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
\nabla J(\mathbf{w}) = X^T (X\mathbf{w} - \mathbf{b}) &amp;amp;= 0 \[1em]
\mathbf{w} &amp;amp;= (X^T X)^{-1} X^T \mathbf{b} \[1em]
&amp;amp;= X^\dagger \mathbf{b}
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;梯度下降：&lt;/p&gt;
&lt;p&gt;$$
\mathbf{w}_{k+1} = \mathbf{w}_k - \eta_k \nabla J(\mathbf{w}_k) = \mathbf{w}_k - \eta_k X^T (X\mathbf{w}_k - \mathbf{b})
$$&lt;/p&gt;
&lt;h2&gt;多类问题扩展&lt;/h2&gt;
&lt;p&gt;设共有$C$类&lt;/p&gt;
&lt;h3&gt;拆分二分类法&lt;/h3&gt;
&lt;h4&gt;一对多&lt;/h4&gt;
&lt;p&gt;为每一个类训练一个二分类器，如果大于0就属于这个类，否则不属于这个类。测试时，输入样本通过所有分类器，选择输出最大的那个分类器对应的类。&lt;/p&gt;
&lt;p&gt;需要$C$个分类器&lt;/p&gt;
&lt;h4&gt;一对一&lt;/h4&gt;
&lt;p&gt;对任意两类训练一个二分类器，测试时，输入样本通过所有分类器，选择被最多分类器投票的那个类。&lt;/p&gt;
&lt;p&gt;需要$\dfrac{C(C-1)}{2}$个分类器&lt;/p&gt;
&lt;h3&gt;扩展感知器算法&lt;/h3&gt;
&lt;p&gt;初始化$C$个权重向量$\mathbf{w}_1, \mathbf{w}_2, \ldots, \mathbf{w}_C$，每个权重向量对应一个类&lt;/p&gt;
&lt;p&gt;$$
\mathbf{W} = \begin{bmatrix}\mathbf{w}_1^T \ \mathbf{w}_2^T \ \vdots \ \mathbf{w}_C^T
\end{bmatrix}  \quad \mathbf{G(\mathbf{x})} = \begin{bmatrix}
g_1(\mathbf{x}) \ g_2(\mathbf{x}) \ \vdots \ g_C(\mathbf{x})
\end{bmatrix}
$$&lt;/p&gt;
&lt;p&gt;得到方程
$$
\mathbf{G(\mathbf{x})} = \mathbf{W} \mathbf{x}
$$&lt;/p&gt;
&lt;p&gt;若样本$\mathbf{x}$ 属于第 $j$ 类，则：&lt;/p&gt;
&lt;p&gt;$$
\arg\max_{k} g_k(\mathbf{x}) = j
$$&lt;/p&gt;
&lt;p&gt;其中 $g_k(\mathbf{x})$ 是第 $k$ 个分类器的输出，也是$G(\mathbf{x})$的第 $k$ 个元素&lt;/p&gt;
&lt;h2&gt;支持向量机(SVM)&lt;/h2&gt;
&lt;p&gt;感知器能找到一个决策面，但可能不是最优的决策面。SVM的目标是找到一个最大化分类间隔的决策面，以提高模型的泛化能力。是&lt;strong&gt;最大间隔分类器&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;间隔&lt;/h3&gt;
&lt;p&gt;对于超平面：&lt;/p&gt;
&lt;p&gt;$$
\mathbf{w}^T \mathbf{x} + b = 0
$$&lt;/p&gt;
&lt;p&gt;样本点$\mathbf{x}_i$到超平面的距离为：&lt;/p&gt;
&lt;p&gt;$$
d_i = \frac{|\mathbf{w}^T \mathbf{x}_i + b|}{|\mathbf{w}|}
$$&lt;/p&gt;
&lt;p&gt;则间隔的定义：&lt;/p&gt;
&lt;p&gt;$$
\text{margin} = \min_i d_i
$$&lt;/p&gt;
&lt;p&gt;SVM的目标是最大化这个间隔&lt;/p&gt;
&lt;h3&gt;线性可分SVM(硬间隔)&lt;/h3&gt;
&lt;p&gt;为简化优化过程，要求对所有样本满足：&lt;/p&gt;
&lt;p&gt;$$
y_i (\mathbf{w}^T \mathbf{x}_i + b) \geq 1
$$&lt;/p&gt;
&lt;p&gt;其中 $y_i$ 是样本 $\mathbf{x}_i$ 的类别标签，取值为 $+1$ 或 $-1$。这个约束确保了所有样本都被正确分类，并且距离超平面至少为$\dfrac{1}{|\mathbf{w}|}$&lt;/p&gt;
&lt;p&gt;优化问题：&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
\min_{\mathbf{w}, b} \quad &amp;amp; \frac{1}{2} |\mathbf{w}|^2 \
\text{subject to} \quad &amp;amp; y_i (\mathbf{w}^T \mathbf{x}_i + b) \geq 1, \quad i = 1, 2, \ldots, N
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;这是一个凸二次优化问题，可以通过拉格朗日乘子法求解&lt;/p&gt;
&lt;p&gt;引入拉格朗日乘子 $\alpha_i \geq 0$，构建拉格朗日函数：&lt;/p&gt;
&lt;p&gt;$$
L(\mathbf{w}, b, \boldsymbol{\alpha}) = \frac{1}{2} |\mathbf{w}|^2 - \sum_{i=1}^N \alpha_i [y_i (\mathbf{w}^T \mathbf{x}_i + b) - 1]
$$&lt;/p&gt;
&lt;p&gt;对 $\mathbf{w}$ 和 $b$ 求偏导并设置为零，得到：&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
\frac{\partial L}{\partial \mathbf{w}} &amp;amp;= \mathbf{w} - \sum_{i=1}^N \alpha_i y_i \mathbf{x}&lt;em&gt;i = 0 \ &amp;amp;\Rightarrow
\mathbf{w} = \sum&lt;/em&gt;{i=1}^N \alpha_i y_i \mathbf{x}&lt;em&gt;i \
\frac{\partial L}{\partial b} &amp;amp;=
\sum&lt;/em&gt;{i=1}^N \alpha_i y_i = 0
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;代入拉格朗日函数，得到对偶问题：&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
\max_{\boldsymbol{\alpha}} \quad &amp;amp; \sum_{i=1}^N \alpha_i - \frac{1}{2} \sum_{i=1}^N \sum_{j=1}^N \alpha_i \alpha_j y_i y_j \mathbf{x}_i^T \mathbf{x}&lt;em&gt;j \
\text{subject to} \quad &amp;amp; \alpha_i \geq 0, \quad i = 1, 2, \ldots, N \
&amp;amp; \sum&lt;/em&gt;{i=1}^N \alpha_i y_i = 0
\end{aligned}
$$&lt;/p&gt;
&lt;h4&gt;支持向量&lt;/h4&gt;
&lt;p&gt;根据KKT条件：&lt;/p&gt;
&lt;p&gt;$$
\alpha_i [y_i (\mathbf{w}^T \mathbf{x}_i + b) - 1] = 0
$$&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;当 $\alpha_i &amp;gt; 0$ 时，则$y_i (\mathbf{w}^T \mathbf{x}_i + b) = 1$，样本 $\mathbf{x}_i$ 位于间隔边界上，称为&lt;strong&gt;支持向量&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;当 $\alpha_i = 0$ 时，$y_i (\mathbf{w}^T \mathbf{x}_i + b) &amp;gt; 1$，样本 $\mathbf{x}_i$ 位于间隔外，不是支持向量，样本对决策面没有贡献&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;结论：最终分类器只由支持向量决定&lt;/p&gt;
&lt;p&gt;$$
\mathbf{w} = \sum_{i \in SV} \alpha_i y_i \mathbf{x}_i
$$&lt;/p&gt;
&lt;p&gt;支持向量机的决策函数：&lt;/p&gt;
&lt;p&gt;$$
f(\mathbf{x}) = \text{sign} \left( \sum_{i \in SV} \alpha_i y_i \mathbf{x}_i^T \mathbf{x} + b \right)
$$&lt;/p&gt;
&lt;h3&gt;不完全线性可分SVM(软间隔)&lt;/h3&gt;
&lt;p&gt;引入松弛变量 $\xi_i \geq 0$，允许部分样本被误分类(可以不满足函数间隔$\ge1$)，但对误分类样本进行惩罚。优化问题：&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
\min_{\mathbf{w}, b, \boldsymbol{\xi}} \quad &amp;amp; \frac{1}{2} |\mathbf{w}|^2 + C \sum_{i=1}^N \xi_i \
\text{subject to} \quad &amp;amp; y_i (\mathbf{w}^T \mathbf{x}_i + b) \geq 1 - \xi_i, \quad i = 1, 2, \ldots, N \
&amp;amp; \xi_i \geq 0, \quad i = 1, 2, \ldots, N
\end{aligned}
$$&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$C&amp;gt;0$：惩罚参数，控制模型对误分类的容忍度&lt;/li&gt;
&lt;li&gt;$C\to\infty$ 时，软间隔SVM退化为硬间隔SVM&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;推导后得到对偶问题：&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
\max_{\boldsymbol{\alpha}} \quad &amp;amp; \sum_{i=1}^N \alpha_i - \frac{1}{2} \sum_{i=1}^N \sum_{j=1}^N \alpha_i \alpha_j y_i y_j \mathbf{x}_i^T \mathbf{x}&lt;em&gt;j \
\text{subject to} \quad &amp;amp; 0 \leq \alpha_i \leq C, \quad i = 1, 2, \ldots, N \
&amp;amp; \sum&lt;/em&gt;{i=1}^N \alpha_i y_i = 0
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;只比硬间隔多了上界$\alpha_i \leq C$&lt;/p&gt;
&lt;h4&gt;KKT条件&lt;/h4&gt;
&lt;p&gt;$$
\begin{aligned}
\alpha_i [y_i (\mathbf{w}^T \mathbf{x}_i + b) - 1 + \xi_i] &amp;amp;= 0 \
(C - \alpha_i) \xi_i &amp;amp;= 0
\end{aligned}
$$&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;当 $\alpha_i &amp;gt; 0$ 且 $\alpha_i &amp;lt; C$ 时，$y_i (\mathbf{w}^T \mathbf{x}_i + b) = 1 - \xi_i$，样本 $\mathbf{x}_i$ 位于间隔边界上，称为&lt;strong&gt;支持向量&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;当 $\alpha_i = 0$ 时，$y_i (\mathbf{w}^T \mathbf{x}_i + b) &amp;gt; 1 - \xi_i$，样本 $\mathbf{x}_i$ 位于间隔外，不是支持向量，样本对决策面没有贡献&lt;/li&gt;
&lt;li&gt;当 $\alpha_i = C$ 时，$y_i (\mathbf{w}^T \mathbf{x}_i + b) &amp;lt; 1 - \xi_i$，样本 $\mathbf{x}_i$ 被误分类，称为&lt;strong&gt;误分类支持向量&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;非线性可分SVM(核方法)&lt;/h3&gt;
&lt;p&gt;给软间隔最后得到的对偶问题的$\mathbf{x}_i^T \mathbf{x}_j$替换为核函数$K(\mathbf{x}_i, \mathbf{x}_j)$，得到：&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
\max_{\boldsymbol{\alpha}} \quad &amp;amp; \sum_{i=1}^N \alpha_i - \frac{1}{2} \sum_{i=1}^N \sum_{j=1}^N \alpha_i \alpha_j y_i y_j K(\mathbf{x}_i, \mathbf{x}&lt;em&gt;j) \
\text{subject to} \quad &amp;amp; 0 \leq \alpha_i \le C, \quad i = 1, 2, \ldots, N \
&amp;amp; \sum&lt;/em&gt;{i=1}^N \alpha_i y_i = 0
\end{aligned}
$$&lt;/p&gt;
</content:encoded></item><item><title>[计算机视觉] 图像金字塔与图像融合</title><link>https://alkaid114.github.io/posts/cv/pyramid_fuse/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/cv/pyramid_fuse/</guid><pubDate>Sat, 30 May 2026 19:45:00 GMT</pubDate><content:encoded>&lt;p&gt;所谓金字塔就是将原图处理成一系列不同分辨率的版本，形成一个金字塔结构&lt;/p&gt;
&lt;h2&gt;高斯金字塔&lt;/h2&gt;
&lt;p&gt;用于降采样&lt;/p&gt;
&lt;p&gt;步骤：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;对图像进行高斯模糊，去除高频信息，防止混叠(伪影)&lt;/li&gt;
&lt;li&gt;对模糊后的图像进行下采样，通常是删除偶数行和偶数列的像素&lt;/li&gt;
&lt;li&gt;重复上述步骤，直到达到所需的层数&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;拉普拉斯金字塔&lt;/h2&gt;
&lt;p&gt;是高斯金字塔的逆过程，用于图像重建&lt;/p&gt;
&lt;p&gt;步骤：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;从高斯金字塔的最底层开始，逐层向上进行重建&lt;/li&gt;
&lt;li&gt;对比当前高一层(低分辨率)的高斯金字塔图像进行上采样，通常是插值&lt;/li&gt;
&lt;li&gt;将上采样后的图像与当前层的高斯金字塔图像进行相减，得到拉普拉斯金字塔的当前层，所以拉普拉斯金字塔的每一层都是高斯金字塔相邻两层之间的差异图像&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;拉普拉斯金字塔每层和高斯金字塔的对应层具有相同的分辨率，但总层数比高斯金字塔少一层&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;图像融合&lt;/h2&gt;
&lt;p&gt;步骤：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;分别构建两张图像的高斯金字塔(GA, GB)和拉普拉斯金字塔(LA, LB)&lt;/li&gt;
&lt;li&gt;根据要融合的方式，构造一个蒙版(比如左右融合，就是一侧全为255，另一侧全为0)，并计算蒙版的高斯金字塔(GM)&lt;/li&gt;
&lt;li&gt;在金字塔每一层$i$，根据蒙版的权重进行融合得到新的拉普拉斯金字塔：
$$L_{fused}^i = GM^i \cdot LA^i + (1 - GM^i) \cdot LB^i$$&lt;/li&gt;
&lt;li&gt;从融合后的新拉普拉斯金字塔的最底层开始，逐层向上进行重建，得到最终的融合图像&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这种方式融合的图像在边界处过渡自然，避免了直接拼接可能出现的明显边界问题，同时保留了两张图像的细节信息&lt;/p&gt;
&lt;h3&gt;重建方法&lt;/h3&gt;
&lt;p&gt;拿到高斯金字塔最顶层$n$的最小分辨率图像，逐层向下重建：&lt;/p&gt;
&lt;p&gt;$$
G_{fused}^{n-1} = L_{fused}^{n-1} + \text{Upsample}(G_{fused}^n)
$$&lt;/p&gt;
&lt;p&gt;最后得到$G_{fused}^0$，即融合后的图像&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;实现时应使用浮点数而非u8，避免负数和精度问题&lt;/p&gt;
&lt;/blockquote&gt;
</content:encoded></item><item><title>[计算机视觉] 边缘检测</title><link>https://alkaid114.github.io/posts/cv/edge_detect/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/cv/edge_detect/</guid><pubDate>Sat, 30 May 2026 19:12:00 GMT</pubDate><content:encoded>&lt;h2&gt;非极大值抑制&lt;/h2&gt;
&lt;p&gt;因为后续的边缘检测算子计算结果均是梯度幅值图，若要得到最终的边缘图，需要对梯度幅值图进行非极大值抑制&lt;/p&gt;
&lt;p&gt;非极大值抑制的核心思想是：对于每个像素点，比较其梯度幅值与其在梯度方向上的两个邻居的梯度幅值，如果该像素点的梯度幅值不是最大的，则将其设为0&lt;/p&gt;
&lt;p&gt;目的就是找出局部最大值，保留边缘的细节，同时抑制非边缘的噪声&lt;/p&gt;
&lt;h2&gt;Sobel算子&lt;/h2&gt;
&lt;p&gt;Sobel算子通过计算图像在水平和垂直方向上的梯度来检测边缘&lt;/p&gt;
&lt;p&gt;垂直方向卷积核：&lt;/p&gt;
&lt;p&gt;$$
G_x = \begin{bmatrix}-1 &amp;amp; 0 &amp;amp; 1 \
-2 &amp;amp; 0 &amp;amp; 2 \
-1 &amp;amp; 0 &amp;amp; 1\end{bmatrix}
$$&lt;/p&gt;
&lt;p&gt;水平方向卷积核：&lt;/p&gt;
&lt;p&gt;$$
G_y = \begin{bmatrix}1 &amp;amp; 2 &amp;amp; 1 \
0 &amp;amp; 0 &amp;amp; 0 \
-1 &amp;amp; -2 &amp;amp; -1\end{bmatrix}
$$&lt;/p&gt;
&lt;p&gt;图像任意一点的总梯度强度(梯度幅值)：&lt;/p&gt;
&lt;p&gt;$$
G = \sqrt{G_x^2 + G_y^2}
$$&lt;/p&gt;
&lt;p&gt;绝对值近似$G \approx |G_x| + |G_y|$，计算更快&lt;/p&gt;
&lt;h2&gt;Prewitt算子&lt;/h2&gt;
&lt;p&gt;Prewitt算子与Sobel算子类似，也是通过计算图像在水平和垂直方向上的梯度来检测边缘，但Prewitt不考虑更近的像素的权重，权重均为1&lt;/p&gt;
&lt;p&gt;垂直方向卷积核：&lt;/p&gt;
&lt;p&gt;$$
G_x = \begin{bmatrix}-1 &amp;amp; 0 &amp;amp; 1 \
-1 &amp;amp; 0 &amp;amp; 1 \
-1 &amp;amp; 0 &amp;amp; 1\end{bmatrix}
$$&lt;/p&gt;
&lt;p&gt;水平方向卷积核：&lt;/p&gt;
&lt;p&gt;$$
G_y = \begin{bmatrix}1 &amp;amp; 1 &amp;amp; 1 \
0 &amp;amp; 0 &amp;amp; 0 \
-1 &amp;amp; -1 &amp;amp; -1\end{bmatrix}
$$&lt;/p&gt;
&lt;p&gt;后续和Sobel算子一样&lt;/p&gt;
&lt;h2&gt;Laplacian算子&lt;/h2&gt;
&lt;p&gt;Laplacian算子通过计算图像的二阶导数来检测边缘，能够检测到图像中灰度值变化较大的区域&lt;/p&gt;
&lt;p&gt;$$
\text{Kernel} = \begin{bmatrix}0 &amp;amp; 1 &amp;amp; 0 \
1 &amp;amp; -4 &amp;amp; 1 \
0 &amp;amp; 1 &amp;amp; 0\end{bmatrix}
$$&lt;/p&gt;
&lt;p&gt;计算的是中心像素与其四个邻居像素的灰度值之差的总和，因此对变化非常敏感，能检测出非常细的边缘，但导致对噪声也非常敏感&lt;/p&gt;
&lt;h2&gt;Canny算子&lt;/h2&gt;
&lt;p&gt;Canny算子是一种多阶段的边缘检测算法，包含以下步骤：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;使用[高斯滤波器](/posts/cv/conv_denoise/#高斯滤波(Gaussian Filter))对图像进行平滑，减少噪声的影响&lt;/li&gt;
&lt;li&gt;计算图像的梯度幅值和方向，使用&lt;a href=&quot;#sobel%E7%AE%97%E5%AD%90&quot;&gt;Sobel算子&lt;/a&gt;或&lt;a href=&quot;#prewitt%E7%AE%97%E5%AD%90&quot;&gt;Prewitt算子&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;进行非极大值抑制，保留局部最大值，抑制非边缘的噪声&lt;/li&gt;
&lt;li&gt;使用双阈值算法连接边缘，确定哪些边缘是强边缘，哪些是弱边缘，并连接强边缘和弱边缘&lt;/li&gt;
&lt;li&gt;滞后边界追踪，连接强边缘和弱边缘，形成完整的边缘图&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;双阈值算法&lt;/h3&gt;
&lt;p&gt;边缘分为强边缘和弱边缘&lt;/p&gt;
&lt;p&gt;$$
\text{强边缘} = {(x, y) | G(x, y) \geq T_{\text{high}}} \[1em]
\text{弱(潜在)边缘} = {(x, y) | T_{\text{low}} \leq G(x, y) &amp;lt; T_{\text{high}}} \[1em]
\text{丢弃} = {(x, y) | G(x, y) &amp;lt; T_{\text{low}}}
$$&lt;/p&gt;
&lt;h3&gt;滞后边界追踪&lt;/h3&gt;
&lt;p&gt;对于每个强边缘像素，检查其8邻域，如果邻域内有弱边缘像素，则将该弱边缘像素也标记为强边缘，继续检查该弱边缘像素的8邻域，直到没有更多的弱边缘像素被连接为止&lt;/p&gt;
</content:encoded></item><item><title>[计算机视觉] 卷积与图像降噪</title><link>https://alkaid114.github.io/posts/cv/conv_denoise/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/cv/conv_denoise/</guid><pubDate>Sat, 30 May 2026 18:04:00 GMT</pubDate><content:encoded>&lt;h2&gt;图像2D卷积&lt;/h2&gt;
&lt;p&gt;就是CNN里的那个卷积&lt;/p&gt;
&lt;p&gt;一个卷积核在图像上滑动，计算卷积核和图像重叠部分的乘积和，得到一个新的像素值&lt;/p&gt;
&lt;h3&gt;概念和参数&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;核大小(Kernel Size): 卷积核的尺寸，通常是一个奇数，如3x3、5x5等&lt;/li&gt;
&lt;li&gt;步长(Stride): 卷积核在图像上每次滑动的步长，默认为1，步长越大，输出图像越小&lt;/li&gt;
&lt;li&gt;填充(Padding): 在图像边缘添加额外的像素，以控制输出图像的尺寸，常见的填充方式有零填充（Zero Padding）&lt;/li&gt;
&lt;li&gt;感受野(Receptive Field): 卷积输出的单个像素点所能&quot;看到&quot;的输入图像区域大小，n层3x3卷积的感受野为(2n+1)，感受野是边长&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;import numpy as np

def convolve2d_advanced(image, kernel, stride=1, padding=0):
    # 填充操作 (Padding)
    # 如果 padding &amp;gt; 0，在图像四周补零
    if padding &amp;gt; 0:
        image = np.pad(image, ((padding, padding), (padding, padding)), mode=&apos;constant&apos;)
    
    img_h, img_w = image.shape
    ker_h, ker_w = kernel.shape
    
    # 计算输出图像尺寸
    # 公式: O = (I - K + 2P) / S + 1
    out_h = (img_h - ker_h) // stride + 1
    out_w = (img_w - ker_w) // stride + 1
    
    # 初始化输出矩阵
    output = np.zeros((out_h, out_w))
    
    # 带步长的卷积操作
    for i in range(out_h):
        for j in range(out_w):
            # 计算切片在原图上的起始位置
            start_i = i * stride
            start_j = j * stride
            
            # 提取感兴趣区域
            region = image[start_i : start_i + ker_h, start_j : start_j + ker_w]
            
            # 执行点乘并求和
            output[i, j] = np.sum(region * kernel)
            
    return output
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;感受野计算公式&lt;/h3&gt;
&lt;p&gt;对于第$l$层卷积，感受野的计算公式为：&lt;/p&gt;
&lt;p&gt;$$
R_l = R_{l-1} + (K_l - 1) \times \prod_{i=1}^{l-1} S_i
$$&lt;/p&gt;
&lt;p&gt;其中：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$R_l$ 是第$l$层的感受野大小，$R_0$ 是输入图像的感受野大小，通常为1&lt;/li&gt;
&lt;li&gt;$K_l$ 是第$l$层卷积核的大小&lt;/li&gt;
&lt;li&gt;$S_i$ 是第$i$层的步长&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;图像降噪&lt;/h2&gt;
&lt;h3&gt;均值滤波(Mean Filter)&lt;/h3&gt;
&lt;p&gt;原理是用一个像素邻域内的像素值的平均值来替换中心像素值&lt;/p&gt;
&lt;p&gt;本质上就是一个卷积核全部元素为$\frac{1}{9}$的卷积操作&lt;/p&gt;
&lt;p&gt;$$
\text{Kernel} = \frac{1}{9} \begin{bmatrix}
1 &amp;amp; 1 &amp;amp; 1 \
1 &amp;amp; 1 &amp;amp; 1 \
1 &amp;amp; 1 &amp;amp; 1
\end{bmatrix}
$$&lt;/p&gt;
&lt;p&gt;缺点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;模糊了图像的边缘，变糊&lt;/li&gt;
&lt;li&gt;椒盐噪声的黑白点极端值会对平均值产生较大影响，去除效果不好&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;中值滤波(Median Filter)&lt;/h3&gt;
&lt;p&gt;原理是用一个像素邻域内的像素值的中位数来替换中心像素值&lt;/p&gt;
&lt;p&gt;卷积核的元素不固定，而是根据邻域内像素值的排序来确定&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;import numpy as np

def median_filter(image, kernel_size=3):
    img_h, img_w = image.shape
    pad = kernel_size // 2
    
    # 填充图像，防止边缘处理越界
    padded_img = np.pad(image, ((pad, pad), (pad, pad)), mode=&apos;edge&apos;)
    output = np.zeros_like(image)
    
    for i in range(img_h):
        for j in range(img_w):
            # 提取邻域窗口
            region = padded_img[i:i + kernel_size, j:j + kernel_size]
            # 排序并取中位数
            output[i, j] = np.median(region)
            
    return output
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;优点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;中位数能排除黑白点这种极端值的影响，能有效去除椒盐噪声&lt;/li&gt;
&lt;li&gt;少数服从多数的特点可以保护图像的边缘&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;缺点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;计算慢，需要排序&lt;/li&gt;
&lt;li&gt;细节丢失&lt;/li&gt;
&lt;li&gt;无法有效去除高斯噪声，因为高斯噪声的像素值分布较为连续，没有明显的极端值&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;高斯滤波(Gaussian Filter)&lt;/h3&gt;
&lt;p&gt;利用正态分布的权重对像素进行加权平均，权重随距离中心像素的距离增加而减小&lt;/p&gt;
&lt;p&gt;$$
\text{Kernel}(x, y) = \frac{1}{2\pi\sigma^2} e^{-\frac{x^2 + y^2}{2\sigma^2}}
$$&lt;/p&gt;
&lt;p&gt;一个可行的3x3高斯核（$\sigma=1$）如下：&lt;/p&gt;
&lt;p&gt;$$
\text{Kernel} = \frac{1}{16} \begin{bmatrix}
1 &amp;amp; 2 &amp;amp; 1 \
2 &amp;amp; 4 &amp;amp; 2 \
1 &amp;amp; 2 &amp;amp; 1
\end{bmatrix}
$$&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;import numpy as np

def gaussian_kernel(size, sigma=1.0):
    # 生成中心点坐标
    ax = np.arange(-size // 2 + 1., size // 2 + 1.)
    xx, yy = np.meshgrid(ax, ax)
    
    # 高斯分布公式: G(x, y) = exp(-(x^2 + y^2) / (2 * sigma^2))
    kernel = np.exp(-(xx**2 + yy**2) / (2. * sigma**2))
    
    # 归一化，确保所有元素之和为 1
    return kernel / np.sum(kernel)

# 使用方式
kernel = gaussian_kernel(size=3, sigma=1.0)
# 调用之前的卷积函数
output = convolve2d_advanced(image, kernel, padding=1)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;优点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;能有效去除高斯噪声，因为高斯滤波的权重分布与高斯噪声的分布相匹配&lt;/li&gt;
&lt;li&gt;边缘保护较好，因为权重随距离增加而减小，远离中心像素的噪声对结果影响较小&lt;/li&gt;
&lt;li&gt;可分离性：一个二维高斯核可以分解为两个一维高斯核的卷积，计算效率更高&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;缺点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;对于椒盐噪声效果不佳，因为椒盐噪声的极端值会对加权平均产生较大影响&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>[计算机视觉] 点操作</title><link>https://alkaid114.github.io/posts/cv/pixel_op/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/cv/pixel_op/</guid><pubDate>Sat, 30 May 2026 17:39:00 GMT</pubDate><content:encoded>&lt;h2&gt;线性拉伸&lt;/h2&gt;
&lt;p&gt;线性拉伸将图中每一个像素的灰度值线性映射到$[x_{\text{min}}, x_{\text{max}}]$之间&lt;/p&gt;
&lt;p&gt;$$
g(x, y) = \frac{f(x, y) - f_{\text{min}}}{f_{\text{max}} - f_{\text{min}}} \times (x_{\text{max}} - x_{\text{min}}) + x_{\text{min}}
$$&lt;/p&gt;
&lt;p&gt;$f_{\text{min}}$和$f_{\text{max}}$分别是图像中像素灰度值的最小值和最大值&lt;/p&gt;
&lt;h2&gt;$\gamma$变换&lt;/h2&gt;
&lt;p&gt;$\gamma$变换将图中每一个像素的灰度值非线性映射到$[0, 255]$之间&lt;/p&gt;
&lt;p&gt;$$
g(x, y) = 255 \times \left( \frac{f(x, y)}{255} \right)^{\gamma}
$$&lt;/p&gt;
&lt;p&gt;除255的操作是在进行归一化&lt;/p&gt;
&lt;p&gt;其中$\gamma$是一个正数，控制了映射的非线性程度，当$\gamma &amp;lt; 1$时，图像会变亮；当$\gamma &amp;gt; 1$时，图像会变暗；当$\gamma = 1$时，图像保持不变&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./gamma_transformation.svg&quot; alt=&quot;gamma变换&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;直方图均衡化&lt;/h2&gt;
&lt;p&gt;直方图均衡化是一种增强图像对比度的方法，通过将图像的灰度值重新分布，使得图像的灰度值在整个范围内均匀分布&lt;/p&gt;
&lt;p&gt;计算方式是通过累计概率&lt;/p&gt;
&lt;p&gt;将图像统计为直方图，横轴为灰度值，纵轴为是该灰度值的像素数量&lt;/p&gt;
&lt;p&gt;当前处理的灰度值为$i$，则累计概率为&lt;/p&gt;
&lt;p&gt;$$
s(i) = \sum_{j=0}^{i} \frac{n_j}{n}
$$&lt;/p&gt;
&lt;p&gt;$n_j$是灰度值为$j$的像素数量，$n$是图像中像素的总数量&lt;/p&gt;
&lt;p&gt;累计概率$s(i)$表示灰度值小于等于$i$的像素占总像素的比例&lt;/p&gt;
&lt;p&gt;将累计概率乘以最大灰度值255，得到对应$i$的像素的新灰度值&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./histogram_eq_concept.svg&quot; alt=&quot;直方图均衡化&quot; /&gt;&lt;/p&gt;
</content:encoded></item><item><title>[形式语言与自动机] CFG上下文无关文法</title><link>https://alkaid114.github.io/posts/automata/cfg/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/automata/cfg/</guid><pubDate>Sat, 30 May 2026 16:36:00 GMT</pubDate><content:encoded>&lt;h2&gt;上下文无关文法的定义&lt;/h2&gt;
&lt;p&gt;上下文无关文法（Context-Free Grammar，CFG）是一个四元组：&lt;/p&gt;
&lt;p&gt;$$G = (V, \Sigma, R, S)$$&lt;/p&gt;
&lt;p&gt;其中：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$V$ 是一个有限的非终结符集合&lt;/li&gt;
&lt;li&gt;$\Sigma$ 是一个有限的终结符集合，且 $V \cap \Sigma = \emptyset$&lt;/li&gt;
&lt;li&gt;$R$ 是一个有限的产生式集合，每个产生式的形式为 $A \to \alpha$，其中 $A \in V$ 是一个非终结符，$\alpha \in (V \cup \Sigma)^*$ 是一个由非终结符和终结符组成的字符串&lt;/li&gt;
&lt;li&gt;$S \in V$ 是开始符号&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;终结符&lt;/strong&gt;: 简单来说跟字母表类似，是构成语言的基本符号，不能再被替换&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;非终结符&lt;/strong&gt;: 是用来定义语言结构的符号，可以被替换成其他非终结符或终结符的组合&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;产生式&lt;/strong&gt;: 定义了非终结符如何被替换成其他符号的规则&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;开始符号&lt;/strong&gt;: 是生成语言的起点，所有生成的字符串都必须从开始符号出发通过一系列产生式替换得到&lt;/p&gt;
&lt;h2&gt;例子&lt;/h2&gt;
&lt;p&gt;设计一个上下文无关文法来生成语言 $L = {a^n b^{m} | m \ge n \geq 0}$，即由相同数量的 $a$ 和 $b$ 组成的字符串集合&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;因为我们老师说不用写完整的文法定义，给出产生式即可，所以我就不写了&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;可以定义以下产生式：&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
S &amp;amp;\to aSb \
S &amp;amp;\to bS \
S &amp;amp;\to \epsilon
\end{aligned}
$$&lt;/p&gt;
&lt;h3&gt;如何理解产生式？&lt;/h3&gt;
&lt;p&gt;可以当作我们一开始只有一个符号$S$，我们可以用产生式来替换它，直到我们得到一个由终结符组成的字符串为止&lt;/p&gt;
&lt;p&gt;例如：&lt;/p&gt;
&lt;p&gt;$$
\text{情况一：} S \Rightarrow aSb \Rightarrow aaSbb \Rightarrow aa\epsilon bb \Rightarrow aabb \[6pt]
\text{情况二：} S \Rightarrow bS \Rightarrow bbS \Rightarrow bbbS \Rightarrow bbb\epsilon \Rightarrow bbb
$$&lt;/p&gt;
&lt;p&gt;可以看到以上举例的两种情况都满足 $m \ge n \geq 0$ 的条件，因此它们都属于语言 $L$&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;第二条规则写成 $S \to Sb$ 也是可以的&lt;/p&gt;
&lt;p&gt;以及如果想一行完事可以用更简单的产生式 $S \to aS | bS | \epsilon$&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;CFG的歧义性&lt;/h2&gt;
&lt;p&gt;举个有歧义的文法例子：&lt;/p&gt;
&lt;p&gt;设计CFG来生成一个算术表达式语言，包含加法和乘法运算符，并且满足乘法优先于加法&lt;/p&gt;
&lt;p&gt;可以定义以下产生式：&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
E &amp;amp;\to E + E \
E &amp;amp;\to E * E \
E &amp;amp;\to (E) \
E &amp;amp;\to \text{数字}
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;这个文法是有歧义的，因为对于一个表达式 $E$，我们可以有多种不同的解析树来表示它，例如对于表达式 $a + b * c$，我们可以有以下两种解析树：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;解析树1：&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;        E
       /|\
      E + E
     /   /|\
    a   E * E
       /     \
      b       c
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;解析树2：&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;        E
       /|\
      E * E
     /|\   \
    E + E   c
   /     \
  a       b
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;可以发现解析树2是有问题的，这样的结构会导致先运算加法而不是乘法，因此这个文法是有歧义的&lt;/p&gt;
&lt;p&gt;修改后的文法如下：&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
E &amp;amp;\to E + T \mid T \
T &amp;amp;\to T * F \mid F \
F &amp;amp;\to (E) \
F &amp;amp;\to \text{数字}
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;这个文法通过引入新的非终结符 $T$ 和 $F$ 来区分加法和乘法的优先级，从而消除了歧义性&lt;/p&gt;
&lt;h2&gt;CFG简化方法&lt;/h2&gt;
&lt;p&gt;以下按顺序进行&lt;/p&gt;
&lt;h3&gt;消除$\epsilon$-产生式&lt;/h3&gt;
&lt;p&gt;$\epsilon$-产生式意思是右侧是空字符串的产生式，例如 $A \to \epsilon$，它表示非终结符 $A$ 可以被替换成空字符串&lt;/p&gt;
&lt;p&gt;例子：&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
S &amp;amp;\to AB \
A &amp;amp;\to aA \mid \epsilon \
B &amp;amp;\to bB \mid \epsilon
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;设空非终结符集合$Null = {}$，由于$A$和$B$都可以产生空串，所以$Null = {A, B}$，然后迭代发现$S$也可以产生空串，所以$Null = {S, A, B}$&lt;/p&gt;
&lt;p&gt;扫描原文法，发现$A \to aA$、$B \to bB$和$S \to AB$都可以产生空非终结符，所以我们可以将它们的右侧的空非终结符去掉，得到新的产生式：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;$A$或$B$删除或保留，所以是 $aA$ 或 $a$，$bB$ 或 $b$，$AB$ 或 $A$ 或 $B$ 或 $\epsilon$&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;$$
A \to aA \mid a, \quad B \to bB \mid b, \quad S \to AB \mid A \mid B \mid \epsilon
$$&lt;/p&gt;
&lt;p&gt;因为$S$也可以产生空串，所以我们需要添加一个新的产生式 $S_0 \to S \mid \epsilon$ 替代掉$S \to \epsilon$，最终得到的文法为：&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
S_0 &amp;amp;\to S \mid \epsilon \
S &amp;amp;\to AB \mid A \mid B \
A &amp;amp;\to aA \mid a \
B &amp;amp;\to bB \mid b
\end{aligned}
$$&lt;/p&gt;
&lt;h3&gt;消除单元产生式&lt;/h3&gt;
&lt;p&gt;单元产生式是指右侧是一个非终结符的产生式，例如 $A \to B$，它表示非终结符 $A$ 可以被替换成非终结符 $B$&lt;/p&gt;
&lt;p&gt;例子：&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
S &amp;amp;\to A \
A &amp;amp;\to B \
B &amp;amp;\to b
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;消除后：&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
S &amp;amp;\to b \
A &amp;amp;\to b \
B &amp;amp;\to b
\end{aligned}
$$&lt;/p&gt;
&lt;h3&gt;消除无用符号&lt;/h3&gt;
&lt;h4&gt;先消非产生&lt;/h4&gt;
&lt;p&gt;非产生式是指无法通过一系列产生式替换得到一个由终结符组成的字符串的非终结符，比如&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
S &amp;amp;\to AB \mid a \
A &amp;amp;\to b\
B &amp;amp;\to bB \
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;可以发现$B \to bB$会无穷递归，所以它是一个非产生式，可以直接删掉:&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
S &amp;amp;\to a \
A &amp;amp;\to b\
\end{aligned}
$$&lt;/p&gt;
&lt;h4&gt;再消不可达&lt;/h4&gt;
&lt;p&gt;不可达符号是指无法从开始符号出发通过一系列产生式替换得到的非终结符，比如&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
S &amp;amp;\to AB \
A &amp;amp;\to aA \mid \epsilon \
B &amp;amp;\to bB \mid \epsilon \
C &amp;amp;\to c
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;$C$根本就产生不了，所以它是不可达，可以直接删掉&lt;/p&gt;
&lt;h2&gt;乔姆斯基范式(CNF)&lt;/h2&gt;
&lt;p&gt;乔姆斯基范式是一种特殊的上下文无关文法形式，所有的产生式都满足以下三种形式之一：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;$A \to BC$，其中 $A, B, C$ 是非终结符，且 $B$ 和 $C$ 不能是开始符号&lt;/li&gt;
&lt;li&gt;$A \to a$，其中 $A$ 是非终结符，$a$ 是终结符&lt;/li&gt;
&lt;li&gt;$S \to \epsilon$，当且仅当语言包含空串时，且$S$不可以出现在产生式右侧&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;将一个CFG转换成CNF的步骤&lt;/h3&gt;
&lt;p&gt;例子：&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
S &amp;amp;\to AB \mid a \
A &amp;amp;\to aA \mid \epsilon \
B &amp;amp;\to bB \mid \epsilon \
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;消除$\epsilon$-产生式：&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
S &amp;amp;\to AB \mid A \mid B \mid \epsilon \
A &amp;amp;\to aA \mid a \
B &amp;amp;\to bB \mid b \
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;消除单元产生式：&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
S &amp;amp;\to AB \mid aA \mid a \mid bB \mid b \mid \epsilon \
A &amp;amp;\to aA \mid a \
B &amp;amp;\to bB \mid b \
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;没有无用符号，不变&lt;/p&gt;
&lt;p&gt;引入新的非终结符：&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
S &amp;amp;\to \epsilon \
S &amp;amp;\to AB \mid a \mid b \
S &amp;amp;\to CA \mid DB \
A &amp;amp;\to CA \mid a \
B &amp;amp;\to DB \mid b \
C &amp;amp;\to a \
D &amp;amp;\to b \
\end{aligned}
$$&lt;/p&gt;
</content:encoded></item><item><title>[形式语言与自动机] 正则语言与正则表达式</title><link>https://alkaid114.github.io/posts/automata/regex/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/automata/regex/</guid><pubDate>Sat, 30 May 2026 16:25:00 GMT</pubDate><content:encoded>&lt;h2&gt;正则语言的定义&lt;/h2&gt;
&lt;p&gt;正则语言是在有限字母表 $\Sigma$ 上的一个集合，其中包含的元素是所有能被一个&lt;strong&gt;正则表达式/DFA/NFA&lt;/strong&gt;识别的字符串，正则语言是$\Sigma^*$的一个子集&lt;/p&gt;
&lt;h2&gt;正则表达式的定义&lt;/h2&gt;
&lt;p&gt;正则表达式是一个字符串，使用特定的语法规则来描述一个正则语言。正则表达式和DFA、NFA之间是等价的，即它们识别的正则语言是相同的&lt;/p&gt;
&lt;p&gt;$$
\text{正则表达式} \Leftrightarrow \text{DFA} \Leftrightarrow \text{NFA}
$$&lt;/p&gt;
&lt;p&gt;正则表达式由以下基本元素组成，且以下每个元素本身也是一个正则表达式：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;空集&lt;/strong&gt;：表示一个不包含任何字符串的语言，通常用符号 $\emptyset$ 表示&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;空字符串&lt;/strong&gt;：表示一个只包含空字符串的语言，通常用符号 $\epsilon$ 表示&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;单个符号&lt;/strong&gt;：对于每个输入符号 $a \in \Sigma$，表示一个只包含字符串 $a$ 的语言&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;连接&lt;/strong&gt;：如果 $R$ 和 $S$ 是正则表达式，那么 $RS$ 表示连接操作，表示由 $R$ 中的字符串连接 $S$ 中的字符串组成的语言，或多次连接，例如 $R^n$ 表示由 $R$ 中的字符串连接 $n$ 次组成的语言，$R^0={\epsilon}$&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;选择&lt;/strong&gt;：如果 $R$ 和 $S$ 是正则表达式，那么 $R|S$ 表示选择操作，表示由 $R$ 中的字符串或 $S$ 中的字符串组成的语言&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;闭包&lt;/strong&gt;：如果 $R$ 是一个正则表达式，那么 $R^*$ 表示闭包操作，表示由 $R$ 中的字符串重复零次或多次组成的语言&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;一个正则表达式通过有限次上述操作后生成的仍然是一个正则表达式，因此正则表达式可以&lt;strong&gt;递归定义&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;:::tip&lt;/p&gt;
&lt;p&gt;正闭包：$R^+$ 表示由 $R$ 中的字符串重复&lt;strong&gt;一次或多次&lt;/strong&gt;组成的语言，即 $R^+ = RR^*$&lt;/p&gt;
&lt;p&gt;克林闭包：$R^&lt;em&gt;$ 表示由 $R$ 中的字符串重复&lt;strong&gt;零次或多次&lt;/strong&gt;组成的语言，即 $R^&lt;/em&gt; = {\epsilon} \cup R^+$&lt;/p&gt;
&lt;p&gt;运算顺序：括号 &amp;gt; 闭包 &amp;gt; 连接 &amp;gt; 选择&lt;/p&gt;
&lt;p&gt;:::&lt;/p&gt;
&lt;h2&gt;例子&lt;/h2&gt;
&lt;p&gt;设计一个正则表达式匹配所有包含110但不能包含111的二进制字符串&lt;/p&gt;
&lt;p&gt;可以使用以下正则表达式：&lt;/p&gt;
&lt;p&gt;$$
(0+10)^&lt;em&gt;110(110+0+10)^&lt;/em&gt;(1+11+\epsilon)
$$&lt;/p&gt;
&lt;h2&gt;DFA/NFA转正则表达式&lt;/h2&gt;
&lt;p&gt;e.g. 现有一DFA，状态转移表如下：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;状态&lt;/th&gt;
&lt;th&gt;输入0&lt;/th&gt;
&lt;th&gt;输入1&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;$\rightarrow q_0$&lt;/td&gt;
&lt;td&gt;$q_1$&lt;/td&gt;
&lt;td&gt;$q_0$&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$q_1$&lt;/td&gt;
&lt;td&gt;$q_2$&lt;/td&gt;
&lt;td&gt;$q_0$&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$\ast q_2$&lt;/td&gt;
&lt;td&gt;$q_2$&lt;/td&gt;
&lt;td&gt;$q_2$&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;状态消除法&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;添加唯一的开始状态和接受状态(实际上这么处理完已经变NFA了)：&lt;/li&gt;
&lt;/ol&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;状态&lt;/th&gt;
&lt;th&gt;输入0&lt;/th&gt;
&lt;th&gt;输入1&lt;/th&gt;
&lt;th&gt;$\epsilon$&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;$\rightarrow S$&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;$q_0$&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$q_0$&lt;/td&gt;
&lt;td&gt;$q_1$&lt;/td&gt;
&lt;td&gt;$q_0$&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$q_1$&lt;/td&gt;
&lt;td&gt;$q_2$&lt;/td&gt;
&lt;td&gt;$q_0$&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$\ast q_2$&lt;/td&gt;
&lt;td&gt;$q_2$&lt;/td&gt;
&lt;td&gt;$q_2$&lt;/td&gt;
&lt;td&gt;$F$&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$\ast F$&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ol&gt;
&lt;li&gt;逐个消除中间状态：&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;经过步骤1后，中间状态是$q_0$和$q_1$，我们可以先消除$q2$：&lt;/p&gt;
&lt;p&gt;关注要消除的状态的&lt;strong&gt;入边&lt;/strong&gt;、&lt;strong&gt;自环&lt;/strong&gt;和&lt;strong&gt;出边&lt;/strong&gt;，将其替换为一个新的正则表达式，公式为：&lt;/p&gt;
&lt;p&gt;$$
\text{入边表达式} \cdot (\text{自环表达式})^* \cdot \text{出边表达式} + \text{入边来源到出边目标原有表达式}
$$&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$q_2$入边：$q_1 \xrightarrow{0} q_2$，则表达式为$0$&lt;/li&gt;
&lt;li&gt;$q_2$自环：$q_2 \xrightarrow{0} q_2, q_2 \xrightarrow{1} q_2$，则表达式为$0+1$&lt;/li&gt;
&lt;li&gt;$q_2$出边：$q_2 \xrightarrow{\epsilon} F$, 则表达式为$\epsilon$&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;所以消去$q_2$后，只有一个来源和一个目标，则只有$q_1$到$F$的边，$q_1$到$F$的表达式为：&lt;/p&gt;
&lt;p&gt;$$
0(0+1)^&lt;em&gt;\epsilon + \text{无} = 0(0+1)^&lt;/em&gt;
$$&lt;/p&gt;
&lt;p&gt;当前状态转移为：&lt;/p&gt;
&lt;p&gt;$$
S \xrightarrow{\epsilon} q_0, \quad q_0 \xrightarrow{0} q_1, \quad q_1 \xrightarrow{1} q_0, \quad q_0 \xrightarrow{1} q_0, \quad q_1 \xrightarrow{0(0+1)^*} F
$$&lt;/p&gt;
&lt;p&gt;消$q_1$:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;入边：$q_0 \xrightarrow{0} q_1$，则表达式为$0$&lt;/li&gt;
&lt;li&gt;自环：$q_1$没有自环，则表达式为$\epsilon$&lt;/li&gt;
&lt;li&gt;出边：$q_1 \xrightarrow{0(0+1)^&lt;em&gt;} F, q_1 \xrightarrow{1} q_0$，则表达式有$0(0+1)^&lt;/em&gt;$与$1$&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;则$q_0$到$F$的表达式为：&lt;/p&gt;
&lt;p&gt;$$
0 \cdot (\epsilon)^* \cdot 0(0+1)^* + \varnothing = 00(0+1)^*
$$&lt;/p&gt;
&lt;p&gt;$q_0$到$q_0$的表达式为：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;注意$q_0$到$q_0$已存在转移(自环)，不要忘记并上&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;$$
0 \cdot (\epsilon)^* \cdot 1 + 1 = 01 + 1
$$&lt;/p&gt;
&lt;p&gt;此时，状态转移为：&lt;/p&gt;
&lt;p&gt;$$
S \xrightarrow{\epsilon} q_0, \quad q_0 \xrightarrow{01 + 1} q_0, \quad q_0 \xrightarrow{00(0+1)^*} F
$$&lt;/p&gt;
&lt;p&gt;消$q_0$:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;入边：$S \xrightarrow{\epsilon} q_0$，则表达式为$\epsilon$&lt;/li&gt;
&lt;li&gt;自环：$q_0 \xrightarrow{01 + 1} q_0$，&lt;/li&gt;
&lt;li&gt;出边：$q_0 \xrightarrow{00(0+1)^&lt;em&gt;} F$，则表达式为$00(0+1)^&lt;/em&gt;$&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;则$S$到$F$的表达式为：&lt;/p&gt;
&lt;p&gt;$$
\epsilon \cdot (01 + 1)^* \cdot 00(0+1)^* + \varnothing = (01 + 1)^&lt;em&gt;00(0+1)^&lt;/em&gt;
$$&lt;/p&gt;
&lt;p&gt;则结果为：$(01 + 1)^&lt;em&gt;00(0+1)^&lt;/em&gt;$&lt;/p&gt;
&lt;h3&gt;$R^{(k)}_{ij}$递推法&lt;/h3&gt;
&lt;p&gt;首先为每个状态标注序号(给的DFA已经有了可以直接用)，则$R^{(k)}_{ij}$表示从状态$i$到状态$j$，经过的所有&lt;strong&gt;中间&lt;/strong&gt;状态(中间也就是不包含开始和结束状态)的序号不超过$k$的所有路径的正则表达式。&lt;/p&gt;
&lt;p&gt;也就是如果想得到上述DFA的正则表达式，我们需要计算$R^{(2)}_{02}$&lt;/p&gt;
&lt;h4&gt;递推公式&lt;/h4&gt;
&lt;p&gt;$$
R^{(k)}&lt;em&gt;{ij} = R^{(k-1)}&lt;/em&gt;{ij} + R^{(k-1)}&lt;em&gt;{ik} (R^{(k-1)}&lt;/em&gt;{kk})^* R^{(k-1)}_{kj}
$$&lt;/p&gt;
&lt;p&gt;含义为：&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
R^{(k)}_{ij} = &amp;amp;\text{不经过状态k就能从状态i到达状态j的所有路径} \ + &amp;amp;\text{能从i到达状态k但不经过k的所有路径} \ \cdot &amp;amp;(\text{状态k的自环})^* \ \cdot &amp;amp;\text{从状态k到达状态j但不经过k的所有路径}
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;开始递推：&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
R^{(2)}&lt;em&gt;{02} &amp;amp;= R^{(1)}&lt;/em&gt;{02} + R^{(1)}&lt;em&gt;{02} (R^{(1)}&lt;/em&gt;{22})^* R^{(1)}&lt;em&gt;{22} \[1em]
R^{(1)}&lt;/em&gt;{02} &amp;amp;= R^{(0)}&lt;em&gt;{02} + R^{(0)}&lt;/em&gt;{01} (R^{(0)}&lt;em&gt;{11})^* R^{(0)}&lt;/em&gt;{12} = \varnothing + R^{(0)}&lt;em&gt;{01} (R^{(0)}&lt;/em&gt;{11})^* 0 \
R^{(1)}&lt;em&gt;{22} &amp;amp;= R^{(0)}&lt;/em&gt;{22} + R^{(0)}&lt;em&gt;{22} (R^{(0)}&lt;/em&gt;{22})^* R^{(0)}&lt;em&gt;{22} = (0 + 1)^* +(0 + 1)^* ((0 + 1)^&lt;em&gt;)^&lt;/em&gt; (0 + 1)^* = (0 + 1)^* \[1em]
R^{(0)}&lt;/em&gt;{01} &amp;amp;= R^{(-1)}&lt;em&gt;{01} + R^{(-1)}&lt;/em&gt;{00} (R^{(-1)}&lt;em&gt;{00})^* R^{(-1)}&lt;/em&gt;{01} = 0 + 1 \cdot (1)^* \cdot 0 = 1^&lt;em&gt;0 \
R^{(0)}&lt;em&gt;{11} &amp;amp;= R^{(-1)}&lt;/em&gt;{11} + R^{(-1)}&lt;em&gt;{10} (R^{(-1)}&lt;/em&gt;{00})^&lt;/em&gt; R^{(-1)}_{01} = \varnothing + 1 \cdot (1)^* \cdot 0 = 11^*0
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;所以：&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
R^{(1)}&lt;em&gt;{02} &amp;amp;= 1^*0 (11^&lt;em&gt;0)^&lt;/em&gt; 0\
R^{(1)}&lt;/em&gt;{22} &amp;amp;= (0 + 1)^* \[2em]
R^{(2)}&lt;em&gt;{02} &amp;amp;= R^{(1)}&lt;/em&gt;{02} + R^{(1)}&lt;em&gt;{02} (R^{(1)}&lt;/em&gt;{22})^* R^{(1)}_{22} \
&amp;amp;= 1^&lt;em&gt;0 (11^&lt;em&gt;0)^&lt;/em&gt; 0 + 1^&lt;em&gt;0 (11^&lt;em&gt;0)^&lt;/em&gt; 0 ((0 + 1)^&lt;/em&gt;)^&lt;/em&gt; (0 + 1)^* \
&amp;amp;= 1^&lt;em&gt;0 (11^&lt;em&gt;0)^&lt;/em&gt; 0 (0 + 1)^&lt;/em&gt; \
\end{aligned}
$$&lt;/p&gt;
</content:encoded></item><item><title>[形式语言与自动机] NFA非确定有穷自动机</title><link>https://alkaid114.github.io/posts/automata/nfa/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/automata/nfa/</guid><pubDate>Sat, 30 May 2026 16:24:00 GMT</pubDate><content:encoded>&lt;h2&gt;非确定有穷自动机的定义&lt;/h2&gt;
&lt;p&gt;非确定有穷自动机（NFA）是一个五元组：&lt;/p&gt;
&lt;p&gt;$$A = (Q, \Sigma, \delta, q_0, F)$$&lt;/p&gt;
&lt;p&gt;其中：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$Q$ 是一个有限的状态集合&lt;/li&gt;
&lt;li&gt;$\Sigma$ 是一个有限的输入符号集合（字母表）&lt;/li&gt;
&lt;li&gt;$\delta: Q \times (\Sigma \cup {\epsilon}) \to 2^Q$ 是状态转移函数，定义了在给定状态和输入符号的情况下，自动机可以转移到哪些下一个状态。这里，$\epsilon$表示空字符串，允许自动机在没有输入符号的情况下进行状态转移&lt;/li&gt;
&lt;li&gt;$q_0 \in Q$ 是初始状态&lt;/li&gt;
&lt;li&gt;$F \subseteq Q$ 是终结状态集或接受状态集合&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;其中和DFA的区别在于$\delta$的定义，DFA的$\delta$是一个函数，定义了每个状态和输入符号对应一个唯一的下一个状态，而NFA的$\delta$是一个多值函数，定义了每个状态和输入符号对应一组可能的下一个状态&lt;/p&gt;
&lt;h2&gt;条件&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;转移是非确定的：对于每个状态 $q \in Q$ 和每个输入符号 $a \in \Sigma$，转移函数 $\delta(q, a)$ 定义了一组可能的下一个状态&lt;/li&gt;
&lt;li&gt;NFA在任何时候可以处于&lt;strong&gt;多个状态&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;NFA接受一个字符串，如果从初始状态出发，按照输入字符串的符号进行状态转移，最终停在一个接受状态上&lt;/li&gt;
&lt;li&gt;NFA拒绝一个字符串，如果从初始状态出发，按照输入字符串的符号进行状态转移，最终停在一个非接受状态上或者输入&lt;strong&gt;字符串仍有剩余但没有可用的转移&lt;/strong&gt;(即使当前停在接受状态上)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;NFA可以有ε-转移&lt;/strong&gt;，即可以在没有输入符号的情况下进行状态转移&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;关系&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;每个DFA都是一个NFA，因为DFA的转移函数满足NFA的定义&lt;/li&gt;
&lt;li&gt;每个NFA都可以转换成一个等价的DFA，虽然转换可能会导致状态数量的指数增长&lt;/li&gt;
&lt;li&gt;DFA和NFA接受同样的语言，即它们识别的语言类是相同的，称为正则语言&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;对于NFA的$\delta$的理解可以参考类UNIX系统调用的&lt;code&gt;fork&lt;/code&gt;，NFA的$\delta$就类似于&lt;code&gt;fork&lt;/code&gt;，允许自动机在当前状态下分叉成多个状态&lt;/p&gt;
&lt;h2&gt;转换成DFA-子集构造法&lt;/h2&gt;
&lt;p&gt;e.g.&lt;/p&gt;
&lt;p&gt;现有一NFA如下：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;状态&lt;/th&gt;
&lt;th&gt;输入0&lt;/th&gt;
&lt;th&gt;输入1&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;$\rightarrow q_0$&lt;/td&gt;
&lt;td&gt;${q_0, q_1}$&lt;/td&gt;
&lt;td&gt;${q_0}$&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$q_1$&lt;/td&gt;
&lt;td&gt;${q_2}$&lt;/td&gt;
&lt;td&gt;${q_1}$&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$\ast q_2$&lt;/td&gt;
&lt;td&gt;${q_2}$&lt;/td&gt;
&lt;td&gt;${q_2}$&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;通过子集构造法得到DFA：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;状态&lt;/th&gt;
&lt;th&gt;输入0&lt;/th&gt;
&lt;th&gt;输入1&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;$\rightarrow {q_0}$&lt;/td&gt;
&lt;td&gt;${q_0, q_1}$&lt;/td&gt;
&lt;td&gt;${q_0}$&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;${q_0, q_1}$&lt;/td&gt;
&lt;td&gt;${q_0, q_1, q_2}$&lt;/td&gt;
&lt;td&gt;${q_0, q_1}$&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$\ast {q_0, q_1, q_2}$&lt;/td&gt;
&lt;td&gt;${q_0, q_1, q_2}$&lt;/td&gt;
&lt;td&gt;${q_0, q_1, q_2}$&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;也就是把状态的集合作为一个新状态，每次输入后把所有输出收集起来拼成一个集合作为新的状态，直到没有新的状态产生为止&lt;/p&gt;
</content:encoded></item><item><title>[形式语言与自动机] DFA确定有穷自动机</title><link>https://alkaid114.github.io/posts/automata/dfa/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/automata/dfa/</guid><pubDate>Sat, 30 May 2026 16:20:00 GMT</pubDate><content:encoded>&lt;h2&gt;确定有穷自动机的定义&lt;/h2&gt;
&lt;p&gt;确定有穷自动机（DFA）是一个五元组：&lt;/p&gt;
&lt;p&gt;$$A = (Q, \Sigma, \delta, q_0, F)$$&lt;/p&gt;
&lt;p&gt;其中：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$Q$ 是一个有限的状态集合&lt;/li&gt;
&lt;li&gt;$\Sigma$ 是一个有限的输入符号集合（字母表）&lt;/li&gt;
&lt;li&gt;$\delta: Q \times \Sigma \to Q$ 是状态转移函数，定义了在给定状态和输入符号的情况下，自动机如何转移到下一个状态&lt;/li&gt;
&lt;li&gt;$q_0 \in Q$ 是初始状态&lt;/li&gt;
&lt;li&gt;$F \subseteq Q$ 是终结状态集或接受状态集合&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;条件&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;转移是确定且唯一的：对于每个状态 $q \in Q$ 和每个输入符号 $a \in \Sigma$，转移函数 $\delta(q, a)$ 定义了一个唯一的下一个状态&lt;/li&gt;
&lt;li&gt;DFA在任何时候只能处于一个状态&lt;/li&gt;
&lt;li&gt;DFA接受一个字符串，如果从初始状态出发，按照输入字符串的符号进行状态转移，最终停在一个接受状态上&lt;/li&gt;
&lt;li&gt;DFA拒绝一个字符串，如果从初始状态出发，按照输入字符串的符号进行状态转移，最终停在一个非接受状态上&lt;/li&gt;
&lt;li&gt;DFA不能有ε-转移，即不能在没有输入符号的情况下进行状态转移&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;DFA最小化&lt;/h2&gt;
&lt;p&gt;设有以下DFA：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;状态&lt;/th&gt;
&lt;th&gt;0&lt;/th&gt;
&lt;th&gt;1&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;$\rightarrow q_0$&lt;/td&gt;
&lt;td&gt;$q_1$&lt;/td&gt;
&lt;td&gt;$q_2$&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$q_1$&lt;/td&gt;
&lt;td&gt;$q_3$&lt;/td&gt;
&lt;td&gt;$q_4$&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$q_2$&lt;/td&gt;
&lt;td&gt;$q_3$&lt;/td&gt;
&lt;td&gt;$q_4$&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$\ast q_3$&lt;/td&gt;
&lt;td&gt;$q_3$&lt;/td&gt;
&lt;td&gt;$q_3$&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$\ast q_4$&lt;/td&gt;
&lt;td&gt;$q_4$&lt;/td&gt;
&lt;td&gt;$q_4$&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Moore算法(填表法，推荐使用)&lt;/h3&gt;
&lt;p&gt;接受状态有$q_3, q_4$，非接受状态有$q_0, q_1, q_2$&lt;/p&gt;
&lt;p&gt;首先需要得到所有&lt;strong&gt;无序状态对&lt;/strong&gt;，即所有状态两两组合的集合，因此按如下所示画表格：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;横轴没有$q_0$，纵轴没有$q_4$，这样正好错开($(q_n,q_n)$没有用)，当然都写上也是可以的，只是为了省空间&lt;/p&gt;
&lt;/blockquote&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;$q_1$&lt;/th&gt;
&lt;th&gt;$q_2$&lt;/th&gt;
&lt;th&gt;$q_3$&lt;/th&gt;
&lt;th&gt;$q_4$&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;$q_0$&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$q_1$&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$q_2$&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$q_3$&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4&gt;首轮标记&lt;/h4&gt;
&lt;p&gt;只要状态对里两个状态不是相同类型的状态（一个是接受状态，一个是非接受状态），就标记为不同，标记为&lt;code&gt;X&lt;/code&gt;，即：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;只关注$(q_n,q_m), n &amp;lt; m$，因此只标记上三角部分&lt;/p&gt;
&lt;/blockquote&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;$q_1$&lt;/th&gt;
&lt;th&gt;$q_2$&lt;/th&gt;
&lt;th&gt;$q_3$&lt;/th&gt;
&lt;th&gt;$q_4$&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;$q_0$&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;X&lt;/td&gt;
&lt;td&gt;X&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$q_1$&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;X&lt;/td&gt;
&lt;td&gt;X&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$q_2$&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;X&lt;/td&gt;
&lt;td&gt;X&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$q_3$&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4&gt;迭代&lt;/h4&gt;
&lt;p&gt;检查尚未被&lt;code&gt;X&lt;/code&gt;标记的状态对，对其尝试每个输入符号，检查要转移到的下一状态属于的状态对是否已被&lt;code&gt;X&lt;/code&gt;标记，如果是，则当前状态对也标记为&lt;code&gt;X&lt;/code&gt;，否则不标记。&lt;/p&gt;
&lt;p&gt;还剩$(q_0,q_1), (q_0,q_2), (q_1,q_2), (q_3,q_4)$，检查：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$(q_0,q_1)$，输入0转移到$(q_1,q_3)$，已标记为&lt;code&gt;X&lt;/code&gt;，因此标记$(q_0,q_1)$为&lt;code&gt;X&lt;/code&gt;，无需再试1&lt;/li&gt;
&lt;li&gt;$(q_0,q_2)$，输入0转移到$(q_1,q_3)$，已标记为&lt;code&gt;X&lt;/code&gt;，因此标记$(q_0,q_2)$为&lt;code&gt;X&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;$(q_1,q_2)$，输入0转移到$(q_3,q_3)$，未标记，输入1转移到$(q_4,q_4)$，未标记，因此不标记&lt;/li&gt;
&lt;li&gt;$(q_3,q_4)$，输入0转移到$(q_3,q_4)$，未标记，输入1转移到$(q_3,q_4)$，未标记，因此不标记&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;$q_1$&lt;/th&gt;
&lt;th&gt;$q_2$&lt;/th&gt;
&lt;th&gt;$q_3$&lt;/th&gt;
&lt;th&gt;$q_4$&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;$q_0$&lt;/td&gt;
&lt;td&gt;X&lt;/td&gt;
&lt;td&gt;X&lt;/td&gt;
&lt;td&gt;X&lt;/td&gt;
&lt;td&gt;X&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$q_1$&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;X&lt;/td&gt;
&lt;td&gt;X&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$q_2$&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;X&lt;/td&gt;
&lt;td&gt;X&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$q_3$&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;再次迭代：&lt;/p&gt;
&lt;p&gt;还剩$(q_1,q_2), (q_3,q_4)$，检查：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$(q_1,q_2)$，输入0转移到$(q_3,q_3)$，未标记，输入1转移到$(q_4,q_4)$，未标记，因此不标记&lt;/li&gt;
&lt;li&gt;$(q_3,q_4)$，输入0转移到$(q_3,q_4)$，未标记，输入1转移到$(q_3,q_4)$，未标记，因此不标记&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;转移到的都是自身，迭代完成&lt;/p&gt;
&lt;p&gt;最终所有没被画&lt;code&gt;X&lt;/code&gt;的状态对是可合并的等价状态&lt;/p&gt;
&lt;p&gt;空白的有$(q_1,q_2), (q_3,q_4)$，因此可以合并为两个状态，最终得到最小化DFA：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;状态&lt;/th&gt;
&lt;th&gt;0&lt;/th&gt;
&lt;th&gt;1&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;$\rightarrow q_0$&lt;/td&gt;
&lt;td&gt;${q_1, q_2 }$&lt;/td&gt;
&lt;td&gt;${q_3, q_4}$&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$\ast {q_1, q_2}$&lt;/td&gt;
&lt;td&gt;${q_3, q_4}$&lt;/td&gt;
&lt;td&gt;${q_3, q_4}$&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$\ast {q_3, q_4}$&lt;/td&gt;
&lt;td&gt;${q_3, q_4}$&lt;/td&gt;
&lt;td&gt;${q_3, q_4}$&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;划分法&lt;/h3&gt;
&lt;p&gt;容易错，不写了&lt;/p&gt;
</content:encoded></item><item><title>[人工智能数学基础] 向量&amp;矩阵求导</title><link>https://alkaid114.github.io/posts/ai_math/vec_derive/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/ai_math/vec_derive/</guid><pubDate>Wed, 13 May 2026 20:54:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;注：分母布局&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;$$
\begin{aligned}
\frac{\partial \mathbf{a}^T \mathbf{x}}{\partial \mathbf{x}} &amp;amp;= \mathbf{a} \[1em]
\frac{\partial \mathbf{x}^T \mathbf{a}}{\partial \mathbf{x}} &amp;amp;= \mathbf{a} \[1em]
\frac{\partial \mathbf{x}^T \mathbf{x}}{\partial \mathbf{x}} &amp;amp;= 2\mathbf{x} \[1em]
\frac{\partial \mathbf{a}^T A \mathbf{x}}{\partial \mathbf{x}} &amp;amp;= A^T \mathbf{a} \[1em]
\frac{\partial \mathbf{x}^T A \mathbf{a}}{\partial \mathbf{x}} &amp;amp;= A \mathbf{a} \[1em]
\frac{\partial \mathbf{x}^T A \mathbf{x}}{\partial \mathbf{x}} &amp;amp;= (A + A^T) \mathbf{x}
\end{aligned}
$$&lt;/p&gt;
</content:encoded></item><item><title>[人工智能数学基础] 凸优化</title><link>https://alkaid114.github.io/posts/ai_math/convex_opt/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/ai_math/convex_opt/</guid><pubDate>Mon, 04 May 2026 09:37:00 GMT</pubDate><content:encoded>&lt;h2&gt;凸集&lt;/h2&gt;
&lt;p&gt;凸集是指对于集合中的任意两点，连接这两点的线段也完全包含在该集合中&lt;/p&gt;
&lt;p&gt;性质：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;交集：任意数量的凸集的交集仍然是凸集&lt;/li&gt;
&lt;li&gt;凸包：任意集合的凸包是包含该集合的最小凸集&lt;/li&gt;
&lt;li&gt;仿射变换：凸集在仿射变换下仍然是凸集(仿射变换：线性变换 $\cup$ 平移)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;凸函数&lt;/h2&gt;
&lt;p&gt;一个函数 $f: \mathbb{R}^n \to \mathbb{R}$ 是凸函数，如果对于任意 $x, y \in \mathbb{R}^n$ 和 $\lambda \in [0, 1]$，满足：&lt;/p&gt;
&lt;p&gt;$$f(\lambda x + (1 - \lambda) y) \leq \lambda f(x) + (1 - \lambda) f(y)$$&lt;/p&gt;
&lt;p&gt;对于一元标量函数 $f: \mathbb{R} \to \mathbb{R}$，就是函数上的任意两点之间的线段在函数图像上方&lt;/p&gt;
&lt;h2&gt;琴生不等式&lt;/h2&gt;
&lt;p&gt;若 $f$ 是一个凸函数，则对于任意 $x, y \in \mathbb{R}^n$ 和 $\lambda \in [0, 1]$，有：&lt;/p&gt;
&lt;p&gt;$$f(\lambda x + (1 - \lambda) y) \leq \lambda f(x) + (1 - \lambda) f(y)$$&lt;/p&gt;
&lt;h2&gt;线性规划问题&lt;/h2&gt;
&lt;p&gt;线性规划问题是指优化一个线性目标函数，约束条件也是线性的优化问题&lt;/p&gt;
&lt;h3&gt;标准形式&lt;/h3&gt;
&lt;p&gt;$$
\begin{aligned}
\max \quad &amp;amp; c^T x \
\text{s.t.} \quad &amp;amp; Ax \leq b \
&amp;amp; x \geq 0
\end{aligned}
$$&lt;/p&gt;
&lt;h3&gt;代数法解线性规划问题&lt;/h3&gt;
</content:encoded></item><item><title>[人工智能数学基础] 不确定度量与熵</title><link>https://alkaid114.github.io/posts/ai_math/info/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/ai_math/info/</guid><pubDate>Sun, 03 May 2026 14:45:00 GMT</pubDate><content:encoded>&lt;h2&gt;自信息量&lt;/h2&gt;
&lt;p&gt;一个随机事件的自信息量定义为该事件发生的概率的负对数：&lt;/p&gt;
&lt;p&gt;$$I(x) = -\log P(x)$$&lt;/p&gt;
&lt;p&gt;信息量的单位取决于对数所用的底数&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;2: 比特&lt;/li&gt;
&lt;li&gt;$e$: 奈特&lt;/li&gt;
&lt;li&gt;10: 哈特&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;该事件的不确定性越大，信息量越大；反之亦然&lt;/p&gt;
&lt;p&gt;满足相加性：对于两个&lt;strong&gt;独立事件&lt;/strong&gt; $x$ 和 $y$，有&lt;/p&gt;
&lt;p&gt;$$I(x, y) = -\log(P(x)P(y)) = -\log P(x) -\log P(y) = I(x) + I(y)$$&lt;/p&gt;
&lt;h2&gt;熵&lt;/h2&gt;
&lt;p&gt;熵是一个随机变量的不确定性的度量。对于一个离散随机变量 $X$，其熵定义为：&lt;/p&gt;
&lt;p&gt;$$H(X) = -\sum_{x \in X} P(x) \log P(x)$$&lt;/p&gt;
&lt;p&gt;熵是自信息量的&lt;strong&gt;期望&lt;/strong&gt;值，表示平均每个事件的信息量&lt;/p&gt;
&lt;p&gt;因此也满足自信息量的性质&lt;/p&gt;
&lt;h2&gt;互信息量&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;由于已知变量 $Y$ 的值，变量 $X$ 的不确定性减少了多少？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;假设有两个随机变量 $X$ 和 $Y$，它们的联合概率分布为 $P(X, Y)$，边缘概率分布分别为 $P(X)$ 和 $P(Y)$&lt;/p&gt;
&lt;p&gt;互信息量定义为：&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
I(X; Y) &amp;amp;= \sum_{x \in X} \sum_{y \in Y} P(x, y) \log \frac{P(x, y)}{P(x)P(y)} \[1.5em]
&amp;amp;= H(X) - H(X|Y) \
&amp;amp;= H(X) + H(Y) - H(X, Y)
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;性质：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;非负性：$I(X; Y) \geq 0$&lt;/li&gt;
&lt;li&gt;对称性：$I(X; Y) = I(Y; X)$&lt;/li&gt;
&lt;li&gt;极值：$I(X; Y) \leq \min(H(X), H(Y))$&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;交叉熵&lt;/h2&gt;
&lt;p&gt;交叉熵是衡量两个概率分布之间差异的度量。对于两个概率分布 $P$ 和 $Q$，交叉熵定义为：&lt;/p&gt;
&lt;p&gt;$$H(P, Q) = -\sum_{x} P(x) \log Q(x)$$&lt;/p&gt;
&lt;p&gt;交叉熵可以看作是使用分布 $Q$ 来编码分布 $P$ 的平均编码长度&lt;/p&gt;
&lt;p&gt;交叉熵与 KL 散度的关系：&lt;/p&gt;
&lt;p&gt;$$H(P, Q) = H(P) + D_{KL}(P | Q)$$&lt;/p&gt;
&lt;h2&gt;相对熵（KL 散度）&lt;/h2&gt;
&lt;p&gt;KL 散度是衡量两个概率分布之间差异的度量。对于两个概率分布 $P$ 和 $Q$，KL 散度定义为：&lt;/p&gt;
&lt;p&gt;$$D_{KL}(P | Q) = \sum_{x} P(x) \log \frac{P(x)}{Q(x)}$$&lt;/p&gt;
&lt;p&gt;KL 散度可以看作是使用分布 $Q$ 来编码分布 $P$ 的额外编码长度&lt;/p&gt;
&lt;p&gt;KL 散度的性质：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;非负性：$D_{KL}(P | Q) \geq 0$&lt;/li&gt;
&lt;li&gt;不对称性：$D_{KL}(P | Q) \neq D_{KL}(Q | P)$&lt;/li&gt;
&lt;li&gt;当且仅当 $P = Q$ 时，$D_{KL}(P | Q) = 0$&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;詹森不等式&lt;/h2&gt;
&lt;p&gt;詹森不等式是一个重要的数学工具，用于证明熵和 KL 散度的非负性。对于一个&lt;strong&gt;凸&lt;/strong&gt;函数 $f$ 和一个随机变量 $X$，詹森不等式表明：&lt;/p&gt;
&lt;p&gt;$$f(\mathbb{E}[X]) \leq \mathbb{E}[f(X)]$$&lt;/p&gt;
</content:encoded></item><item><title>[人工智能数学基础] 快速写出旋转矩阵</title><link>https://alkaid114.github.io/posts/ai_math/rotate/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/ai_math/rotate/</guid><pubDate>Sat, 25 Apr 2026 14:28:00 GMT</pubDate><content:encoded>&lt;h2&gt;旋转方向&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;常见的都是右手坐标系&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;右手螺旋定则：大拇指指向旋转轴的正方向时，四指弯曲的方向就是旋转的正方向&lt;/p&gt;
&lt;p&gt;也就是从旋转轴正方向看去的&lt;strong&gt;逆时针&lt;/strong&gt;为正($\theta &amp;gt; 0$)&lt;/p&gt;
&lt;h2&gt;二维旋转矩阵&lt;/h2&gt;
&lt;p&gt;只需先写出二维空间的正交基：&lt;/p&gt;
&lt;p&gt;$$
\mathbf{e_1} = \begin{bmatrix}1 \ 0\end{bmatrix}, \quad \mathbf{e_2} = \begin{bmatrix}0 \ 1\end{bmatrix}
$$&lt;/p&gt;
&lt;p&gt;然后将它们分别旋转$\theta$角度，得到新的基：&lt;/p&gt;
&lt;p&gt;$$
\mathbf{e_1&apos;} = \begin{bmatrix}\cos \theta \ \sin \theta\end{bmatrix}, \quad \mathbf{e_2&apos;} = \begin{bmatrix}-\sin \theta \ \cos \theta\end{bmatrix}
$$&lt;/p&gt;
&lt;p&gt;最后将新的基按列拼成矩阵：&lt;/p&gt;
&lt;p&gt;$$
R = \begin{bmatrix}\cos \theta &amp;amp; -\sin \theta \ \sin \theta &amp;amp; \cos \theta\end{bmatrix}
$$&lt;/p&gt;
&lt;h2&gt;三维(以及更高维)旋转矩阵&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;只是二维旋转的推广&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;只需保持未旋转的基不变，另外两个被旋转的基的「旋转轴上的分量」为0即可&lt;/p&gt;
&lt;p&gt;e.g.: 绕$z$轴旋转$\theta$角度：&lt;/p&gt;
&lt;p&gt;此时「旋转轴上的分量」就是$z$轴上的分量，所以$\mathbf{e_3}$不变，$\mathbf{e_1}$和$\mathbf{e_2}$的$z$轴分量为0：&lt;/p&gt;
&lt;p&gt;$$
R_z = \begin{bmatrix}\cos \theta &amp;amp; -\sin \theta &amp;amp; 0 \ \sin \theta &amp;amp; \cos \theta &amp;amp; 0 \ 0 &amp;amp; 0 &amp;amp; 1\end{bmatrix}
$$&lt;/p&gt;
</content:encoded></item><item><title>[人工智能数学基础] 重数</title><link>https://alkaid114.github.io/posts/ai_math/multiplicity/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/ai_math/multiplicity/</guid><pubDate>Sat, 25 Apr 2026 14:21:00 GMT</pubDate><content:encoded>&lt;p&gt;设$A$是一个$n \times n$的矩阵，$\lambda$是$A$的一个特征值&lt;/p&gt;
&lt;h2&gt;几何重数(GM)&lt;/h2&gt;
&lt;p&gt;对应于特征值$\lambda$的特征向量中线性无关的最大个数&lt;/p&gt;
&lt;p&gt;其实就是$(A - \lambda I)$的零空间的维度&lt;/p&gt;
&lt;p&gt;e.g.: 如果$\lambda = 2$的特征向量中线性无关的就只有一个$\mathbf{v_1}$，则$\lambda = 2$的几何重数是1&lt;/p&gt;
&lt;h2&gt;代数重数(AM)&lt;/h2&gt;
&lt;p&gt;$\lambda$的代数重数是解特征方程时该$\lambda$解出来的次数&lt;/p&gt;
&lt;p&gt;e.g.: $(\lambda - 2)^3 = 0$，则$\lambda = 2$的代数重数是3&lt;/p&gt;
&lt;h2&gt;关系(对于每个特征值$\lambda$)&lt;/h2&gt;
&lt;p&gt;$$
1 \leq \text{几何重数} \leq \text{代数重数}
$$&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;如果$\text{几何重数} = \text{代数重数}$，则矩阵$A$是可对角化的&lt;/li&gt;
&lt;li&gt;如果$\text{几何重数} &amp;lt; \text{代数重数}$，则矩阵$A$是不可对角化的，称为&lt;strong&gt;亏缺矩阵&lt;/strong&gt;(defective matrix)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;不同特征值的特征向量一定线性无关，所以不同特征值的几何重数一定是1，换言之，如果仅有一个线性无关的特征向量，那么一定存在重复特征值，也就是亏缺矩阵&lt;/p&gt;
</content:encoded></item><item><title>[人工智能数学基础] 秩-零度化定理</title><link>https://alkaid114.github.io/posts/ai_math/rank_null/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/ai_math/rank_null/</guid><pubDate>Sat, 25 Apr 2026 14:08:00 GMT</pubDate><content:encoded>&lt;h2&gt;秩-零度化定理&lt;/h2&gt;
&lt;p&gt;设$A$是一个$m \times n$的矩阵，则有：&lt;/p&gt;
&lt;p&gt;$$\text{rank}(A) + \text{nullity}(A) = n$$&lt;/p&gt;
&lt;h2&gt;一些相关性质&lt;/h2&gt;
&lt;p&gt;$$
\text{rank}(A) = \text{行空间维度} = \text{列空间维度}
$$&lt;/p&gt;
&lt;h3&gt;行空间和零空间是正交补&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;列空间不是&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;$$
A\mathbf{x} = 0 \quad \text{当且仅当} \quad \mathbf{x} \in \text{零空间}
$$&lt;/p&gt;
&lt;p&gt;由此可得$A$的零空间中每个向量$\mathbf{x}$都会与$A$的行空间中的每个向量$\mathbf{a}_i$满足：&lt;/p&gt;
&lt;p&gt;$$
\mathbf{a}_i^T \mathbf{x} = 0
$$&lt;/p&gt;
&lt;p&gt;内积得0说明它们是正交的&lt;/p&gt;
&lt;p&gt;:::note&lt;/p&gt;
&lt;p&gt;左零空间和列空间是正交补&lt;/p&gt;
&lt;p&gt;$$
\mathbf{y}^T A = \mathbf{0} \quad \text{当且仅当} \quad \mathbf{y} \in \text{左零空间}
$$&lt;/p&gt;
&lt;p&gt;:::&lt;/p&gt;
</content:encoded></item><item><title>[人工智能数学基础] 雅可比与海森矩阵</title><link>https://alkaid114.github.io/posts/ai_math/grad/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/ai_math/grad/</guid><pubDate>Sat, 25 Apr 2026 13:44:00 GMT</pubDate><content:encoded>&lt;h2&gt;雅可比矩阵&lt;/h2&gt;
&lt;p&gt;设$f: \mathbb{R}^n \to \mathbb{R}^m$是一个向量值函数&lt;/p&gt;
&lt;p&gt;$$
f(x_1, x_2, \ldots, x_n) = \begin{bmatrix}f_1(x_1, x_2, \ldots, x_n) \
f_2(x_1, x_2, \ldots, x_n) \
\vdots \
f_m(x_1, x_2, \ldots, x_n)\end{bmatrix}
$$&lt;/p&gt;
&lt;p&gt;则雅可比矩阵为：&lt;/p&gt;
&lt;p&gt;$$
J_f = \begin{bmatrix}
\dfrac{\partial f_1}{\partial x_1} &amp;amp; \dfrac{\partial f_1}{\partial x_2} &amp;amp; \cdots &amp;amp; \dfrac{\partial f_1}{\partial x_n} \
\dfrac{\partial f_2}{\partial x_1} &amp;amp; \dfrac{\partial f_2}{\partial x_2} &amp;amp; \cdots &amp;amp; \dfrac{\partial f_2}{\partial x_n} \
\vdots &amp;amp; \vdots &amp;amp; \ddots &amp;amp; \vdots \
\dfrac{\partial f_m}{\partial x_1} &amp;amp; \dfrac{\partial f_m}{\partial x_2} &amp;amp; \cdots &amp;amp; \dfrac{\partial f_m}{\partial x_n}
\end{bmatrix}_{m \times n}
$$&lt;/p&gt;
&lt;h2&gt;海森矩阵&lt;/h2&gt;
&lt;p&gt;设$f: \mathbb{R}^n \to \mathbb{R}$是一个标量值函数&lt;/p&gt;
&lt;p&gt;其雅可比矩阵为：&lt;/p&gt;
&lt;p&gt;$$
J_f = \begin{bmatrix}
\dfrac{\partial f}{\partial x_1} &amp;amp; \dfrac{\partial f}{\partial x_2} &amp;amp; \cdots &amp;amp; \dfrac{\partial f}{\partial x_n}
\end{bmatrix}_{1 \times n}
$$&lt;/p&gt;
&lt;p&gt;则海森矩阵为对雅可比矩阵某行($f$是标量函数时就一行)的每个元素求所有二阶偏导数：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;或者可以说海森矩阵是「雅可比矩阵的转置的雅可比矩阵」&lt;/p&gt;
&lt;p&gt;$H_f = J(\nabla f) = J(J_f^T)$&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;$$
H_f = \begin{bmatrix}
\dfrac{\partial^2 f}{\partial x_1^2} &amp;amp; \dfrac{\partial^2 f}{\partial x_1 \partial x_2} &amp;amp; \cdots &amp;amp; \dfrac{\partial^2 f}{\partial x_1 \partial x_n} \
\dfrac{\partial^2 f}{\partial x_2 \partial x_1} &amp;amp; \dfrac{\partial^2 f}{\partial x_2^2} &amp;amp; \cdots &amp;amp; \dfrac{\partial^2 f}{\partial x_2 \partial x_n} \
\vdots &amp;amp; \vdots &amp;amp; \ddots &amp;amp; \vdots \
\dfrac{\partial^2 f}{\partial x_n \partial x_1} &amp;amp; \dfrac{\partial^2 f}{\partial x_n \partial x_2} &amp;amp; \cdots &amp;amp; \dfrac{\partial^2 f}{\partial x_n^2}
\end{bmatrix}_{n \times n}
$$&lt;/p&gt;
&lt;p&gt;:::tip&lt;/p&gt;
&lt;p&gt;如果$f$是一个向量值函数($f: \mathbb{R}^n \to \mathbb{R}^m$)，则海森矩阵是一个$m \times n \times n$的张量&lt;/p&gt;
&lt;p&gt;:::&lt;/p&gt;
&lt;h3&gt;海森矩阵性质&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;海森矩阵是对称矩阵：$H_f^T = H_f$(通常情况下，除非$f$的二阶偏导数不连续)&lt;/li&gt;
&lt;li&gt;海森矩阵的特征值可以用来判断函数的极值性质：
&lt;ul&gt;
&lt;li&gt;如果$H_f$的所有特征值都大于0(正定)，则$f$在该点是局部极小值&lt;/li&gt;
&lt;li&gt;如果$H_f$的所有特征值都小于0(负定)，则$f$在该点是局部极大值&lt;/li&gt;
&lt;li&gt;如果$H_f$的特征值有正又有负(不定)，则$f$在该点是一个鞍点&lt;/li&gt;
&lt;li&gt;如果$H_f$的特征值中有0且非零值同号或全为0(奇异)，则需要进一步分析才能确定极值性质&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>[人工智能数学基础] Sherman-Morrison公式及其变体</title><link>https://alkaid114.github.io/posts/ai_math/sherman-morrison/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/ai_math/sherman-morrison/</guid><pubDate>Wed, 22 Apr 2026 16:03:00 GMT</pubDate><content:encoded>&lt;p&gt;假设我们刚刚算完一个巨大的矩阵$A$的逆矩阵$A^{-1}$，但现在$A$被加上了一个秩为1的微扰(一个向量外积$uv^T$)，Sherman-Morrison公式让我们可以基于$A^{-1}$快速计算出新的矩阵$(A + uv^T)^{-1}$的逆矩阵，而不需要重新计算整个逆矩阵&lt;/p&gt;
&lt;h2&gt;Sherman-Morrison恒等式&lt;/h2&gt;
&lt;p&gt;$$
(A + uv^T)^{-1} = A^{-1} - \frac{A^{-1}uv^TA^{-1}}{1 + v^TA^{-1}u}
$$&lt;/p&gt;
&lt;p&gt;前提条件是$1 + v^TA^{-1}u \neq 0$，否则新的矩阵将不可逆(很明显分母不能为零)&lt;/p&gt;
&lt;h2&gt;Sherman-Morrison-Woodbury恒等式&lt;/h2&gt;
&lt;p&gt;$A$为$d \times d$的可逆矩阵，若$U$和$V$分别是$d \times k$和$d \times k$的矩阵，$k$为较小的值时：&lt;/p&gt;
&lt;p&gt;$$
(A + UV^T)^{-1} = A^{-1} - A^{-1}U(I + V^TA^{-1}U)^{-1}V^TA^{-1}
$$&lt;/p&gt;
&lt;p&gt;前提条件是$I + V^TA^{-1}U$必须可逆&lt;/p&gt;
</content:encoded></item><item><title>[人工智能数学基础] 最小二乘法</title><link>https://alkaid114.github.io/posts/ai_math/ols/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/ai_math/ols/</guid><pubDate>Tue, 21 Apr 2026 17:58:00 GMT</pubDate><content:encoded>&lt;h2&gt;最小二乘法的线代表示&lt;/h2&gt;
&lt;p&gt;给定$m$个数据点 $(x_i, y_i)$，我们希望找到一个函数 $f(x)$ 来拟合这些数据点&lt;/p&gt;
&lt;p&gt;设拟合目标函数为:&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
f(x) &amp;amp;= a_0 + a_1 x + a_2 x^2 + \cdots + a_n x^n \
&amp;amp;= \begin{bmatrix}
1 &amp;amp; x &amp;amp; x^2 &amp;amp; \cdots &amp;amp; x^n
\end{bmatrix}
\begin{bmatrix}
a_0 \ a_1 \ a_2 \ \vdots \ a_n
\end{bmatrix}
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;所以我们的目标就是求解参数向量 $\mathbf{a} = [a_0, a_1, a_2, \cdots, a_n]^T$&lt;/p&gt;
&lt;p&gt;于是可以将该拟合问题转化成一个解线性方程组问题：&lt;/p&gt;
&lt;p&gt;将每个数据点 $(x_i, y_i)$ 代入拟合函数 $f(x)$ 中，我们得到以下&lt;strong&gt;超定&lt;/strong&gt;方程组($m &amp;gt; n$)：&lt;/p&gt;
&lt;h1&gt;$$
\begin{bmatrix}
1 &amp;amp; x_1 &amp;amp; x_1^2 &amp;amp; \cdots &amp;amp; x_1^n \
1 &amp;amp; x_2 &amp;amp; x_2^2 &amp;amp; \cdots &amp;amp; x_2^n \
1 &amp;amp; x_3 &amp;amp; x_3^2 &amp;amp; \cdots &amp;amp; x_3^n \
\vdots &amp;amp; \vdots &amp;amp; \vdots &amp;amp; \ddots &amp;amp; \vdots \
1 &amp;amp; x_m &amp;amp; x_m^2 &amp;amp; \cdots &amp;amp; x_m^n
\end{bmatrix}
\begin{bmatrix}
a_0 \ a_1 \ a_2 \ \vdots \ a_n
\end{bmatrix}&lt;/h1&gt;
&lt;p&gt;\begin{bmatrix}
y_1 \ y_2 \ y_3 \ \vdots \ y_m
\end{bmatrix}
$$&lt;/p&gt;
&lt;p&gt;简写为：&lt;/p&gt;
&lt;p&gt;$$
\mathbf{X} \mathbf{a} = \mathbf{y}
$$&lt;/p&gt;
&lt;p&gt;可以看到$X$的维度是$m \times (n+1)$，这个方程肯定是无精确解的，所以我们需要定义&lt;strong&gt;残差向量&lt;/strong&gt;(损失)$\mathbf{r}$为真实值与预测值之差：&lt;/p&gt;
&lt;p&gt;$$
\mathbf{r} = \mathbf{y} - \mathbf{X} \mathbf{a}
$$&lt;/p&gt;
&lt;p&gt;但$r$是一个向量，为了直观且便于计算，通常使用&lt;strong&gt;残差平方和&lt;/strong&gt;(RSS)来衡量拟合的好坏：&lt;/p&gt;
&lt;p&gt;$$
RSS(\mathbf{a}) = \Vert \mathbf{r} \Vert^2 = (\mathbf{y} - \mathbf{X} \mathbf{a})^T (\mathbf{y} - \mathbf{X} \mathbf{a})
$$&lt;/p&gt;
&lt;p&gt;为了找到$RSS(\mathbf{a})$的最小值，我们对$\mathbf{a}$求导并设置为零：&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
\frac{\partial RSS}{\partial \mathbf{a}} &amp;amp;= -2 \mathbf{X}^T (\mathbf{y} - \mathbf{X} \mathbf{a}) \
&amp;amp;= -2 \mathbf{X}^T \mathbf{y} + 2 \mathbf{X}^T \mathbf{X} \mathbf{a}
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;设置导数为零：&lt;/p&gt;
&lt;p&gt;$$
-2 \mathbf{X}^T \mathbf{y} + 2 \mathbf{X}^T \mathbf{X} \mathbf{a} = 0
$$&lt;/p&gt;
&lt;p&gt;简化得到了最小二乘法的&lt;strong&gt;正规方程&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;$$
\mathbf{a} = (\mathbf{X}^T \mathbf{X})^{-1} \mathbf{X}^T \mathbf{y}
$$&lt;/p&gt;
&lt;p&gt;如果此时$\mathbf{X}^T \mathbf{X}$恰好满秩(可逆)且是良态，那就直接解吧&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;#%E7%9F%A9%E9%98%B5%E7%9A%84%E6%9D%A1%E4%BB%B6%E6%95%B0&quot;&gt;什么是良态&amp;amp;病态&amp;amp;条件数&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;如果$\mathbf{X}^T \mathbf{X}$不可逆或病态怎么办&lt;/h2&gt;
&lt;h3&gt;SVD奇异值分解(伪逆)&lt;/h3&gt;
&lt;p&gt;其实用这个方法的话不到正规方程那步就可以&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
\mathbf{X} &amp;amp;= \mathbf{U} \Sigma \mathbf{V}^T \
\mathbf{a} &amp;amp;= X^{-1}\mathbf{y} \
&amp;amp;= X^\dagger \mathbf{y} \
&amp;amp;= \mathbf{V} \Sigma^{\dagger} \mathbf{U}^T \mathbf{y}
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;$\Sigma^{\dagger}$是$\Sigma$的伪逆，计算方法是将$\Sigma$中非零奇异值取倒数，0奇异值保持为0，然后转置&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;除了又重又慢以外毫无缺点&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;L2正则化(岭回归, Ridge, Tikhonov正则化)&lt;/h3&gt;
&lt;p&gt;正则化就是在残差基础上加上一个惩罚项，来限制模型的复杂度，防止数值不稳定&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
J(\mathbf{a}) &amp;amp;= RSS(\mathbf{a}) + \lambda \Vert \mathbf{a} \Vert^2_2 \
&amp;amp;= (\mathbf{y} - \mathbf{X} \mathbf{a})^T (\mathbf{y} - \mathbf{X} \mathbf{a}) + \lambda \mathbf{a}^T \mathbf{a}
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;直观上理解就像用一个圆形围墙将$\mathbf{a}$限制在一个范围内，当$\Vert \mathbf{a} \Vert_2$变大，损失会迅速增大，所以&lt;strong&gt;岭回归&lt;/strong&gt;这个名字很形象&lt;/p&gt;
&lt;p&gt;对$J(\mathbf{a})$求导并设置为零：&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
\frac{\partial J}{\partial \mathbf{a}} &amp;amp;= -2 \mathbf{X}^T (\mathbf{y} - \mathbf{X} \mathbf{a}) + 2 \lambda \mathbf{a} \
&amp;amp;= -2 \mathbf{X}^T \mathbf{y} + 2 \mathbf{X}^T \mathbf{X} \mathbf{a} + 2 \lambda \mathbf{a}
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;设置导数为零得到带L2正则化的正规方程：&lt;/p&gt;
&lt;p&gt;$$
\mathbf{a} = (\mathbf{X}^T \mathbf{X} + \lambda \mathbf{I})^{-1} \mathbf{X}^T \mathbf{y}
$$&lt;/p&gt;
&lt;p&gt;其中$\mathbf{I}$是单位矩阵，$\lambda$是正则化强度的&lt;strong&gt;超参数&lt;/strong&gt;，通常需要通过交叉验证来选择合适的$\lambda$值&lt;/p&gt;
&lt;h3&gt;L1正则化(套索回归, Lasso)&lt;/h3&gt;
&lt;p&gt;L1正则化的损失函数定义为：&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
J(\mathbf{a}) &amp;amp;= RSS(\mathbf{a}) + \lambda \Vert \mathbf{a} \Vert_1 \
&amp;amp;= (\mathbf{y} - \mathbf{X} \mathbf{a})^T (\mathbf{y} - \mathbf{X} \mathbf{a}) + \lambda \sum_{i=1}^{n} |a_i|
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;这东西有绝对值，不可导，也就没有对应的正规方程，只能用数值优化方法来求解&lt;/p&gt;
&lt;p&gt;其中一个最常见的是&lt;strong&gt;坐标下降法&lt;/strong&gt;，它的核心思想是每次固定其他参数，只优化一个参数，交替进行直到收敛&lt;/p&gt;
&lt;p&gt;优化目标：&lt;/p&gt;
&lt;p&gt;$$
\min_{\mathbf{a}} \frac{1}{2} \Vert \mathbf{y} - \mathbf{X} \mathbf{a} \Vert^2_2 + \lambda \Vert \mathbf{a} \Vert_1
$$&lt;/p&gt;
&lt;p&gt;:::tip
$RSS(\mathbf{a})$变成$\dfrac{1}{2} \Vert \mathbf{y} - \mathbf{X} \mathbf{a} \Vert^2_2$是因为在优化过程中这两个损失是等价的(都是二次函数)，$\dfrac{1}{2}$纯是为了求导完跟2消掉好看
:::&lt;/p&gt;
&lt;p&gt;计算部分残差：&lt;/p&gt;
&lt;p&gt;$$
\rho_j = \mathbf{x}&lt;em&gt;j^T(\mathbf{y} - \sum&lt;/em&gt;{k \neq j} a_k \mathbf{x}_k)
$$&lt;/p&gt;
&lt;p&gt;其中$\mathbf{x}_j$是$\mathbf{X}$的第$j$列，$a_k$是参数向量$\mathbf{a}$的第$k$个元素，左乘$\mathbf{x}_j^T$是投影(内积)，部分残差的含义为「当第$j$个参数不参与拟合时，剩余的误差与第$j$个特征的相关程度」&lt;/p&gt;
&lt;p&gt;软阈值算子：&lt;/p&gt;
&lt;p&gt;$$
a_j = \begin{cases}
\dfrac{\rho_j}{\Vert \mathbf{x}_j \Vert^2} &amp;amp; \text{if } j = 0 \quad \text{(偏移量)} \[1em]
\dfrac{\rho_j - \lambda}{\Vert \mathbf{x}_j \Vert^2} &amp;amp; \text{if } \rho_j &amp;gt; \lambda \[1em]
\dfrac{\rho_j + \lambda}{\Vert \mathbf{x}_j \Vert^2} &amp;amp; \text{if } \rho_j &amp;lt; -\lambda \[1em]
0 &amp;amp; \text{if } |\rho_j| \leq \lambda
\end{cases}
$$&lt;/p&gt;
&lt;p&gt;原理是$\rho_j$大于$|\lambda|$就往里收一点，小于就直接变0，把偏移量单独拿出来是防止偏移量被限制活动范围，导致无法拟合偏离中心的数据，除以$\Vert \mathbf{x}_j \Vert^2$是为了归一化特征的尺度&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;部分&lt;/strong&gt;更新残差向量：&lt;/p&gt;
&lt;p&gt;为了避免每次迭代都重新计算巨大的矩阵乘法，所以采用增量更新&lt;/p&gt;
&lt;p&gt;$$
\mathbf{r}&lt;em&gt;{\text{new}} = \mathbf{r}&lt;/em&gt;{\text{old}} -  \mathbf{x}_j(a_j - a_j^{\text{old}})
$$&lt;/p&gt;
&lt;h2&gt;矩阵的条件数&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;理论上可逆不代表工程上真的能用，因为数值计算中可能会遇到&lt;strong&gt;病态矩阵&lt;/strong&gt;，即矩阵的条件数非常大，导致解不稳定&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;矩阵$\mathbf{X}$的条件数定义为：&lt;/p&gt;
&lt;p&gt;$$
\kappa(\mathbf{X}) = \Vert \mathbf{X} \Vert \cdot \Vert \mathbf{X}^{-1} \Vert
$$&lt;/p&gt;
&lt;p&gt;其中$\Vert \cdot \Vert$表示某种范数，$\kappa(\mathbf{X}) \in [1, +\infty)$&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;良态: $\kappa(\mathbf{X})$接近1，说明$\mathbf{X}$的列向量之间&lt;strong&gt;强&lt;/strong&gt;线性无关(高度正交)，解稳定&lt;/li&gt;
&lt;li&gt;病态: $\kappa(\mathbf{X})$很大，说明$\mathbf{X}$的列向量之间&lt;strong&gt;接近&lt;/strong&gt;线性相关，解不稳定，对输入的微小变化可能导致输出的巨大变化&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Hager算法&lt;/h3&gt;
&lt;p&gt;Hager算法用于估算条件数公式中的$\Vert \mathbf{A}^{-1} \Vert$:&lt;/p&gt;
&lt;p&gt;优化目标：&lt;/p&gt;
&lt;p&gt;$$
\max \Vert \mathbf{A^{-1}} \mathbf{v} \Vert_1 \quad \text{其中 } \Vert \mathbf{v} \Vert_1 = 1
$$&lt;/p&gt;
&lt;p&gt;在单位球面上找一个向量$\mathbf{v}$，使得被$\mathbf{A^{-1}}$变换后的向量最长&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;先随机选一个初始向量$\mathbf{b}$&lt;/li&gt;
&lt;li&gt;解方程组$\mathbf{A} \mathbf{x} = \mathbf{b}$(使用LU分解)，得到$\mathbf{x} = \mathbf{A^{-1}} \mathbf{b}$&lt;/li&gt;
&lt;li&gt;对$f= \Vert \mathbf{x} \Vert_1$求梯度&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;$$
\nabla_{\mathbf{b}} f = (\frac{\partial \mathbf{x}}{\partial \mathbf{b}})^T \nabla_{\mathbf{\mathbf{x}}} f = (A^{-1})^T \nabla_{\mathbf{x}} f = (A^T)^{-1} \nabla_{\mathbf{x}} f
$$&lt;/p&gt;
&lt;p&gt;因为绝对值函数的梯度是符号函数，所以$\nabla_{\mathbf{x}} f = \text{sign}(\mathbf{x})$&lt;/p&gt;
&lt;p&gt;得到:&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
\mathbf{z} &amp;amp;= (A^T)^{-1} \text{sign}(\mathbf{x}) \[1em]
A^T \mathbf{z} &amp;amp;= \text{sign}(\mathbf{x})
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;解方程组$\mathbf{A}^T \mathbf{z} = \text{sign}(\mathbf{x})$得到$\mathbf{z}$(刚刚已经对$A$进行过LU分解，此步很快)，得到绝对值最大分量的索引$j=\arg \max_i |z_i|$，如果$|z_j| &amp;gt; z^T\mathbf{b}$，说明在$j$的方向上可以找到一个更大的值，所以更新$\mathbf{b}$为单位向量$\mathbf{e}_j$并重复以上过程，否则说明已经找到最大值了，此时$\mathbf{b}$就是算法结果&lt;/p&gt;
</content:encoded></item><item><title>[人工智能数学基础] 矩阵分解</title><link>https://alkaid114.github.io/posts/ai_math/decomp/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/ai_math/decomp/</guid><pubDate>Sun, 19 Apr 2026 10:33:00 GMT</pubDate><content:encoded>&lt;p&gt;工程上通常会用矩阵分解来求解线性方程组&lt;/p&gt;
&lt;h2&gt;LU分解&lt;/h2&gt;
&lt;p&gt;将矩阵分解为一个下三角矩阵和一个上三角矩阵的乘积：&lt;/p&gt;
&lt;p&gt;$$A = LU$$&lt;/p&gt;
&lt;p&gt;其中$L$是下三角矩阵，$U$是上三角矩阵&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;下三角矩阵：所有元素在主对角线以下的矩阵，主对角线元素可以是任意值&lt;/li&gt;
&lt;li&gt;上三角矩阵：所有元素在主对角线以上的矩阵，主对角线元素可以是任意值&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;LU手算方法&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;将矩阵$A$进行高斯消元，得到一个上三角矩阵$U$，消元时$R_i - k R_j$(第$i$行减去第$j$行的$k$倍)的系数$k$就是下三角矩阵$L$中元素$l_{ij}$的值&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;e.g.:&lt;/p&gt;
&lt;p&gt;$$
A = \begin{bmatrix} 2 &amp;amp; 3 \ 4 &amp;amp; 7 \end{bmatrix} \quad \rightarrow \quad
U = \begin{bmatrix} 2 &amp;amp; 3 \ 0 &amp;amp; 1 \end{bmatrix} \quad \rightarrow \quad
L = \begin{bmatrix} 1 &amp;amp; 0 \ 2 &amp;amp; 1 \end{bmatrix}
$$&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[!NOTE]
定型文：直接解$Ax = b$和先LU分解再解方程，复杂度都是$O(n^3)$，为什么还要分解？&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;LU分解可以复用：如果要解多个方程$Ax = b_i$，只需要一次LU分解，后续每个方程的求解复杂度是$O(n^2)$，比直接解每个方程的$O(n^3)$更高效&lt;/li&gt;
&lt;li&gt;空间复杂度低：LU分解为&quot;原地&quot;操作，可用原A的空间存储L和U&lt;/li&gt;
&lt;li&gt;行列式计算简单：$\det(A) = \det(L) \cdot \det(U)$，其中$\det(L) = 1$，所以$\det(A) = \prod_{i=1}^n u_{ii}$，只需要计算上三角矩阵$U$的对角线元素的乘积即可&lt;/li&gt;
&lt;li&gt;数值稳定性：LU分解可以通过部分选主元来提高数值稳定性，避免除以小数导致的误差放大&lt;/li&gt;
&lt;li&gt;求逆更快&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;h2&gt;QR分解&lt;/h2&gt;
&lt;p&gt;将矩阵分解为一个正交矩阵和一个上三角矩阵的乘积：&lt;/p&gt;
&lt;p&gt;$$A = QR$$&lt;/p&gt;
&lt;p&gt;其中$Q$是正交矩阵，$R$是上三角矩阵&lt;/p&gt;
&lt;h3&gt;QR手算方法&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;使用格拉姆-施密特正交化方法将矩阵$A$的列向量正交化，得到一个正交矩阵$Q$，正交化过程中每个列向量的长度就是上三角矩阵$R$中的元素&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;e.g.:&lt;/p&gt;
&lt;p&gt;$$
A = \begin{bmatrix} 3 &amp;amp; 1 \ 4 &amp;amp; 2 \end{bmatrix} \[1em]
A = \left [ \mathbf{a_1}, \mathbf{a_2} \right ] \
Q = \left [ \mathbf{q_1}, \mathbf{q_2} \right ]
$$&lt;/p&gt;
&lt;p&gt;先算$\mathbf{q_1}$：&lt;/p&gt;
&lt;p&gt;$$
\mathbf{q_1} = \frac{\mathbf{a_1}}{\Vert \mathbf{a_1}\Vert} = \frac{1}{5} \begin{bmatrix} 3 \ 4 \end{bmatrix}
$$&lt;/p&gt;
&lt;p&gt;然后算$\mathbf{a_2}$在$\mathbf{q_1}$上的投影：&lt;/p&gt;
&lt;p&gt;$$
\text{proj}_{\mathbf{q_1}} \mathbf{a_2} = \left( \frac{\mathbf{a_2} \cdot \mathbf{q_1}}{\mathbf{q_1} \cdot \mathbf{q_1}} \right) \mathbf{q_1} = \frac{11}{25} \begin{bmatrix} 3 \ 4 \end{bmatrix}
$$&lt;/p&gt;
&lt;p&gt;得垂直向量$\mathbf{v_2}$：&lt;/p&gt;
&lt;p&gt;$$
\mathbf{v_2} = \mathbf{a_2} - \text{proj}_{\mathbf{q_1}} \mathbf{a_2} = \begin{bmatrix} 1 \ 2 \end{bmatrix} - \frac{11}{25} \begin{bmatrix} 3 \ 4 \end{bmatrix} = \frac{1}{25} \begin{bmatrix} -8 \ 6 \end{bmatrix}
$$&lt;/p&gt;
&lt;p&gt;最后算$\mathbf{q_2}$：&lt;/p&gt;
&lt;p&gt;$$
\mathbf{q_2} = \frac{\mathbf{v_2}}{\Vert \mathbf{v_2} \Vert} = \frac{1}{10} \begin{bmatrix} -8 \ 6 \end{bmatrix}
$$&lt;/p&gt;
&lt;p&gt;得到：&lt;/p&gt;
&lt;p&gt;$$
Q = \frac{1}{5} \begin{bmatrix} 3 &amp;amp; -4 \ 4 &amp;amp; 3 \end{bmatrix} \quad \rightarrow \quad
R = Q^T A = \begin{bmatrix}
\Vert \mathbf{a_1} \Vert &amp;amp; \Vert \mathbf{\text{proj}_{\mathbf{q_1}} \mathbf{a_2}} \Vert \
0 &amp;amp; \Vert \mathbf{v_2} \Vert
\end{bmatrix} = \begin{bmatrix} 5 &amp;amp; 2.2 \ 0 &amp;amp; 0.4 \end{bmatrix}
$$&lt;/p&gt;
&lt;h2&gt;奇异值分解(SVD)&lt;/h2&gt;
&lt;p&gt;$$A = U \Sigma V^T$$&lt;/p&gt;
&lt;p&gt;其中$U$是左奇异矩阵，$\Sigma$是对角矩阵，$V^T$是右奇异矩阵的转置&lt;/p&gt;
&lt;h3&gt;SVD手算&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;这你要考手算那我还说啥了，分不要了呗&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;特征值分解(EVD)&lt;/h2&gt;
&lt;p&gt;$$A = PDP^{-1}$$&lt;/p&gt;
&lt;p&gt;其中$P$是特征向量矩阵，$D$是特征值对角矩阵&lt;/p&gt;
&lt;h3&gt;EVD手算&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;计算矩阵$A$的特征值$\lambda$，通过求解特征多项式$\det(A - \lambda I) = 0$得到&lt;/li&gt;
&lt;li&gt;对于每个特征值$\lambda$，求解特征向量$\mathbf{v}$，通过求解线性方程组$(A - \lambda I)\mathbf{v} = 0$得到&lt;/li&gt;
&lt;li&gt;把特征值摆在$D$的对角线上，把对应的特征向量摆在$P$的列向量上&lt;/li&gt;
&lt;li&gt;还要求$P^{-1}$，如果是对称矩阵，特征向量相互正交，$P$是正交矩阵，$P^{-1} = P^T$，否则需要通过其他方法求逆&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Cholesky(科列斯基)分解&lt;/h2&gt;
&lt;p&gt;$$A = LL^T$$&lt;/p&gt;
&lt;p&gt;其中$L$是下三角矩阵&lt;/p&gt;
&lt;h3&gt;Cholesky手算&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;LU分解升级版&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol&gt;
&lt;li&gt;对角线元素：$l_{ii} = \sqrt{a_{ii} - \sum_{k=1}^{i-1} l_{ik}^2}$&lt;/li&gt;
&lt;li&gt;非对角线元素：$l_{ij} = \frac{1}{l_{jj}} \left( a_{ij} - \sum_{k=1}^{j-1} l_{ik} l_{jk} \right)$，其中$i &amp;gt; j$&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;e.g.:&lt;/p&gt;
&lt;p&gt;$$
A = \begin{bmatrix}
a_{11} &amp;amp; a_{12} &amp;amp; a_{13} \ a_{21} &amp;amp; a_{22} &amp;amp; a_{23} \ a_{31} &amp;amp; a_{32} &amp;amp; a_{33}
\end{bmatrix}
L = \begin{bmatrix}
l_{11} &amp;amp; 0 &amp;amp; 0 \ l_{21} &amp;amp; l_{22} &amp;amp; 0 \ l_{31} &amp;amp; l_{32} &amp;amp; l_{33}
\end{bmatrix}
$$&lt;/p&gt;
&lt;p&gt;先算第一列：&lt;/p&gt;
&lt;p&gt;$$
l_{11} = \sqrt{a_{11}} \[1em]
l_{21} = \frac{a_{21}}{l_{11}} \[1em]
l_{31} = \frac{a_{31}}{l_{11}}
$$&lt;/p&gt;
&lt;p&gt;然后算第二列：&lt;/p&gt;
&lt;p&gt;$$
l_{22} = \sqrt{a_{22} - l_{21}^2} \[1em]
l_{32} = \frac{1}{l_{22}} \left( a_{32} - l_{31} l_{21} \right)
$$&lt;/p&gt;
&lt;p&gt;最后算第三列：&lt;/p&gt;
&lt;p&gt;$$
l_{33} = \sqrt{a_{33} - (l_{31}^2 + l_{32}^2)}
$$&lt;/p&gt;
</content:encoded></item><item><title>[人工智能数学基础] 正则化</title><link>https://alkaid114.github.io/posts/ai_math/regular/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/ai_math/regular/</guid><pubDate>Sun, 19 Apr 2026 10:05:00 GMT</pubDate><content:encoded>&lt;p&gt;在训练过程中引入额外的约束或惩罚项，以防止模型过拟合，提高泛化能力&lt;/p&gt;
&lt;h2&gt;L1正则化(Lasso正则化)&lt;/h2&gt;
&lt;p&gt;在损失函数中加入模型参数的L1范数，定义为：&lt;/p&gt;
&lt;p&gt;$$L = L_0 + \lambda \Vert w\Vert_1$$&lt;/p&gt;
&lt;p&gt;其中$L_0$是原始损失函数，$w$是模型参数，$\lambda$是正则化强度的超参数
L1正则化的效果：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;稀疏性：倾向于产生稀疏的模型参数，即许多参数被压缩为零，从而实现特征选择&lt;/li&gt;
&lt;li&gt;适用于高维数据：在特征数量远大于样本数量的情况下，L1正则化可以有效地选择重要特征&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;L1正则化不可导，只能通过各种迭代优化算法求解，类似于：&lt;/p&gt;
&lt;p&gt;$$w_i = \begin{cases}
0 &amp;amp; \text{if } |w_i| \leq \lambda \
w_i - \lambda &amp;amp; \text{if } w_i &amp;gt; \lambda \
w_i + \lambda &amp;amp; \text{if } w_i &amp;lt; -\lambda
\end{cases}$$&lt;/p&gt;
&lt;h2&gt;L2正则化(Tikhonov正则化或岭(Ridge)回归)&lt;/h2&gt;
&lt;p&gt;$$ L = L_0 + \lambda \Vert w\Vert_2^2$$&lt;/p&gt;
&lt;p&gt;L2正则化的效果：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;权重衰减(Weight Decay)：倾向于产生较小的模型参数，但不会将它们压缩为零，从而实现权重衰减&lt;/li&gt;
&lt;li&gt;适用于多重共线性：在特征之间存在高度相关性的情况下，L2正则化可以稳定模型的训练过程&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;L2正则化可导，可直接求解：&lt;/p&gt;
&lt;p&gt;$$w = (X^TX + \lambda I)^{-1} X^Ty$$&lt;/p&gt;
&lt;p&gt;其中可以得到彭罗斯伪逆的形式：&lt;/p&gt;
&lt;p&gt;$$
w = X^\dagger y
$$&lt;/p&gt;
&lt;p&gt;$$
X^\dagger = \lim_{\lambda \to 0} (X^TX + \lambda I)^{-1} X^T \quad \text{适用于超定方程} \
X^\dagger = \lim_{\lambda \to 0} X^T (XX^T + \lambda I)^{-1} \quad \text{适用于欠定方程}
$$&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;超定方程：样本多于特征，行多列少($m &amp;gt; n$)，$(X^TX + \lambda I)$是$n \times n$矩阵，算得快&lt;/p&gt;
&lt;p&gt;欠定方程：样本少于特征，行少列多($m &amp;lt; n$)，$(XX^T + \lambda I)$是$m \times m$矩阵&lt;/p&gt;
&lt;/blockquote&gt;
</content:encoded></item><item><title>[人工智能数学基础] 上下采样矩阵</title><link>https://alkaid114.github.io/posts/ai_math/sampling/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/ai_math/sampling/</guid><pubDate>Sun, 19 Apr 2026 10:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;上采样矩阵&lt;/h2&gt;
&lt;p&gt;增加原向量的维度，插入零元素：&lt;/p&gt;
&lt;p&gt;$$
x = \begin{bmatrix} x_1 \ x_2  \end{bmatrix} \quad \rightarrow \quad
U = \begin{bmatrix} 1 &amp;amp; 0  \
0 &amp;amp; 0 \
0 &amp;amp; 1 \
0 &amp;amp; 0 \end{bmatrix} \quad \rightarrow \quad
Ux = \begin{bmatrix} x_1 \ 0 \ x_2 \ 0 \end{bmatrix}
$$&lt;/p&gt;
&lt;h2&gt;下采样矩阵&lt;/h2&gt;
&lt;p&gt;减少原向量的维度，丢弃元素：&lt;/p&gt;
&lt;p&gt;$$
x = \begin{bmatrix} x_1 \ x_2 \ x_3 \ x_4 \end{bmatrix} \quad \rightarrow \quad
D = \begin{bmatrix} 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \
0 &amp;amp; 0 &amp;amp; 1 &amp;amp; 0 \end{bmatrix} \quad \rightarrow \quad
Dx = \begin{bmatrix} x_1 \ x_3 \end{bmatrix}
$$&lt;/p&gt;
&lt;h2&gt;上下采样矩阵的性质&lt;/h2&gt;
&lt;p&gt;根据上面两个例子，可以发现：&lt;/p&gt;
&lt;p&gt;$$
U = D^T \
DU = I \
D \text{是}U\text{的左逆矩阵}
$$&lt;/p&gt;
</content:encoded></item><item><title>[人工智能数学基础] 一些矩阵基本概念</title><link>https://alkaid114.github.io/posts/ai_math/matrix/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/ai_math/matrix/</guid><pubDate>Sat, 18 Apr 2026 14:14:00 GMT</pubDate><content:encoded>&lt;h2&gt;秩(Rank)&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;矩阵的维数&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;线性无关的行或列的最大数量&lt;/p&gt;
&lt;p&gt;计算方法：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;高斯消元法：通过行变换将矩阵化为行阶梯形，非零行的数量即为秩&lt;/li&gt;
&lt;li&gt;奇异值分解(SVD)：矩阵的秩等于其非零奇异值的数量&lt;/li&gt;
&lt;li&gt;行列式：对于方阵，如果行列式不为零，则秩等于矩阵的大小；如果行列式为零，则秩小于矩阵的大小&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;迹(Trace)&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;矩阵的能量&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;矩阵对角线元素的和：&lt;/p&gt;
&lt;p&gt;$$\text{tr}(A) = \sum_{i=1}^n a_{ii}$$&lt;/p&gt;
&lt;p&gt;迹的性质：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;轮换不变性：$\text{tr}(AB) = \text{tr}(BA)$&lt;/li&gt;
&lt;li&gt;线性：$\text{tr}(A + B) = \text{tr}(A) + \text{tr}(B)$，$\text{tr}(\alpha A) = \alpha \text{tr}(A)$&lt;/li&gt;
&lt;li&gt;$\text{tr}(A^&lt;em&gt;) = \overline{\text{tr}(A)}$，其中$A^&lt;/em&gt;$是$A$的共轭转置&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Spark&lt;/h2&gt;
&lt;p&gt;线性相关的列的最小数量&lt;/p&gt;
&lt;p&gt;越大说明矩阵越稀疏&lt;/p&gt;
&lt;p&gt;当要找一个$k$-稀疏的解(即解中最多有$k$个非零元素，$\Vert \mathbf{x} \Vert_0 \leq k$)时，若满足：&lt;/p&gt;
&lt;p&gt;$$\Vert \mathbf{x} \Vert_0 &amp;lt; \frac{\text{spark}(A)}{2}$$&lt;/p&gt;
&lt;p&gt;则该解是唯一的&lt;/p&gt;
&lt;h2&gt;共轭矩阵&lt;/h2&gt;
&lt;p&gt;共轭矩阵是指矩阵元素取共轭复数后的矩阵，记为$A^*$或$\overline{A}$：&lt;/p&gt;
&lt;p&gt;$$\overline{A} = [\overline{a_{ij}}]$$&lt;/p&gt;
&lt;p&gt;如果$A$是实数矩阵，则$\overline{A} = A$&lt;/p&gt;
&lt;h2&gt;共轭转置矩阵(也称为伴随或埃尔米特共轭)&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;此「伴随」和线性代数课里的「伴随矩阵」不是一个概念&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;共轭转置矩阵是指先取共轭矩阵再转置(其实先后都一样)的矩阵，记为$A^H$或$A^*$：&lt;/p&gt;
&lt;p&gt;$$A^* = \overline{A}^T$$&lt;/p&gt;
&lt;p&gt;如果$A$是实数矩阵，则$A^* = A^T$&lt;/p&gt;
&lt;p&gt;若$A^* = A$，则称$A$为埃尔米特矩阵(也称自伴矩阵)，其特征值为实数&lt;/p&gt;
&lt;p&gt;若$A^* = -A$，则称$A$为斜(反)埃尔米特矩阵，其特征值为纯虚数或0&lt;/p&gt;
&lt;h2&gt;酉(Unitary)矩阵&lt;/h2&gt;
&lt;p&gt;$U$是酉矩阵当且仅当$U^* U = U U^* = I$&lt;/p&gt;
&lt;p&gt;性质:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$U^{-1} = U^*$&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;实正交(Real Orthogonal)矩阵(酉矩阵的特殊情况)&lt;/h2&gt;
&lt;p&gt;$A$是正交矩阵当且仅当$A^T A = I$&lt;/p&gt;
&lt;p&gt;性质:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$A^{-1} = A^T$&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;正规(Normal)矩阵&lt;/h2&gt;
&lt;p&gt;$A$是正规矩阵当且仅当$A^* A = A A^*$&lt;/p&gt;
&lt;h2&gt;正定矩阵&lt;/h2&gt;
&lt;p&gt;$A$是正定矩阵当且仅当对于所有非零向量$x$，有$x^* A x &amp;gt; 0$&lt;/p&gt;
&lt;h2&gt;半正定矩阵&lt;/h2&gt;
&lt;p&gt;$A$是半正定矩阵当且仅当对于所有向量$x$，有$x^* A x \geq 0$&lt;/p&gt;
&lt;h2&gt;对合(Involution)矩阵&lt;/h2&gt;
&lt;p&gt;$A$是对合矩阵当且仅当$A^2 = I$&lt;/p&gt;
&lt;h2&gt;幂等(Idempotent)矩阵&lt;/h2&gt;
&lt;p&gt;$A$是幂等矩阵当且仅当$A^2 = A$&lt;/p&gt;
&lt;h2&gt;摩尔-彭若斯(Moore-Penrose)伪逆矩阵&lt;/h2&gt;
&lt;p&gt;方程$AX = B$无解时，$A$的伪逆$A^\dagger$可以提供一个最小二乘解：&lt;/p&gt;
&lt;p&gt;$$
A^\dagger = (A^* A)^{-1} A^* \quad \text{(当$A$列满秩时)} \
X = A^\dagger B
$$&lt;/p&gt;
&lt;p&gt;条件：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$AA^\dagger A = A$&lt;/li&gt;
&lt;li&gt;$A^\dagger A A^\dagger = A^\dagger$&lt;/li&gt;
&lt;li&gt;$(AA^\dagger)^T = AA^\dagger$&lt;/li&gt;
&lt;li&gt;$(A^\dagger A)^T = A^\dagger A$&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Gram矩阵&lt;/h2&gt;
&lt;p&gt;每个元素是两个向量的内积&lt;/p&gt;
&lt;p&gt;$$ G = A^* A $$&lt;/p&gt;
&lt;p&gt;性质:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;是埃尔米特矩阵&lt;/li&gt;
&lt;li&gt;是半正定矩阵&lt;/li&gt;
&lt;li&gt;$G$可逆 $\Leftrightarrow$ $A$列满秩(线性无关)&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>[人工智能数学基础] 空间</title><link>https://alkaid114.github.io/posts/ai_math/space/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/ai_math/space/</guid><pubDate>Sat, 18 Apr 2026 14:14:00 GMT</pubDate><content:encoded>&lt;h2&gt;向量空间&lt;/h2&gt;
&lt;p&gt;向量空间是一个集合，满足以下条件：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;向量加法：对于任意向量$u$和$v$，有$u + v$也是向量空间中的元素&lt;/li&gt;
&lt;li&gt;数乘封闭：对于任意向量$u$和标量$\alpha$，有$\alpha u$也是向量空间中的元素&lt;/li&gt;
&lt;li&gt;存在零向量：存在$\mathbf{0}$，使得对于任意向量$u$，有$u + \mathbf{0} = u$&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;常见的向量空间包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$\mathbb{R}^n$：所有$n$维实数向量的集合&lt;/li&gt;
&lt;li&gt;$\mathbb{C}^n$：所有$n$维复数向量的集合&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;子空间&lt;/h2&gt;
&lt;p&gt;子空间是向量空间的一个子集，满足以下条件：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;包含零向量：$\mathbf{0} \in W$&lt;/li&gt;
&lt;li&gt;加法封闭性：对于任意$u, v \in W$，有$u + v \in W$&lt;/li&gt;
&lt;li&gt;数乘封闭性：对于任意$u \in W$和标量$\alpha$，有$\alpha u \in W$&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Span张成空间/生成空间&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;$Span$是一组向量经过线性组合后能到达的所有位置&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;$Span$的结果一定是一个子空间&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;$$
S = \left {v_1, v_2, ..., v_k \right } \
Span(S) = \left { c_1 v_1 + c_2 v_2 + ... + c_k v_k | c_i \in \mathbb{R} \right }
$$&lt;/p&gt;
&lt;h2&gt;和&lt;/h2&gt;
&lt;p&gt;$U$和$W$是向量空间$V$的子空间，则$U$和$W$的和定义为：&lt;/p&gt;
&lt;p&gt;$$
U + W = { u + w | u \in U, w \in W }
$$&lt;/p&gt;
&lt;h3&gt;直和&lt;/h3&gt;
&lt;p&gt;当$U \cap W = {\mathbf{0}}$时，称$U + W$为$U$和$W$的直和，记为$U \oplus W$。此时，$V$中每个向量可以唯一表示为$u + w$的形式&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;重点在于唯一性&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;基&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;子空间的最小生成集合&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;基是一个向量集合，满足以下条件：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;线性无关：集合中的向量之间没有线性关系&lt;/li&gt;
&lt;li&gt;张成空间：集合中的向量可以通过线性组合生成整个空间&lt;/li&gt;
&lt;li&gt;基中向量个数等于空间的维数&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;lt;!-- ## 内积空间&lt;/p&gt;
&lt;p&gt;内积空间是在向量空间的基础上满足内积封闭性的空间&lt;/p&gt;
&lt;p&gt;常见的内积(标准点积)定义为：&lt;/p&gt;
&lt;p&gt;$$
\langle u, v \rangle : u^T v
$$&lt;/p&gt;
&lt;p&gt;定义了这个内积的有限维实向量空间被称为欧几里得空间&lt;/p&gt;
&lt;p&gt;由这个内积定义可以诱导得到该空间下L2范数：&lt;/p&gt;
&lt;p&gt;$$
|v|_2 = \sqrt{\langle v, v \rangle}
$$&lt;/p&gt;
&lt;h2&gt;赋范空间&lt;/h2&gt;
&lt;p&gt;赋范空间是在向量空间的基础上满足范数封闭性的空间&lt;/p&gt;
&lt;p&gt;常见的范数定义为：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;完备的内积空间被称为希尔伯特空间&lt;/li&gt;
&lt;li&gt;完备的赋范空间被称为巴拿赫空间 --&amp;gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>[人工智能数学基础] 范数</title><link>https://alkaid114.github.io/posts/ai_math/norm/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/ai_math/norm/</guid><pubDate>Sat, 18 Apr 2026 14:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;所有范数的性质&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;非负：$|x| \geq 0$，且当且仅当$x=0$时$|x|=0$。&lt;/li&gt;
&lt;li&gt;齐次：对于任意标量$\alpha$和向量$x$，有$|\alpha x| = |\alpha| |x|$。&lt;/li&gt;
&lt;li&gt;三角不等式：对于任意向量$x$和$y$，有$|x+y| \leq |x| + |y|$&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;向量的范数&lt;/h2&gt;
&lt;h3&gt;L1范数&lt;/h3&gt;
&lt;p&gt;也就是曼哈顿距离，定义为向量元素绝对值之和：&lt;/p&gt;
&lt;p&gt;$$\Vert x\Vert_1 = \sum_{i=1}^n |x_i| $$&lt;/p&gt;
&lt;p&gt;单位球是一个菱形（二维时），超正轴体，&lt;strong&gt;稀疏性较强&lt;/strong&gt;，适合特征选择和稀疏表示&lt;/p&gt;
&lt;h3&gt;L2范数&lt;/h3&gt;
&lt;p&gt;欧几里得距离，定义为向量元素平方和的平方根：&lt;/p&gt;
&lt;p&gt;$$\Vert x\Vert_2 = \sqrt{\sum_{i=1}^n x_i^2}$$&lt;/p&gt;
&lt;p&gt;也就是向量的长度，单位球是（超）球体，&lt;strong&gt;不具备稀疏性&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;Lp范数&lt;/h3&gt;
&lt;p&gt;Lp范数是L1和L2范数的推广，定义为：&lt;/p&gt;
&lt;p&gt;$$\Vert x\Vert_p = \left( \sum_{i=1}^n |x_i|^p \right)^{1/p}$$&lt;/p&gt;
&lt;p&gt;$p \rightarrow \infty$时，Lp范数趋近于L∞范数。单位球趋近于一个（超）立方体，&lt;strong&gt;稀疏性极弱&lt;/strong&gt;，抑制大值&lt;/p&gt;
&lt;h3&gt;加权p范数&lt;/h3&gt;
&lt;p&gt;加权p范数引入权重向量$w$，定义为：&lt;/p&gt;
&lt;p&gt;$$\Vert x\Vert_{p,w} = \left( \sum_{i=1}^n w_i |x_i|^p \right)^{1/p}$$&lt;/p&gt;
&lt;h3&gt;L0范数（伪）&lt;/h3&gt;
&lt;p&gt;L0范数不是一个真正的范数(&lt;strong&gt;不满足齐次性&lt;/strong&gt;)，定义为向量中非零元素的数量：&lt;/p&gt;
&lt;p&gt;$$\Vert x\Vert_0 = \text{number of non-zero elements in } x$$&lt;/p&gt;
&lt;h2&gt;矩阵的范数&lt;/h2&gt;
&lt;p&gt;矩阵的范数通用性质在向量范数的基础上增加了&lt;strong&gt;次乘性&lt;/strong&gt;：对于任意矩阵$A$和$B$，有$\Vert AB\Vert \leq \Vert A\Vert \Vert B\Vert$&lt;/p&gt;
&lt;h3&gt;Frobenius范数(希尔伯特-施密特范数)&lt;/h3&gt;
&lt;p&gt;类似于L2范数，定义为矩阵元素平方和的平方根：&lt;/p&gt;
&lt;p&gt;$$\Vert A\Vert_F = \sqrt{\sum_{i=1}^m \sum_{j=1}^n a_{ij}^2}$$&lt;/p&gt;
&lt;p&gt;特别性质：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;与矩阵的迹相关：$\Vert A\Vert_F = \sqrt{\text{trace}(A^TA)} = \sqrt{\text{trace}(AA^T)}$&lt;/li&gt;
&lt;li&gt;与矩阵的奇异值相关：$\Vert A\Vert_F = \sqrt{\sum_{i=1}^r \sigma_i^2}$，其中$r$是矩阵的秩，$\sigma_i$是矩阵的奇异值。（奇异值的L2范数）&lt;/li&gt;
&lt;li&gt;与矩阵的特征值相关（&lt;strong&gt;必须是正规矩阵&lt;/strong&gt;）：$\Vert A\Vert_F = \sqrt{\sum_{i=1}^n |\lambda_i|^2}$，其中$\lambda_i$是矩阵的特征值。（特征值的L2范数）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;核范数&lt;/h3&gt;
&lt;p&gt;核范数是矩阵的奇异值的L1范数，定义为：&lt;/p&gt;
&lt;p&gt;$$\Vert A\Vert_* = \sum_{i=1}^r \sigma_i$$&lt;/p&gt;
&lt;p&gt;$r$是矩阵的秩&lt;/p&gt;
&lt;h3&gt;列和范数(L1诱导范数)&lt;/h3&gt;
&lt;p&gt;定义为矩阵列向量的L1范数的最大值：&lt;/p&gt;
&lt;p&gt;$$\Vert A\Vert_1 = \max_{1 \leq j \leq n} \sum_{i=1}^m |a_{ij}|$$&lt;/p&gt;
&lt;h3&gt;谱范数(L2诱导范数)&lt;/h3&gt;
&lt;p&gt;定义为矩阵的最大奇异值：&lt;/p&gt;
&lt;p&gt;$$\Vert A\Vert_2 = \sigma_{\max}$$&lt;/p&gt;
&lt;h3&gt;行和范数(L∞诱导范数)&lt;/h3&gt;
&lt;p&gt;定义为矩阵行向量的L1范数的最大值：&lt;/p&gt;
&lt;p&gt;$$\Vert A\Vert_\infty = \max_{1 \leq i \leq m} \sum_{j=1}^n |a_{ij}|$$&lt;/p&gt;
</content:encoded></item><item><title>在容器中开发ROS/ROS2</title><link>https://alkaid114.github.io/posts/ros_in_container/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/ros_in_container/</guid><pubDate>Thu, 11 Dec 2025 13:30:00 GMT</pubDate><content:encoded>&lt;h2&gt;需要的工具&lt;/h2&gt;
&lt;p&gt;安装&lt;code&gt;distrobox&lt;/code&gt;和&lt;code&gt;podman&lt;/code&gt;或&lt;code&gt;docker&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;生成nvidia的cdi配置（不需要独显可以跳过）&lt;/h2&gt;
&lt;p&gt;先安装&lt;code&gt;nvdia-container-toolkit&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo nvidia-ctk cdi generate --output=/etc/cdi/nvidia.yaml
sudo nvidia-ctk runtime configure --runtime=docker #虽说这里是docker但是podman也得用

# 如果用docker还需要重启docker服务
sudo systemctl restart docker
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;nvidia-ctk cdi generate --output=/etc/cdi/nvidia.yaml&lt;/code&gt;这行命令貌似每次更新nvidia驱动都需要执行一次，nvidia的文档里也有自动生成的办法，不过更新也不频繁我觉得手动就行了&lt;/p&gt;
&lt;h2&gt;创建容器&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;distrobox create --name &amp;lt;实例名称&amp;gt; --additional-flags &quot;--device nvidia.com/gpu=all&quot; --image docker.io/nvidia/cuda:12.9.1-cudnn-runtime-ubuntu22.04
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这里就用nvidia的带cudnn-runtime的镜像了，如果你不需要可以直接用ubuntu的官方镜像&lt;/p&gt;
&lt;p&gt;如果不需要nvidia独显，无需添加&lt;code&gt;--additional-flags &quot;--device nvidia.com/gpu=all&quot;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;:::tip
如果担心容器和宿主机共享home会污染环境，可以用&lt;code&gt;--home /path&lt;/code&gt;指定容器home的位置，而且这个只是用户目录本身，Documents目录等仍然会映射到宿主机对应位置
:::&lt;/p&gt;
&lt;p&gt;:::warning
使用nvidia的镜像时会弹广告，这个广告内容会被旧版的&lt;code&gt;distrobox&lt;/code&gt;当成命令执行导致报错，所以记得更新&lt;code&gt;distrobox&lt;/code&gt;到最新版
:::&lt;/p&gt;
&lt;p&gt;:::tip
至于为什么不用&lt;code&gt;distrobox&lt;/code&gt;的&lt;code&gt;--nvidia&lt;/code&gt;参数启用nvidia独显，因为它会把宿主机的&lt;code&gt;libicudata&lt;/code&gt;挂载进容器，导致容器中无法安装&lt;code&gt;libicu-dev&lt;/code&gt;
:::&lt;/p&gt;
&lt;h2&gt;进入容器&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;distrobox enter &amp;lt;实例名称&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;之后像正常使用Ubuntu一样安装ROS就好了&lt;/p&gt;
&lt;h2&gt;VsCode连接容器进行开发&lt;/h2&gt;
&lt;p&gt;无需在容器中安装vscode&lt;/p&gt;
&lt;h3&gt;安装插件&lt;/h3&gt;
&lt;p&gt;在宿主机的vscode中安装&lt;code&gt;Dev Containers&lt;/code&gt;插件&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./dev.png&quot; alt=&quot;Dev Containers插件&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;修改设置&lt;/h3&gt;
&lt;p&gt;打开vscode设置-&amp;gt;扩展-&amp;gt;开发容器&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;dev.containers.dockerPath&lt;/code&gt;值改为&lt;code&gt;podman&lt;/code&gt;（如果你用的是docker就不用改）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dev.containers.dockerSocketPath&lt;/code&gt;值改为&lt;code&gt;/var/run/podman.sock&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;连接容器&lt;/h3&gt;
&lt;p&gt;点击vscode左下角远程图标-&amp;gt;附加到正在运行的容器（提前&lt;code&gt;distrobox enter&lt;/code&gt;）&lt;/p&gt;
&lt;h3&gt;用户设置&lt;/h3&gt;
&lt;p&gt;默认进入容器后是以UID 10000作为用户，会导致在宿主机上无法直接操作vscode创建的文件夹，可以在连接容器的配置中指定用户名&lt;/p&gt;
&lt;p&gt;连接到容器后，按&lt;code&gt;Ctrl+Shift+P&lt;/code&gt;，找到&lt;code&gt;Dev Containers: Open Attached Container Configuration File&lt;/code&gt;，选择打开对应的配置文件（应该就一个，没得选），添加内容&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&quot;remoteUser&quot;: &quot;&amp;lt;宿主机用户名&amp;gt;&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;连接容器时启用ROS环境&lt;/h3&gt;
&lt;p&gt;按照这项修改后vscode中的clangd和cmake即可正常找到ROS相关的头文件和库&lt;/p&gt;
&lt;p&gt;修改容器使用的shell对应的rc文件（&lt;code&gt;~/.bashrc&lt;/code&gt;，&lt;code&gt;~/.zshrc&lt;/code&gt;等），在最后添加&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;当然得是容器实际使用的rc文件，如果你在创建容器时用&lt;code&gt;--home /path&lt;/code&gt;指定了其他位置作为容器的home的话就得是&lt;code&gt;/path&lt;/code&gt;下的&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code&gt;source /opt/ros/&amp;lt;ros版本&amp;gt;/setup.&amp;lt;shell类型&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;常见问题&lt;/h2&gt;
&lt;h3&gt;&lt;code&gt;dpkg&lt;/code&gt;报错&lt;code&gt;xserver-*&lt;/code&gt;无法安装&lt;/h3&gt;
&lt;p&gt;类似于&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; dpkg: error processing package xserver-xorg-input-all (--configure):

 dependency problems - leaving unconfigured

Errors were encountered while processing:

 keyboard-configuration

 xserver-xorg-core

 xserver-xorg-video-ati

 xserver-xorg-video-radeon

 xserver-xorg-input-wacom

 xserver-xorg-video-fbdev

 xserver-xorg-video-vmware

 xserver-xorg-video-intel

 xserver-xorg-video-all

 xserver-xorg-video-vesa

 xserver-xorg-video-qxl

 xserver-xorg-video-amdgpu

 xserver-xorg

 xserver-xorg-video-nouveau

 xserver-xorg-input-libinput

 xserver-xorg-input-all

E: Sub-process /usr/bin/dpkg returned an error code (1) 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这个问题应该只会出现在安装ROS1的desktop-full时，因为是容器所以用不上这些包，就算要在容器里显示图形界面软件也用不上，可以直接移除掉&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt remove --purge xserver-xorg-core
sudo apt autoremove
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;每次使用&lt;code&gt;apt&lt;/code&gt;都有未设置语言环境的警告&lt;/h3&gt;
&lt;p&gt;先用&lt;code&gt;apt&lt;/code&gt;安个编辑器&lt;code&gt;vim&lt;/code&gt;,&lt;code&gt;nano&lt;/code&gt;之类的都可以&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo vim /etc/locale.gen
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;将&lt;code&gt;en_US.UTF-8 UTF-8&lt;/code&gt;和&lt;code&gt;zh_CN.UTF-8 UTF-8&lt;/code&gt;取消注释&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo locale-gen
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;容器内的图形软件不用独显渲染&lt;/h3&gt;
&lt;p&gt;这个其实不是容器的问题，在哪都一样&lt;/p&gt;
&lt;p&gt;需要在运行软件前设置环境变量&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;__NV_PRIME_RENDER_OFFLOAD=1 __VK_LAYER_NV_optimus=NVIDIA_only __GLX_VENDOR_LIBRARY_NAME=nvidia &amp;lt;命令&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;为了方便可以在&lt;code&gt;~/.bashrc&lt;/code&gt;或者&lt;code&gt;~/.zshrc&lt;/code&gt;之类的里面加个别名（取决于你用什么shell）&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;alias prime-run=&apos;__NV_PRIME_RENDER_OFFLOAD=1 __VK_LAYER_NV_optimus=NVIDIA_only __GLX_VENDOR_LIBRARY_NAME=nvidia &apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;之后直接用&lt;code&gt;prime-run &amp;lt;命令&amp;gt;&lt;/code&gt;就行&lt;/p&gt;
</content:encoded></item><item><title>[工科概率论] 速记表</title><link>https://alkaid114.github.io/posts/probability_theory/cheat_sheet/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/probability_theory/cheat_sheet/</guid><pubDate>Thu, 27 Nov 2025 20:01:00 GMT</pubDate><content:encoded>&lt;h2&gt;独立性条件&lt;/h2&gt;
&lt;p&gt;$$
\begin{aligned}
P(AB) = P(A)P(B) \
f(x,y) = f_X(x) f_Y(y) \
F(x,y) = F_X(x) F_Y(y) \&lt;br /&gt;
\end{aligned}
$$&lt;/p&gt;
&lt;h2&gt;全概率公式&lt;/h2&gt;
&lt;p&gt;$$
P(B) = \sum_{i=1}^{n} P(A_i) P(B|A_i)
$$&lt;/p&gt;
&lt;h2&gt;贝叶斯公式&lt;/h2&gt;
&lt;p&gt;$$
P(A_i|B) = \frac{P(A_i) P(B|A_i)}{\sum_{j=1}^{n} P(A_j) P(B|A_j)}
$$&lt;/p&gt;
&lt;h2&gt;离散分布&lt;/h2&gt;
&lt;h3&gt;二项分布&lt;/h3&gt;
&lt;p&gt;$$
X \sim B(n,p) \[1em]
E(X) = np \[1em]
D(X) = np(1-p)
$$&lt;/p&gt;
&lt;h3&gt;泊松分布&lt;/h3&gt;
&lt;p&gt;$$
X \sim Po(\lambda) \quad \text{或者是} P(\lambda) \[1em]
f(x) = \frac{\lambda^x e^{-\lambda}}{x!} \quad x = 0,1,2,\ldots \[1em]
E(X) = \lambda \[1em]
D(X) = \lambda
$$&lt;/p&gt;
&lt;h3&gt;几何分布&lt;/h3&gt;
&lt;p&gt;$$
X \sim G(p) \[1em]
E(X) = \frac{1}{p} \[1em]
D(X) = \frac{1-p}{p^2}
$$&lt;/p&gt;
&lt;h3&gt;超几何分布&lt;/h3&gt;
&lt;p&gt;$$
X \sim H(N,M,n) \[1em]
E(X) = n \frac{M}{N} \[1em]
D(X) = n \frac{M}{N} \frac{N-M}{N} \frac{N-n}{N-1}
$$&lt;/p&gt;
&lt;h2&gt;泊松近似二项分布&lt;/h2&gt;
&lt;p&gt;当$n$很大且$p$很小时，$np = \lambda$，则有&lt;/p&gt;
&lt;p&gt;$$
P(X=k) \approx \frac{\lambda^k e^{-\lambda}}{k!}
$$&lt;/p&gt;
&lt;p&gt;查表得&lt;/p&gt;
&lt;h2&gt;连续分布&lt;/h2&gt;
&lt;h3&gt;正态分布&lt;/h3&gt;
&lt;p&gt;$$
X \sim N(\mu, \sigma^2) \[1em]
f(x) = \frac{1}{\sqrt{2 \pi} \sigma} \exp \left( -\frac{(x-\mu)^2}{2 \sigma^2} \right) \[1em]
E(X) = \mu \[1em]
D(X) = \sigma^2
$$&lt;/p&gt;
&lt;h3&gt;指数分布&lt;/h3&gt;
&lt;p&gt;$$
X \sim E(\lambda) \[1em]
f(x) = \lambda e^{-\lambda x} \quad x \geq 0 \[1em]
F(x) = 1 - e^{-\lambda x} \quad x \geq 0 \[1em]
E(X) = \frac{1}{\lambda} \[1em]
D(X) = \frac{1}{\lambda^2}
$$&lt;/p&gt;
&lt;h3&gt;均匀分布&lt;/h3&gt;
&lt;p&gt;$$
X \sim U(a,b) \[1em]
f(x) = \frac{1}{b-a} \[1em]
E(X) = \frac{a+b}{2} \[1em]
D(X) = \frac{(b-a)^2}{12}
$$&lt;/p&gt;
&lt;h2&gt;独立可加性&lt;/h2&gt;
&lt;p&gt;$$
\begin{aligned}
\text{正态分布} \quad &amp;amp;N(\mu_1, \sigma_1^2) + N(\mu_2, \sigma_2^2) = N(\mu_1 + \mu_2, \sigma_1^2 + \sigma_2^2) \[1em]
\text{泊松分布} \quad &amp;amp;Po(\lambda_1) + Po(\lambda_2) = Po(\lambda_1 + \lambda_2) \[1em]
\text{概率相同的二项分布} \quad &amp;amp;B(n_1, p) + B(n_2, p) = B(n_1 + n_2, p) \[1em]
\text{卡方分布} \quad &amp;amp;\chi^2(n_1) + \chi^2(n_2) = \chi^2(n_1 + n_2)
\end{aligned}
$$&lt;/p&gt;
&lt;h2&gt;二维正态分布&lt;/h2&gt;
&lt;p&gt;$$
\begin{aligned}
f(x,y) &amp;amp;= \frac{1}{2 \pi \sigma_X \sigma_Y \sqrt{1-\rho^2}} \exp \left( -\frac{1}{2(1-\rho^2)} \left[ \frac{(x-\mu_X)^2}{\sigma_X^2} - \frac{2 \rho (x-\mu_X)(y-\mu_Y)}{\sigma_X \sigma_Y} + \frac{(y-\mu_Y)^2}{\sigma_Y^2} \right] \right) \[1em]
E(X) &amp;amp;= \mu_X \[1em]
E(Y) &amp;amp;= \mu_Y \[1em]
D(X) &amp;amp;= \sigma_X^2 \[1em]
D(Y) &amp;amp;= \sigma_Y^2 \[1em]
Cov(X,Y) &amp;amp;= \rho \sigma_X \sigma_Y
\end{aligned}
$$&lt;/p&gt;
&lt;h2&gt;分布函数与概率密度函数&lt;/h2&gt;
&lt;h3&gt;分布函数需要满足的条件&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;$F(x)$单调不减&lt;/li&gt;
&lt;li&gt;$F(-\infty) = 0, \quad F(+\infty) = 1$&lt;/li&gt;
&lt;li&gt;$F(x)$&lt;strong&gt;右连续&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;概率密度函数需要满足的条件&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;$f(x) \geq 0$ 恒大于等于0&lt;/li&gt;
&lt;li&gt;$\int_{-\infty}^{+\infty} f(x) , dx = 1$ 积分为1&lt;/li&gt;
&lt;li&gt;$F(x) = \int_{-\infty}^{x} f(t) , dt$&lt;/li&gt;
&lt;li&gt;$f(x) = \frac{d}{dx} F(x)$&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;随机变量的函数&lt;/h2&gt;
&lt;h3&gt;公式法&lt;/h3&gt;
&lt;p&gt;$y = g(x)$ 在$(a,b)$ 单调, $x = h(y)$ 为其反函数, 则&lt;/p&gt;
&lt;p&gt;$$
f_Y(y) = f_X(h(y)) |h&apos;(y)|, \quad y \in (\min \left {g(a), g(b) \right } , \max \left {g(a), g(b) \right })
$$&lt;/p&gt;
&lt;h2&gt;二维随机变量的函数&lt;/h2&gt;
&lt;h3&gt;卷积法&lt;/h3&gt;
&lt;p&gt;$$
f_{X+Y}(z) = \int_{-\infty}^{+\infty} f_X(x) f_Y(z-x) , dx \[1em]
f_{X+Y}(z) = \int_{-\infty}^{+\infty} f_{X,Y}(x, z-x) , dx
$$&lt;/p&gt;
&lt;h3&gt;二重积分法&lt;/h3&gt;
&lt;p&gt;省略&lt;/p&gt;
&lt;h2&gt;数字特征&lt;/h2&gt;
&lt;h3&gt;期望&lt;/h3&gt;
&lt;p&gt;$$
E(X) = \int_{-\infty}^{+\infty} x f(x) , dx \[1em]
E(X_{discrete}) = \sum_{i} x_i p_i
$$&lt;/p&gt;
&lt;h4&gt;期望运算&lt;/h4&gt;
&lt;p&gt;$$
E[aX + bY + c] = aE(X) + bE(Y) + c
$$&lt;/p&gt;
&lt;p&gt;当$X$和$Y$独立时，有&lt;/p&gt;
&lt;p&gt;$$
E(XY) = E(X) E(Y)
$$&lt;/p&gt;
&lt;h3&gt;方差&lt;/h3&gt;
&lt;p&gt;$$
D(X) = E[(X - E(X))^2] = \boxed{E(X^2) - [E(X)]^2} \[1em]
D(X) = \int_{-\infty}^{+\infty} (x - E(X))^2 f(x) , dx \[1em]
D(X_{discrete}) = \sum_{i} (x_i - E(X))^2 p_i
$$&lt;/p&gt;
&lt;h4&gt;方差运算&lt;/h4&gt;
&lt;p&gt;$$
D[aX + bY + c] = a^2 D(X) + b^2 D(Y) + 2ab Cov(X,Y)
$$&lt;/p&gt;
&lt;h3&gt;协方差&lt;/h3&gt;
&lt;p&gt;$$
Cov(X,Y) = E[(X - E(X))(Y - E(Y))] = \boxed{E(XY) - E(X)E(Y)} \[1em]
Cov(aX+b, cY+d) = ac Cov(X,Y) \[1em]
Cov(X_1 + X_2, Y_1 + Y_2) = Cov(X_1, Y_1) + Cov(X_1, Y_2) + Cov(X_2, Y_1) + Cov(X_2, Y_2) \[1em]
D(X) = Cov(X,X)
$$&lt;/p&gt;
&lt;h3&gt;相关系数&lt;/h3&gt;
&lt;p&gt;$$
\rho_{XY} = \frac{Cov(X,Y)}{\sqrt{D(X)} \sqrt{D(Y)}}
$$&lt;/p&gt;
&lt;h2&gt;大数定律&lt;/h2&gt;
&lt;h3&gt;马尔可夫不等式&lt;/h3&gt;
&lt;p&gt;$$
P(X \geq \varepsilon) \leq \frac{E(X)}{\varepsilon}
$$&lt;/p&gt;
&lt;h3&gt;切比雪夫不等式&lt;/h3&gt;
&lt;p&gt;纯套公式，看见$P(|X - E(X)| \geq \varepsilon)$的形式就想这个，有的时候期望是0会比较隐蔽，如果给的是$&amp;lt;$号，就用1减去&lt;/p&gt;
&lt;p&gt;$$
P(|X - E(X)| \geq \varepsilon) \leq \frac{D(X)}{\varepsilon^2} \[1em]
$$&lt;/p&gt;
&lt;h3&gt;伯努利大数定律&lt;/h3&gt;
&lt;p&gt;看见$n$重伯努利试验的时候用，$Y_n$表示成功次数，$p$表示成功概率&lt;/p&gt;
&lt;p&gt;$$
\lim_{n \to \infty} P \left( \left| \frac{Y_n}{n} - p \right| \ge \varepsilon \right) = 0
$$&lt;/p&gt;
&lt;h3&gt;切比雪夫大数定律&lt;/h3&gt;
&lt;p&gt;如果有大量同分布且独立的随机变量$X_1, X_2, \ldots, X_n$就用这个&lt;/p&gt;
&lt;p&gt;$$
\lim_{n \to \infty} P \left( \left| \frac{1}{n} \sum_{i=1}^{n} X_i - \mu \right| \ge \varepsilon \right) = 0
$$&lt;/p&gt;
&lt;h3&gt;辛钦大数定律&lt;/h3&gt;
&lt;p&gt;其实跟切比雪夫大数定律是一样的，只不过放宽了条件，只要有相同的期望就行，不要求方差相等
，实际上是因为上面的切比雪夫大数定律的推论证明的过程中假定了方差相等&lt;/p&gt;
&lt;h2&gt;中心极限定理&lt;/h2&gt;
&lt;h3&gt;独立同分布中心极限定理&lt;/h3&gt;
&lt;p&gt;独立同分布的随机变量$X_1, X_2, \ldots, X_n$，期望为$\mu$，方差为$\sigma^2$，则当$n$充分大时，随机变量就近似服从正态分布&lt;/p&gt;
&lt;h3&gt;棣莫弗-拉普拉斯中心极限定理（n重伯努利试验）&lt;/h3&gt;
&lt;p&gt;$n$重伯努利分布$B(n,p)$近似服从正态分布$N(np, np(1-p))$&lt;/p&gt;
&lt;h2&gt;三大分布&lt;/h2&gt;
&lt;h3&gt;$\chi^2$分布&lt;/h3&gt;
&lt;p&gt;有$n$个相互独立的标准正态分布随机变量$X_1, X_2, \ldots, X_n$，则随机变量
$$
Y = \sum_{i=1}^{n} X_i^2 \sim \chi^2(n)
$$&lt;/p&gt;
&lt;p&gt;$\chi^2(n)$表示自由度为$n$的卡方分布&lt;/p&gt;
&lt;p&gt;重要结论：均值和方差&lt;/p&gt;
&lt;p&gt;$$
E(Y) = n \[1em]
D(Y) = 2n
$$&lt;/p&gt;
&lt;h4&gt;概率怎么看&lt;/h4&gt;
&lt;p&gt;$$
P(\chi^2 (n) &amp;gt; \chi^2_{\alpha}(n)) = \alpha \[1em]
\chi^2_{\alpha}(n) \text{通过查表得到， 是横轴上的值}
$$&lt;/p&gt;
&lt;h3&gt;$t$分布&lt;/h3&gt;
&lt;p&gt;由$X \sim N(0,1)$和$Y \sim \chi^2(n)$构成&lt;/p&gt;
&lt;p&gt;$$
T = \frac{X}{\sqrt{Y/n}} \sim t(n)
$$&lt;/p&gt;
&lt;p&gt;$t(n)$表示自由度为$n$的t分布&lt;/p&gt;
&lt;p&gt;重要性质：&lt;strong&gt;对称&lt;/strong&gt; $t_{\alpha}(n) = -t_{1-\alpha}(n)$&lt;/p&gt;
&lt;p&gt;$$
P(t(n) &amp;gt; t_{\alpha}(n)) = \alpha \[1em]
t_{\alpha}(n) \text{通过查表得到}
$$&lt;/p&gt;
&lt;h3&gt;$F$分布&lt;/h3&gt;
&lt;p&gt;由$X \sim \chi^2(n_1)$和$Y \sim \chi^2(n_2)$构成&lt;/p&gt;
&lt;p&gt;$$
F = \frac{(X/n_1)}{(Y/n_2)} \sim F(n_1, n_2)
$$&lt;/p&gt;
&lt;p&gt;重要性质：&lt;/p&gt;
&lt;p&gt;$$
F_{1-\alpha}(n_1, n_2) = \frac{1}{F_{\alpha}(n_2, n_1)}
$$&lt;/p&gt;
&lt;p&gt;$F(n_1, n_2)$表示自由度为$(n_1, n_2)$的F分布，$n_1$叫第一自由度，$n_2$叫第二自由度&lt;/p&gt;
&lt;p&gt;$$
P(F(n_1, n_2) &amp;gt; F_{\alpha}(n_1, n_2)) = \alpha \[1em]
F_{\alpha}(n_1, n_2) \text{通过查表得到}
$$&lt;/p&gt;
&lt;h2&gt;统计量&lt;/h2&gt;
&lt;h3&gt;$k$阶矩&lt;/h3&gt;
&lt;p&gt;$$
A_k = \frac{1}{n} \sum_{i=1}^{n} X_i^k
$$&lt;/p&gt;
&lt;p&gt;$k=1$时为样本均值&lt;/p&gt;
&lt;h3&gt;$k$阶中心距&lt;/h3&gt;
&lt;p&gt;$$
B_k = \frac{1}{n} \sum_{i=1}^{n} (X_i - \overline{X})^k
$$&lt;/p&gt;
&lt;p&gt;$k=2$时不是样本方差，称为样本二阶中心距，表示为$S^{*2}$&lt;/p&gt;
&lt;h4&gt;样本方差&lt;/h4&gt;
&lt;p&gt;$$
S^2 = \frac{1}{n-1} \sum_{i=1}^{n} (X_i - \overline{X})^2
$$&lt;/p&gt;
&lt;p&gt;这才是样本方差，注意是除以$n-1$，而不是$n$，它是$\sigma^2$的&lt;strong&gt;无偏估计&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;:::warning
接下来这两个必须得背，基本上是没法现推出来的
:::&lt;/p&gt;
&lt;h3&gt;正态总体样本方差的分布&lt;/h3&gt;
&lt;p&gt;必须是&lt;strong&gt;正态分布&lt;/strong&gt;才能用&lt;/p&gt;
&lt;p&gt;$$
\frac{(n-1)S^2}{\sigma^2} \sim \chi^2(n-1)
$$&lt;/p&gt;
&lt;p&gt;可用这个稍微变形得到样本&lt;strong&gt;二阶中心距&lt;/strong&gt;的分布&lt;/p&gt;
&lt;h3&gt;正态总体样本标准差的分布&lt;/h3&gt;
&lt;p&gt;$$
\frac{(\overline{X} - \mu)\sqrt{n}}{S} \sim t(n-1)
$$&lt;/p&gt;
&lt;h2&gt;参数估计&lt;/h2&gt;
&lt;h3&gt;矩估计法&lt;/h3&gt;
&lt;p&gt;算一、二...阶矩$\alpha_1，\alpha_2, \ldots$，然后解方程组就能得到参数估计值，注意利用题里给的已知信息如均值、方差等，矩中间接包含了这些信息可用于解方程&lt;/p&gt;
&lt;h3&gt;最大似然估计法&lt;/h3&gt;
&lt;p&gt;先写出似然函数$L(\theta)$&lt;/p&gt;
&lt;p&gt;$$
L(\theta) = \prod_{i=1}^{n} f(x_i; \theta)
$$&lt;/p&gt;
&lt;p&gt;如果似然函数不连续，则应根据极大值出现在区间端点的原则，分别求出各个端点处的函数值，再比较大小，取最大值对应的$\theta$值&lt;/p&gt;
&lt;p&gt;若似然函数中无$x$，则根据$x$的取值范围，直接写出$\theta$的取值范围，取最大值对应的$\theta$值&lt;/p&gt;
&lt;p&gt;其余情况，取对数似然函数并对$\theta$求导，令导数为0，解方程得到参数估计值&lt;/p&gt;
&lt;p&gt;$$
\text{解该方程} \quad \frac{d}{d\theta} \ln L(\theta) = 0
$$&lt;/p&gt;
&lt;p&gt;总之是求让$L(\theta)$最大的$\theta$值作为估计$\hat{\theta}$&lt;/p&gt;
&lt;h2&gt;估计评定&lt;/h2&gt;
&lt;h3&gt;无偏性&lt;/h3&gt;
&lt;p&gt;算估计量的均值，如果正好等于$\theta$，则该估计量是无偏的&lt;/p&gt;
&lt;p&gt;$$
E(\hat{\theta}) = \theta
$$&lt;/p&gt;
&lt;h3&gt;有效性&lt;/h3&gt;
&lt;p&gt;需要无偏性作为前提，如果不是无偏的谈有效性没意义&lt;/p&gt;
&lt;p&gt;设有两个估计$\theta_1$和$\theta_2$，如果对于所有的$\theta$都有&lt;/p&gt;
&lt;p&gt;$$
D_{\theta}(\theta_1) \le D_{\theta}(\theta_2)
$$&lt;/p&gt;
&lt;p&gt;且至少有一个参数值$\theta$使小于号成立，则称估计量$\theta_1$比估计量$\theta_2$更有效&lt;/p&gt;
&lt;p&gt;直观上理解就是方差更小的估计量更有效&lt;/p&gt;
&lt;h3&gt;相合性&lt;/h3&gt;
&lt;p&gt;有$n$个估计量$\hat{\theta}_n$，如果&lt;/p&gt;
&lt;p&gt;$$
\forall \varepsilon &amp;gt; 0, \quad \lim_{n \to \infty} P(|\hat{\theta}_n - \theta| \ge \varepsilon) = 0
$$&lt;/p&gt;
&lt;p&gt;则称估计量$\hat{\theta}_n$是参数$\theta$的相合（一致）估计量&lt;/p&gt;
&lt;h2&gt;区间估计&lt;/h2&gt;
&lt;p&gt;$1-\alpha$叫置信水平，$\alpha$叫显著性水平&lt;/p&gt;
&lt;p&gt;区间估计就三种情况：&lt;/p&gt;
&lt;h3&gt;已知$\sigma^2$求$\mu$&lt;/h3&gt;
&lt;p&gt;用正态分布&lt;/p&gt;
&lt;p&gt;$$
u = \frac{\overline{x} - \mu}{\sigma / \sqrt{n}} \sim N(0,1)\[1em]
P \left( -u_{\alpha/2} &amp;lt; u &amp;lt; u_{\alpha/2} \right) = 1 - \alpha
$$&lt;/p&gt;
&lt;p&gt;把已知的全代入解出$\mu$的范围就是置信区间，$u_{\alpha/2}$通过查表得到&lt;/p&gt;
&lt;h3&gt;未知$\sigma^2$求$\mu$&lt;/h3&gt;
&lt;p&gt;用t分布&lt;/p&gt;
&lt;p&gt;$$
t = \frac{\overline{x} - \mu}{s / \sqrt{n}} \sim t(n-1)\[1em]
P \left( -t_{\alpha/2}(n-1) &amp;lt; t &amp;lt; t_{\alpha/2}(n-1) \right) = 1 - \alpha
$$&lt;/p&gt;
&lt;p&gt;同样都代进去查表&lt;/p&gt;
&lt;h3&gt;求$\sigma^2$&lt;/h3&gt;
&lt;p&gt;用卡方分布&lt;/p&gt;
&lt;p&gt;$$
\chi^2 = \frac{(n-1)s^2}{\sigma^2} \sim \chi^2(n-1)\[1em]
P \left(  \chi^2_{1-\alpha/2}(n-1) &amp;lt; \chi^2 &amp;lt; \chi^2_{\alpha/2}(n-1)  \right) = 1 - \alpha
$$&lt;/p&gt;
&lt;h2&gt;双样本均值差的区间估计&lt;/h2&gt;
&lt;h3&gt;已知$\sigma_1^2$ = $\sigma_2^2$求$\mu_1 - \mu_2$&lt;/h3&gt;
&lt;p&gt;用t分布&lt;/p&gt;
&lt;p&gt;$$
\large t = \frac{(\overline{x}&lt;em&gt;1 - \overline{x}&lt;em&gt;2) - (\mu_1 - \mu_2)}{\sqrt{\dfrac{\sigma_1^2}{n_1} + \dfrac{\sigma_2^2}{n_2}}} \sim t(n_1 + n_2 - 2 )\[1em]
P \left( -t&lt;/em&gt;{\alpha/2}(n_1 + n_2 - 2) &amp;lt; t &amp;lt; t&lt;/em&gt;{\alpha/2}(n_1 + n_2 - 2) \right) = 1 - \alpha
$$&lt;/p&gt;
&lt;h3&gt;求$\dfrac{\sigma_1^2}{\sigma_2^2}$&lt;/h3&gt;
&lt;p&gt;用F分布&lt;/p&gt;
&lt;p&gt;$$
\large F = \dfrac{s_1^2 / \sigma_1^2}{s_2^2 / \sigma_2^2} \sim F(n_1 - 1, n_2 - 1)\[1em]
P \left( F_{1-\alpha/2}(n_1 - 1, n_2 - 1) &amp;lt; F &amp;lt; F_{\alpha/2}(n_1 - 1, n_2 - 1) \right) = 1 - \alpha
$$&lt;/p&gt;
&lt;h2&gt;重要结论&lt;/h2&gt;
&lt;h3&gt;标准正态分布的矩&lt;/h3&gt;
&lt;h4&gt;奇数阶矩&lt;/h4&gt;
&lt;p&gt;因为$\phi(x)$是偶函数，所以奇数阶矩全为0&lt;/p&gt;
&lt;p&gt;$$
E(X^{2k+1}) = 0
$$&lt;/p&gt;
&lt;h4&gt;偶数阶矩&lt;/h4&gt;
&lt;p&gt;$$
E(X^{2k}) = (2k-1)!! = \frac{(2k)!}{2^k k!}
$$&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;!!是双阶乘，5!! = 5 × 3 × 1&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;快速求$aX$的概率密度函数&lt;/h3&gt;
&lt;p&gt;$$
f_{aX}(\omega) = \frac{1}{|a|} f_X \left( \frac{\omega}{a} \right)
$$&lt;/p&gt;
&lt;h3&gt;高斯积分&lt;/h3&gt;
&lt;p&gt;$$
\int_{-\infty}^{+\infty} e^{- \lambda x^2} ,dx = \sqrt{\frac{\pi}{\lambda}} \quad (\lambda &amp;gt; 0) \[1em]
\int_{-\infty}^{+\infty} e^{- \lambda x^2} ,dx = \Gamma \left( \frac{1}{2} \right) \lambda^{-\frac{1}{2}} \quad (\lambda &amp;gt; 0) \[1em]
\Gamma \left( \frac{1}{2} \right) = \sqrt{\pi} \qquad n\Gamma(n) = \Gamma(n+1)
$$&lt;/p&gt;
</content:encoded></item><item><title>[工科概率论] 二维随机变量的函数分布</title><link>https://alkaid114.github.io/posts/probability_theory/bivar_rv_func_dist/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/probability_theory/bivar_rv_func_dist/</guid><pubDate>Sun, 23 Nov 2025 21:18:00 GMT</pubDate><content:encoded>&lt;h2&gt;和的分布&lt;/h2&gt;
&lt;p&gt;设随机变量$Z = X + Y$，则$Z$的概率密度函数为&lt;/p&gt;
&lt;h3&gt;通用方法&lt;/h3&gt;
&lt;p&gt;先求出分布函数&lt;/p&gt;
&lt;p&gt;$$
F_Z(z) = P(Z \le z) = P(X + Y \le z) = \iint_{x+y \le z} f(x,y) , dx , dy
$$&lt;/p&gt;
&lt;p&gt;建议画图辅助理解积分区域，$x+y$其实是一条斜线，只要求这条斜线下方原区域被切割出的部分即可，然后对$F_Z(z)$关于$z$求导，得到概率密度函数&lt;/p&gt;
&lt;p&gt;这种方法使用于任何情况，不论$X$与$Y$是否独立，$Z$为何种函数形式，并不是只能用于和的分布&lt;/p&gt;
&lt;h3&gt;卷积法&lt;/h3&gt;
&lt;p&gt;如果$X$与$Y$独立，则有更简便的方法，直接使用卷积公式
$$
f_Z(z) = \int_{-\infty}^{\infty} f_X(x) f_Y(z - x) , dx
$$
其中$f_X(x)$与$f_Y(y)$分别为$X$与$Y$的边缘概率密度函数，通常遇到的密度函数都是分段函数，计算时需要分段积分，然后将结果拼接&lt;/p&gt;
&lt;p&gt;:::caution
这种方法只适用于$X$与$Y$独立，且$Z$为两者和的情况，如果是其他函数形式（如乘积、商等），则需要使用通用方法求解
:::&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;$Z=X-Y$也适用但我觉得还是有点烧脑了，不如直接用通用方法得了，或者说卷积本来就挺烧脑的，列式子很爽等算的时候就知道拆分区域麻烦了，$z-x$的区域变换真不太好想，我还是喜欢通用的方法&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;待续&lt;/h2&gt;
</content:encoded></item><item><title>[工科概率论] 随机变量的独立性</title><link>https://alkaid114.github.io/posts/probability_theory/rv_independent/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/probability_theory/rv_independent/</guid><pubDate>Sun, 23 Nov 2025 20:59:00 GMT</pubDate><content:encoded>&lt;h2&gt;随机变量独立性的定义&lt;/h2&gt;
&lt;p&gt;$$
P(X \le x, Y \le y) = P(X \le x) P(Y \le y)
$$
或者写成
$$
F(x,y) = F_X(x) F_Y(y)
$$
就称随机变量$X$与$Y$&lt;strong&gt;相互独立&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;概率密度函数的独立性条件&lt;/h2&gt;
&lt;p&gt;$X$与$Y$独立的&lt;strong&gt;充分必要条件&lt;/strong&gt;为
$$
f(x,y) = f_X(x) f_Y(y)
$$&lt;/p&gt;
&lt;h2&gt;离散型随机变量独立性的定义&lt;/h2&gt;
&lt;p&gt;$X$与$Y$独立的&lt;strong&gt;充分必要条件&lt;/strong&gt;为
$$
\large p_{ij} = p_{i\cdot} p_{\cdot j}
$$&lt;/p&gt;
&lt;h2&gt;用相关系数不一定能判断独立性&lt;/h2&gt;
&lt;p&gt;如果随机变量$X$与$Y$独立，则它们的相关系数$\rho_{XY} = 0$，但反过来不成立，$\rho_{XY} = 0$并不能说明$X$与$Y$独立&lt;/p&gt;
&lt;p&gt;$$
X,Y\text{独立} \Rightarrow \rho_{XY} = 0
$$&lt;/p&gt;
&lt;p&gt;例如，设随机变量$X$服从均匀分布$U(-1,1)$，定义随机变量$Y = X^2$，则可以计算出$\rho_{XY} = 0$，但显然$Y$完全由$X$决定，二者并不独立&lt;/p&gt;
&lt;h3&gt;特例&lt;/h3&gt;
&lt;p&gt;如果$(X,Y)$服从&lt;strong&gt;二维正态分布&lt;/strong&gt;，则是&lt;strong&gt;充要条件&lt;/strong&gt;
$$
\rho_{XY} = 0 \Leftrightarrow X,Y\text{独立}
$$&lt;/p&gt;
</content:encoded></item><item><title>[工科概率论] 二维连续型随机变量</title><link>https://alkaid114.github.io/posts/probability_theory/bivar_cont_rv/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/probability_theory/bivar_cont_rv/</guid><pubDate>Sun, 23 Nov 2025 20:13:00 GMT</pubDate><content:encoded>&lt;p&gt;$f(x,y)$为二维随机变量$(X, Y)$的概率密度函数&lt;/p&gt;
&lt;h2&gt;分布函数&lt;/h2&gt;
&lt;p&gt;$$
F(x,y) = P(X \le x, Y \le y) = \int_{-\infty}^{y} \int_{-\infty}^{x} f(u,v) , du , dv
$$&lt;/p&gt;
&lt;p&gt;概率密度相当于平面的质量密度，分布函数相当于某一区域的质量总和&lt;/p&gt;
&lt;p&gt;$$
\dfrac{\partial^2 F(x,y)}{\partial x \partial y} = f(x,y)
$$&lt;/p&gt;
&lt;h2&gt;区域概率&lt;/h2&gt;
&lt;p&gt;设$G$为平面上的一个区域，则点$(X, Y)$落在区域$G$内的概率为&lt;/p&gt;
&lt;p&gt;$$
P\left((X, Y) \in G\right) = \iint_{G} f(x,y) , dx , dy
$$&lt;/p&gt;
&lt;h2&gt;边缘分布&lt;/h2&gt;
&lt;p&gt;$$
f_X(x) = \int_{-\infty}^{\infty} f(x,y) , dy
$$
$$
f_Y(y) = \int_{-\infty}^{\infty} f(x,y) , dx
$$&lt;/p&gt;
&lt;h2&gt;常见二维连续型分布&lt;/h2&gt;
&lt;h3&gt;二维均匀分布&lt;/h3&gt;
&lt;p&gt;设$(X, Y)$在区域$G$内服从二维均匀分布，则其概率密度函数为
$$
f(x,y) = \begin{cases}
\dfrac{1}{S(G)}, &amp;amp; (x,y) \in G \
0, &amp;amp; \text{otherwise}
\end{cases}
$$&lt;/p&gt;
&lt;p&gt;$S(G)$为区域$G$的面积&lt;/p&gt;
&lt;p&gt;设$D$为$G$的子区域，则可以很直观地得到
$$
P\left((X, Y) \in D\right) = \frac{S(D)}{S(G)}
$$
就是子区域面积占总面积的比例&lt;/p&gt;
&lt;h3&gt;二维正态分布&lt;/h3&gt;
&lt;p&gt;设$(X, Y)$服从二维正态分布，记为
$$
(X, Y) \sim N(\mu_X, \mu_Y, \sigma_X^2, \sigma_Y^2, \rho)
$$&lt;/p&gt;
&lt;p&gt;$\rho$为相关系数，$-1 \le \rho \le 1$&lt;/p&gt;
&lt;p&gt;则其概率密度函数为
$$
f(x,y) = \frac{1}{2 \pi \sigma_X \sigma_Y \sqrt{1 - \rho^2}} \exp{\left{ -\frac{1}{2(1 - \rho^2)} \left[ \frac{(x - \mu_X)^2}{\sigma_X^2} - \frac{2 \rho (x - \mu_X)(y - \mu_Y)}{\sigma_X \sigma_Y} + \frac{(y - \mu_Y)^2}{\sigma_Y^2} \right] \right}}
$$&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;我草了怎么这么长&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;边缘密度&lt;/h4&gt;
&lt;p&gt;其实就是一维正态分布密度函数
$$
f_X(x) = \frac{1}{\sqrt{2 \pi} \sigma_X} \exp{\left( -\frac{(x - \mu_X)^2}{2 \sigma_X^2} \right)}
$$
$y$的同理&lt;/p&gt;
</content:encoded></item><item><title>[工科概率论] 多维随机变量及其分布</title><link>https://alkaid114.github.io/posts/probability_theory/multivar_rv_dist/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/probability_theory/multivar_rv_dist/</guid><pubDate>Sun, 23 Nov 2025 19:52:00 GMT</pubDate><content:encoded>&lt;p&gt;应该是只考察二维的&lt;/p&gt;
&lt;h2&gt;定义&lt;/h2&gt;
&lt;p&gt;设$(X, Y)$为二维随机变量，$x,y$为任意实数，记事件$\left { X \le x \right }$与$\left { Y \le y \right }$的交为$\left { X \le x, Y \le y \right }$，则二元函数&lt;/p&gt;
&lt;p&gt;$$
F(x,y) = P\left ( X \le x, Y \le y \right )
$$&lt;/p&gt;
&lt;p&gt;称为$(X, Y)$的&lt;strong&gt;分布函数&lt;/strong&gt;，或称为$X$与$Y$的&lt;strong&gt;联合分布函数&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;边缘分布函数&lt;/h2&gt;
&lt;p&gt;设$(X, Y)$为二维随机变量，$F(x,y)$为其联合分布函数，则称
$$
F_X(x) = \lim_{y \to +\infty} F(x,y)
$$
为$X$的&lt;strong&gt;边缘分布函数&lt;/strong&gt;，称
$$
F_Y(y) = \lim_{x \to +\infty} F(x,y)
$$
为$Y$的&lt;strong&gt;边缘分布函数&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;二维离散型随机变量&lt;/h2&gt;
&lt;p&gt;若二维随机变量$(X, Y)$所有可能取值$(x_i, y_j)$是有限个或可列无穷多个，则称$(X, Y)$为&lt;strong&gt;二维离散型随机变量&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;二维离散型rv的分布列&lt;/h3&gt;
&lt;p&gt;$$
p_{ij} = P(X = x_i, Y = y_j)
$$&lt;/p&gt;
&lt;p&gt;$p_{ij}$称为$(X, Y)$的&lt;strong&gt;分布列&lt;/strong&gt;或&lt;strong&gt;联合分布列&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;二维离散型rv的分布函数&lt;/h3&gt;
&lt;p&gt;$$
\large F(x,y) = P(X \le x, Y \le y) = \sum_{x_i \le x} \sum_{y_j \le y} p_{ij}
$$&lt;/p&gt;
&lt;h3&gt;二维离散型rv的边缘分布列&lt;/h3&gt;
&lt;p&gt;$$
P(X = x_i) = P(X = x_i, \bigcup_{j = 1}^{\infty} (Y = y_j)) = \sum_{j = 1}^{\infty} p_{ij} = p_{i \cdot}
$$&lt;/p&gt;
&lt;p&gt;同理，$\large P(Y = y_j) = \sum_{i = 1}^{\infty} p_{ij} = p_{\cdot j}$&lt;/p&gt;
&lt;p&gt;分布列表格：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;$X \backslash Y$&lt;/th&gt;
&lt;th&gt;$y_1$&lt;/th&gt;
&lt;th&gt;$y_2$&lt;/th&gt;
&lt;th&gt;$\cdots$&lt;/th&gt;
&lt;th&gt;$y_j$&lt;/th&gt;
&lt;th&gt;$\cdots$&lt;/th&gt;
&lt;th&gt;$p_{i \cdot}$&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;$x_1$&lt;/td&gt;
&lt;td&gt;$p_{11}$&lt;/td&gt;
&lt;td&gt;$p_{12}$&lt;/td&gt;
&lt;td&gt;$\cdots$&lt;/td&gt;
&lt;td&gt;$p_{1j}$&lt;/td&gt;
&lt;td&gt;$\cdots$&lt;/td&gt;
&lt;td&gt;$p_{1 \cdot}$&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$x_2$&lt;/td&gt;
&lt;td&gt;$p_{21}$&lt;/td&gt;
&lt;td&gt;$p_{22}$&lt;/td&gt;
&lt;td&gt;$\cdots$&lt;/td&gt;
&lt;td&gt;$p_{2j}$&lt;/td&gt;
&lt;td&gt;$\cdots$&lt;/td&gt;
&lt;td&gt;$p_{2 \cdot}$&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$\vdots$&lt;/td&gt;
&lt;td&gt;$\vdots$&lt;/td&gt;
&lt;td&gt;$\vdots$&lt;/td&gt;
&lt;td&gt;$\ddots$&lt;/td&gt;
&lt;td&gt;$\vdots$&lt;/td&gt;
&lt;td&gt;$\ddots$&lt;/td&gt;
&lt;td&gt;$\vdots$&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$x_i$&lt;/td&gt;
&lt;td&gt;$p_{i1}$&lt;/td&gt;
&lt;td&gt;$p_{i2}$&lt;/td&gt;
&lt;td&gt;$\cdots$&lt;/td&gt;
&lt;td&gt;$p_{ij}$&lt;/td&gt;
&lt;td&gt;$\cdots$&lt;/td&gt;
&lt;td&gt;$p_{i \cdot}$&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$\vdots$&lt;/td&gt;
&lt;td&gt;$\vdots$&lt;/td&gt;
&lt;td&gt;$\vdots$&lt;/td&gt;
&lt;td&gt;$\ddots$&lt;/td&gt;
&lt;td&gt;$\vdots$&lt;/td&gt;
&lt;td&gt;$\ddots$&lt;/td&gt;
&lt;td&gt;$\vdots$&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$p_{\cdot j}$&lt;/td&gt;
&lt;td&gt;$p_{\cdot 1}$&lt;/td&gt;
&lt;td&gt;$p_{\cdot 2}$&lt;/td&gt;
&lt;td&gt;$\cdots$&lt;/td&gt;
&lt;td&gt;$p_{\cdot j}$&lt;/td&gt;
&lt;td&gt;$\cdots$&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</content:encoded></item><item><title>[工科概率论] 随机变量函数的分布</title><link>https://alkaid114.github.io/posts/probability_theory/dist_rv_func/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/probability_theory/dist_rv_func/</guid><pubDate>Sun, 23 Nov 2025 18:12:00 GMT</pubDate><content:encoded>&lt;p&gt;本节用于解决已知随机变量$X$的分布，求随机变量$Y = g(X)$的分布的问题&lt;/p&gt;
&lt;h2&gt;离散型随机变量&lt;/h2&gt;
&lt;p&gt;离散的简单，一个例题就能看懂了&lt;/p&gt;
&lt;p&gt;e.g. 已知随机变量$X$的分布如下表：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;$x_i$&lt;/th&gt;
&lt;th&gt;-1&lt;/th&gt;
&lt;th&gt;1&lt;/th&gt;
&lt;th&gt;2&lt;/th&gt;
&lt;th&gt;3&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;$p_i$&lt;/td&gt;
&lt;td&gt;0.2&lt;/td&gt;
&lt;td&gt;0.2&lt;/td&gt;
&lt;td&gt;0.3&lt;/td&gt;
&lt;td&gt;0.3&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;求随机变量$Y = X^2$的分布&lt;/p&gt;
&lt;p&gt;解：&lt;/p&gt;
&lt;p&gt;先算$Y$的可能取值： $y_1 = (-1)^2 = 1$，$y_2 = 1^2 = 1$，$y_3 = 2^2 = 4$，$y_4 = 3^2 = 9$&lt;/p&gt;
&lt;p&gt;把重复的值合并，概率相加，得到$Y$的可能取值为：${1, 4, 9}$&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;$y_j$&lt;/th&gt;
&lt;th&gt;1&lt;/th&gt;
&lt;th&gt;4&lt;/th&gt;
&lt;th&gt;9&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;$p_j$&lt;/td&gt;
&lt;td&gt;0.4&lt;/td&gt;
&lt;td&gt;0.3&lt;/td&gt;
&lt;td&gt;0.3&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;连续型随机变量&lt;/h2&gt;
&lt;p&gt;用到的方法有&lt;strong&gt;分布函数法&lt;/strong&gt;和&lt;strong&gt;公式法&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;分布函数法&lt;/h3&gt;
&lt;p&gt;e.g. 已知$X \sim N(\mu, \sigma^2)$，求$Y = \dfrac{X - \mu}{\sigma}$的概率密度&lt;/p&gt;
&lt;p&gt;解：&lt;/p&gt;
&lt;p&gt;先求$Y$的分布函数：&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
F_Y(y) &amp;amp;= P(Y \le y) = P\left(\frac{X - \mu}{\sigma} \le y\right) \
&amp;amp;= P(X \le \sigma y + \mu) \
&amp;amp;= F_X(\sigma y + \mu)
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;如果已知$X$的分布函数$F_X(x)$，也可以代入得到$Y$的分布函数$F_Y(y)$再求导得$f_Y(y)$（记得要把$F_X(x)$的区间也带入）但这道例题正态分布的分布函数没有解析式，所以接下来直接求导得到密度函数&lt;/p&gt;
&lt;p&gt;将上式两侧分别对$y$求导，得到$Y$的密度函数：&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
f_Y(y) &amp;amp;= F_Y^{\prime}(y) = F_X^{\prime}(\sigma y + \mu) \cdot \sigma \
&amp;amp;= f_X(\sigma y + \mu) \cdot \sigma
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;$f_X(x)$为已知的正态分布密度函数，代入上式即可得到$Y$的密度函数：&lt;/p&gt;
&lt;p&gt;$$
f_Y(y) =\large \dfrac{1}{\sqrt{2 \pi}} e^{\large -\frac{y^2}{2}}
$$&lt;/p&gt;
&lt;h3&gt;公式法&lt;/h3&gt;
&lt;p&gt;设$X$为连续型随机变量，$Y = g(X)$，且$g(x)$为区间$(a,b)$上的&lt;strong&gt;单调&lt;/strong&gt;可微函数，则$Y=g(X)$的概率密度为：&lt;/p&gt;
&lt;p&gt;$$
\large f_Y(y) = \begin{cases}
\large f_X(h(y)) |h^{\prime} (y)|, \quad A&amp;lt;y&amp;lt;B \[1.5em]
0, \quad \text{其他}
\end{cases}
$$&lt;/p&gt;
&lt;p&gt;其中，$h(y)$为$g(x)$的反函数，$A = \min{g(a), g(b)}$，$B = \max{g(a), g(b)}$&lt;/p&gt;
&lt;p&gt;e.g. 对球的直径进行测量，设其值$X$在区间$(a,b)$上服从均匀分布，求球的体积$Y$的概率密度&lt;/p&gt;
&lt;p&gt;解：&lt;/p&gt;
&lt;p&gt;先写出$X$的密度函数：&lt;/p&gt;
&lt;p&gt;$$
f_X(x) = \begin{cases}
\dfrac{1}{b-a}, \quad a &amp;lt; x &amp;lt; b \[1.5em]
0, \quad \text{其他}
\end{cases}
$$&lt;/p&gt;
&lt;p&gt;球的体积$Y$与直径$X$的关系为： $Y = g(X) = \dfrac{\pi}{6} X^3$&lt;/p&gt;
&lt;p&gt;得$y = \dfrac{\pi}{6} x^3 \quad a&amp;lt;x&amp;lt;b$&lt;/p&gt;
&lt;p&gt;可见这是一个单调可微函数，接下来求反函数$h(y)$： $x = h(y) = \sqrt[3]{\dfrac{6y}{\pi}} \quad \dfrac{\pi}{6}a^3 &amp;lt; y &amp;lt; \dfrac{\pi}{6}b^3$&lt;/p&gt;
&lt;p&gt;所以：&lt;/p&gt;
&lt;p&gt;$$
\large f_Y(y) = f_X(h(y)) |h^{\prime}(y)| = \frac{1}{b-a} \sqrt[3]{\frac{2}{9 \pi}} y^{\large -\frac{2}{3}}
$$&lt;/p&gt;
&lt;h4&gt;当$g(x)$分段单调时&lt;/h4&gt;
&lt;p&gt;可将区间$(a,b)$划分为若干个单调区间，分别求出各区间对应的密度函数，然后将各区间的密度函数相加&lt;/p&gt;
&lt;p&gt;此处约定对于使得反函数$h_i(y)$无意义的$y$值，$f_X(h_i(y)) |h_i^{\prime}(y)| = 0$&lt;/p&gt;
&lt;h2&gt;即不离散也不连续的随机变量&lt;/h2&gt;
&lt;p&gt;e.g. 已知随机变量$X$的概率密度为：&lt;/p&gt;
&lt;p&gt;$$
f_X(x) = \begin{cases}
\dfrac{1}{a}x^2, \quad 0 &amp;lt; x &amp;lt; 3 \[1.5em]
0, \quad \text{其他}
\end{cases}
$$&lt;/p&gt;
&lt;p&gt;令随机变量$Y$为：&lt;/p&gt;
&lt;p&gt;$$
Y = \begin{cases}
2, \quad X \le 1 \[1em]
X, \quad 1 &amp;lt; X &amp;lt; 2 \[1em]
1, \quad X \ge 2
\end{cases}
$$&lt;/p&gt;
&lt;p&gt;求$Y$的分布函数&lt;/p&gt;
&lt;p&gt;解：&lt;/p&gt;
&lt;p&gt;因为$f_X(x)$的总面积是1，所以$a$是可以确定的：&lt;/p&gt;
&lt;p&gt;$$
\int_{-\infty}^{+\infty} f_X(x) , dx = \int_{0}^{3} \frac{1}{a}x^2 , dx = \frac{1}{a} \int_{0}^{3} x^2 , dx = \frac{1}{a} \cdot \frac{27}{3} = \frac{9}{a} = 1 \Rightarrow a = 9
$$&lt;/p&gt;
&lt;p&gt;可得$Y$De&lt;/p&gt;
&lt;p&gt;设$F_Y(y)$为$Y$的分布函数，则：&lt;/p&gt;
&lt;p&gt;$y &amp;lt; 1$时，$F_Y(y)= P(Y \le y) = 0$&lt;/p&gt;
&lt;p&gt;$y \ge 2$时，$F_Y(y)= P(Y \le y) = 1$&lt;/p&gt;
&lt;p&gt;当$1 \le y &amp;lt; 2$时，&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
F_Y(y) &amp;amp;= P(Y \le y) = P(Y=1) + P(1&amp;lt;Y \le y) \
&amp;amp;= P(X \ge 2) + P(1 &amp;lt; X \le y) \
&amp;amp;= \int_{2}^{3} \frac{1}{9} x^2 , dx + \int_{1}^{y} \frac{1}{9} x^2 , dx \[1.5em]
&amp;amp;= \frac{y^3 + 18}{27}
\end{aligned}
$$&lt;/p&gt;
</content:encoded></item><item><title>[工科概率论] 正态分布</title><link>https://alkaid114.github.io/posts/probability_theory/normal_distribution/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/probability_theory/normal_distribution/</guid><pubDate>Sun, 23 Nov 2025 17:51:00 GMT</pubDate><content:encoded>&lt;h2&gt;正态分布定义&lt;/h2&gt;
&lt;p&gt;$$
X \sim N(\mu, \sigma^2)
$$&lt;/p&gt;
&lt;p&gt;$$
\large f(x) = \frac{1}{\sqrt{2 \pi} \sigma} e^{\large  -\frac{(x - \mu)^2}{2 \sigma^2}}
$$&lt;/p&gt;
&lt;p&gt;其中，$\mu$为均值，$\sigma^2$为方差&lt;/p&gt;
&lt;h2&gt;标准正态分布&lt;/h2&gt;
&lt;p&gt;$$
Z = \frac{X - \mu}{\sigma} \sim N(0, 1)
$$&lt;/p&gt;
&lt;p&gt;求解正态分布概率时，需要转换为标准正态分布后才能查表&lt;/p&gt;
&lt;h2&gt;标准正态分布的分布函数&lt;/h2&gt;
&lt;p&gt;$$
\Phi(z) = P(Z \le z)
$$&lt;/p&gt;
&lt;p&gt;性质：&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
\Phi(-z) &amp;amp;= 1 - \Phi(z) \
P(-z \le Z \le z) &amp;amp;= 2\Phi(z) - 1
\end{aligned}
$$&lt;/p&gt;
&lt;h2&gt;正态分布概率计算&lt;/h2&gt;
&lt;p&gt;设
$$
X \sim N(\mu, \sigma^2)
$$
则
$$
P(a \le X \le b) = \Phi\left(\frac{b - \mu}{\sigma}\right) - \Phi\left(\frac{a - \mu}{\sigma}\right)
$$&lt;/p&gt;
&lt;h2&gt;上侧$\alpha$分位数&lt;/h2&gt;
&lt;p&gt;设$X \sim N(0, 1)$，对给定的$0 &amp;lt; \alpha &amp;lt; 1$，若数$u_{\alpha}$满足条件：&lt;/p&gt;
&lt;p&gt;$$
P(Z &amp;gt; u_{\alpha}) = \alpha
$$
或者说
$$
\Phi(u_{\alpha}) = 1 - \alpha
$$&lt;/p&gt;
&lt;p&gt;则称$u_{\alpha}$为标准正态分布的&lt;strong&gt;上侧$\alpha$分位数&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;正态随机变量的线性函数仍为正态随机变量&lt;/h2&gt;
&lt;p&gt;设$X \sim N(\mu, \sigma^2)$，则对于任意常数$a$和$b$，有
$$
Y = aX + b \sim N(a\mu + b, a^2 \sigma^2)
$$&lt;/p&gt;
&lt;p&gt;其实就是均值和方差的性质，因为正态分布的参数就是均值和方差，所以也有这个性质&lt;/p&gt;
</content:encoded></item><item><title>[工科概率论] 各种连续型分布</title><link>https://alkaid114.github.io/posts/probability_theory/continuous_distribution/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/probability_theory/continuous_distribution/</guid><pubDate>Sun, 23 Nov 2025 17:44:00 GMT</pubDate><content:encoded>&lt;h2&gt;均匀分布&lt;/h2&gt;
&lt;p&gt;$$
X \sim U(a, b)
$$&lt;/p&gt;
&lt;p&gt;$$
f(x) = \begin{cases}
\frac{1}{b-a}, &amp;amp; a \le x \le b \
0, &amp;amp; \text{otherwise}
\end{cases}
$$&lt;/p&gt;
&lt;p&gt;$$
F(x) = \begin{cases}
0, &amp;amp; x &amp;lt; a \
\frac{x-a}{b-a}, &amp;amp; a \le x \le b \
1, &amp;amp; x &amp;gt; b
\end{cases}
$$&lt;/p&gt;
&lt;p&gt;$$
E(X) = \frac{a+b}{2}
$$&lt;/p&gt;
&lt;p&gt;$$
D(X) = \frac{(b-a)^2}{12}
$$&lt;/p&gt;
&lt;h2&gt;指数分布&lt;/h2&gt;
&lt;p&gt;$$
X \sim E(\lambda)
$$&lt;/p&gt;
&lt;p&gt;$\lambda$称为指数分布的参数，$\lambda &amp;gt; 0$&lt;/p&gt;
&lt;p&gt;$$
f(x) = \begin{cases}
\lambda e^{-\lambda x}, &amp;amp; x \ge 0 \
0, &amp;amp; x &amp;lt; 0
\end{cases}
$$&lt;/p&gt;
&lt;p&gt;$$
F(x) = \begin{cases}
1 - e^{-\lambda x}, &amp;amp; x \ge 0 \
0, &amp;amp; x &amp;lt; 0
\end{cases}
$$&lt;/p&gt;
&lt;p&gt;$$
E(X) = \frac{1}{\lambda}
$$&lt;/p&gt;
&lt;p&gt;$$
D(X) = \frac{1}{\lambda^2}
$$&lt;/p&gt;
&lt;h2&gt;正态分布&lt;/h2&gt;
&lt;p&gt;$$
X \sim N(\mu, \sigma^2)
$$&lt;/p&gt;
&lt;p&gt;$$
\large f(x) = \frac{1}{\sqrt{2\pi} \sigma} e^{\large -\frac{(x-\mu)^2}{2\sigma^2}}
$$&lt;/p&gt;
&lt;p&gt;分布函数不考察，通过查表求值&lt;/p&gt;
&lt;p&gt;$$
E(X) = \mu
$$&lt;/p&gt;
&lt;p&gt;$$
D(X) = \sigma^2
$$&lt;/p&gt;
&lt;h3&gt;标准正态分布&lt;/h3&gt;
&lt;p&gt;$$
X \sim N(0, 1)
$$&lt;/p&gt;
</content:encoded></item><item><title>[工科概率论] 分布函数 密度函数</title><link>https://alkaid114.github.io/posts/probability_theory/distri_density_fn/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/probability_theory/distri_density_fn/</guid><pubDate>Sun, 23 Nov 2025 17:40:00 GMT</pubDate><content:encoded>&lt;p&gt;用于解决区间上的概率问题&lt;/p&gt;
&lt;h2&gt;区间上的概率&lt;/h2&gt;
&lt;p&gt;$$
P(x_1 &amp;lt; X \le x_2) = P(X \le x_2) - P(X \le x_1) = F(x_2) - F(x_1)
$$&lt;/p&gt;
&lt;h2&gt;分布函数&lt;/h2&gt;
&lt;p&gt;$$
F(x) = P(X \le x)
$$&lt;/p&gt;
&lt;h3&gt;分布函数的性质&lt;/h3&gt;
&lt;p&gt;$$
\begin{aligned}
F(-\infty) &amp;amp;= \lim_{x \to -\infty} F(x) = 0 \
F(+\infty) &amp;amp;= \lim_{x \to +\infty} F(x) = 1 \
F(x_1) &amp;amp;\le F(x_2), \quad x_1 &amp;lt; x_2 \quad \text{（单调不减）} \
F(x^+) &amp;amp;= F(x) \quad \text{（右连续）}
\end{aligned}
$$&lt;/p&gt;
&lt;h2&gt;密度函数&lt;/h2&gt;
&lt;p&gt;用$f(x)$表示&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
F(x) = \int_{-\infty}^{x} f(t) , dt \[1.5em]
f(x) = F^{\prime}(x)
\end{aligned}
$$&lt;/p&gt;
&lt;h2&gt;连续型随机变量取个别值的概率为0&lt;/h2&gt;
&lt;p&gt;$$
P(X = x) = P(x \le X \le x) = F(x) - F(x) = 0
$$&lt;/p&gt;
&lt;p&gt;:::tip
一个事件的概率为0不一定是不可能发生的事件；概率为1也不一定是必然发生的事件
:::&lt;/p&gt;
&lt;h2&gt;常见题型&lt;/h2&gt;
&lt;h3&gt;已知密度函数，求分布函数&lt;/h3&gt;
&lt;p&gt;$$
F(x) = \int_{x_1}^{x_2} f(x) , dx
$$&lt;/p&gt;
&lt;p&gt;$x_1, x_2$分别为密度函数区间的上下限&lt;/p&gt;
&lt;p&gt;注意分布函数是累计概率，需要叠加之前区间的概率&lt;/p&gt;
&lt;p&gt;e.g.&lt;/p&gt;
&lt;p&gt;已知密度函数
$$
f(x) = \begin{cases}
\dfrac{1}{b-a}, \quad a &amp;lt; x &amp;lt; b \[1.5em]
0, \quad \text{其他}
\end{cases}
$$
求分布函数，解：&lt;/p&gt;
&lt;p&gt;$$
F(x) = \begin{cases}
\int_{-\infty}^{x} 0 , dx = 0, \quad x \le a \[1.5em]
\int_{a}^{x} \dfrac{1}{b-a} , dx + 0 = \dfrac{x-a}{b-a}, \quad a &amp;lt; x &amp;lt; b \[1.5em]
\int_{a}^{b} \dfrac{1}{b-a} , dx + 0 = 1, \quad x \ge b
\end{cases}
$$&lt;/p&gt;
&lt;h3&gt;已知分布函数，求密度函数&lt;/h3&gt;
&lt;p&gt;$$
f(x) = F^{\prime}(x)
$$&lt;/p&gt;
&lt;p&gt;这个就很无脑了，直接求导完把对应的分布函数的区间抄下来就行&lt;/p&gt;
</content:encoded></item><item><title>[工科复变函数] 拉普拉斯变换</title><link>https://alkaid114.github.io/posts/complex_func/laplace_transform/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/complex_func/laplace_transform/</guid><pubDate>Tue, 11 Nov 2025 22:24:00 GMT</pubDate><content:encoded>&lt;h2&gt;拉普拉斯变换的定义&lt;/h2&gt;
&lt;p&gt;$$
\mathscr{L}[f(t)] = F(s) = \int_{0}^{+\infty} f(t) e^{-st} dt
$$&lt;/p&gt;
&lt;p&gt;其中$s$为复变量$s=\beta + i\omega$，$t \geq 0$&lt;/p&gt;
&lt;h2&gt;拉普拉斯逆变换&lt;/h2&gt;
&lt;p&gt;用留数求&lt;/p&gt;
&lt;p&gt;只适用于$F(s)$只有有限个孤立奇点的情况，且当$s \to \infty$时，$F(s) \to 0$，不过题里既然让求了，那也没什么好说的，肯定满足条件&lt;/p&gt;
&lt;p&gt;$$
f(t) = \mathscr{L}^{-1}[F(s)] = \sum_{k=1}^{n} \text{Res} \left( F(s) e^{st}, s_k \right)
$$&lt;/p&gt;
&lt;h2&gt;常见拉普拉斯变换对&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;$f(t)$&lt;/th&gt;
&lt;th&gt;$F(s)$&lt;/th&gt;
&lt;th&gt;条件&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;$\frac{1}{s}$&lt;/td&gt;
&lt;td&gt;$\mathbf{Re}(s) &amp;gt; 0$&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$\delta(t)$&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;无&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$u(t)$&lt;/td&gt;
&lt;td&gt;$\frac{1}{s}$&lt;/td&gt;
&lt;td&gt;$\mathbf{Re}(s) &amp;gt; 0$&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$t^n$&lt;/td&gt;
&lt;td&gt;$\frac{\Gamma(n+1)}{s^{n+1}}$&lt;/td&gt;
&lt;td&gt;$\mathbf{Re}(s) &amp;gt; 0$&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$e^{kt}$&lt;/td&gt;
&lt;td&gt;$\frac{1}{s - k}$&lt;/td&gt;
&lt;td&gt;$\mathbf{Re}(s) &amp;gt; k$&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$\sin{(k t)}$&lt;/td&gt;
&lt;td&gt;$\frac{k}{s^2 + k^2}$&lt;/td&gt;
&lt;td&gt;$\mathbf{Re}(s) &amp;gt; 0$&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$\cos{(k t)}$&lt;/td&gt;
&lt;td&gt;$\frac{s}{s^2 + k^2}$&lt;/td&gt;
&lt;td&gt;$\mathbf{Re}(s) &amp;gt; 0$&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;微积分跳过不讲但现在还考的伽玛函数&lt;/h3&gt;
&lt;p&gt;$$
\Gamma(n) = \int_{0}^{\infty} t^{n-1} e^{-t} dt
$$&lt;/p&gt;
&lt;p&gt;有以下性质&lt;/p&gt;
&lt;p&gt;$$
\Gamma(n+1) = n \Gamma(n) \quad (n &amp;gt; 0) \[1.5em]
\Gamma(1) = 1 \[1.5em]
\Gamma\left(\frac{1}{2}\right) = \sqrt{\pi} \[1.5em]
\Gamma(n+1) = n! \quad (n \in \mathbb{N})
$$&lt;/p&gt;
&lt;h2&gt;拉普拉斯变换存在定理&lt;/h2&gt;
&lt;p&gt;$f(t)$的增长速度不超过某个指数函数&lt;/p&gt;
&lt;p&gt;$$
|f(t)| \leq M e^{c_0 t} \quad (t \geq 0)， M, c_0 &amp;gt; 0
$$&lt;/p&gt;
&lt;p&gt;$c_0$称为$f(t)$的增长指数&lt;/p&gt;
&lt;p&gt;条件还是很宽松的&lt;/p&gt;
&lt;h2&gt;拉普拉斯变换的性质&lt;/h2&gt;
&lt;p&gt;以下均设$\mathscr{L}[f(t)] = F(s)$&lt;/p&gt;
&lt;h3&gt;线性性质&lt;/h3&gt;
&lt;p&gt;不多说了&lt;/p&gt;
&lt;h3&gt;微分性质&lt;/h3&gt;
&lt;p&gt;$$
\boxed{
\mathscr{L}[f^{(n)}(t)] = s^n F(s) - s^{n-1} f(0) - s^{n-2} f&apos;(0) - \dots - f^{(n-1)}(0)
}\[1.5em]
\boxed{
F^{(n)}(s) = \mathscr{L} \left[ (-t)^n f(t) \right]
}
$$&lt;/p&gt;
&lt;p&gt;这个性质在求解微分方程时会大量用到&lt;/p&gt;
&lt;h3&gt;积分性质&lt;/h3&gt;
&lt;p&gt;$$
\boxed{
\mathscr{L} \left[ \int_{0}^{t} f(\tau) d\tau \right] = \frac{F(s)}{s}
}
$$&lt;/p&gt;
&lt;p&gt;更一般的式子&lt;/p&gt;
&lt;p&gt;$$
\mathscr{L} \left[ \int_{0}^{t} dt \int_{0}^{t} dt \cdots \int_{0}^{t} f(t) dt \right ] = \frac{F(s)}{s^n} \qquad (n \text{重积分})
$$&lt;/p&gt;
&lt;p&gt;像函数的积分性质&lt;/p&gt;
&lt;p&gt;$$
\boxed{
\mathscr{L} \left[ \frac{f(t)}{t} \right] = \int_s^{\infty} F(u) du
}
$$&lt;/p&gt;
&lt;p&gt;也有更一般的形式&lt;/p&gt;
&lt;p&gt;$$
\mathscr{L} \left[ \frac{f(t)}{t^n} \right] = \int_s^{\infty} ds \int_{s}^{\infty} ds \cdots \int_{s}^{\infty} F(s) ds, \quad (n \text{重积分})
$$&lt;/p&gt;
&lt;h3&gt;位移性质&lt;/h3&gt;
&lt;p&gt;$$
\boxed{
\mathscr{L}[e^{a t} f(t)] = F(s - a) \qquad (\mathbf{Re}(s-a) &amp;gt; c_0)
}
$$&lt;/p&gt;
&lt;p&gt;$c_0$为$f(t)$的&lt;a href=&quot;#%E6%8B%89%E6%99%AE%E6%8B%89%E6%96%AF%E5%8F%98%E6%8D%A2%E5%AD%98%E5%9C%A8%E5%AE%9A%E7%90%86&quot;&gt;&lt;strong&gt;增长指数&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;延迟性质&lt;/h3&gt;
&lt;p&gt;$$
\boxed{
\begin{aligned}
&amp;amp;\mathscr{L} \left[ f(t - a) u(t - a) \right] = e^{-a s} F(s) \qquad \[1.5em]
&amp;amp;\mathscr{L}^{-1} \left[ e^{-s a} F(s) \right] = f(t - a) u(t - a)
\end{aligned}
}
$$&lt;/p&gt;
&lt;h3&gt;缩放性质&lt;/h3&gt;
&lt;p&gt;$$
\boxed{
\mathscr{L}[f(a t)] = \frac{1}{a} F\left(\frac{s}{a}\right)
} \qquad (a &amp;gt; 0)
$$&lt;/p&gt;
&lt;h2&gt;拉普拉斯的性质(2)&lt;/h2&gt;
&lt;h3&gt;初值定理&lt;/h3&gt;
&lt;p&gt;$\lim\limits_{t \to 0^+} sF(s)$存在，则有&lt;/p&gt;
&lt;p&gt;$$
f(0^+) = \lim\limits_{s \to \infty} sF(s)
$$&lt;/p&gt;
&lt;h3&gt;终值定理&lt;/h3&gt;
&lt;p&gt;$\lim\limits_{t \to \infty} f(t)$存在，且$F(s)$的极点均位于$s$平面的左半平面，则有&lt;/p&gt;
&lt;p&gt;$$
f(\infty) = \lim\limits_{s \to 0} sF(s)
$$&lt;/p&gt;
&lt;h2&gt;卷积定理&lt;/h2&gt;
&lt;p&gt;设$\mathscr{L}[f(t)] = F(s)$，$\mathscr{L}[g(t)] = G(s)$，则有&lt;/p&gt;
&lt;h3&gt;拉普拉斯变换的卷积定义&lt;/h3&gt;
&lt;p&gt;$$
f(t) * g(t) = \int_{0}^{t} f(\tau) g(t - \tau) d\tau
$$&lt;/p&gt;
&lt;h3&gt;拉普拉斯变换的卷积定理&lt;/h3&gt;
&lt;p&gt;$$
\mathscr{L}[f * g] = F(s) G(s) \[1.5em]
\mathscr{L}[f \cdot g] =  F(s) * G(s)
$$&lt;/p&gt;
</content:encoded></item><item><title>ArchLinux笔记(1) 系统安装与基本配置</title><link>https://alkaid114.github.io/posts/archlinux/arch_note1_install/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/archlinux/arch_note1_install/</guid><pubDate>Thu, 06 Nov 2025 20:20:00 GMT</pubDate><content:encoded>&lt;h2&gt;设置字体&lt;/h2&gt;
&lt;p&gt;高分屏可能觉得字体太小看不清&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;setfont ter-132b
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;联网&lt;/h2&gt;
&lt;p&gt;先查看网卡信息&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ip link
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;可能有网卡的状态是DOWN的，需要启用&lt;/p&gt;
&lt;p&gt;稍后安装好系统后也可以用下面的命令启用网卡&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ip link set &amp;lt;接口名&amp;gt; up
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;设置时间同步&lt;/h2&gt;
&lt;p&gt;查看时间同步状态&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;timedatectl status
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;设置时区&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;timedatectl set-timezone Asia/Shanghai
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;磁盘分区及格式化并挂载&lt;/h2&gt;
&lt;h3&gt;分区&lt;/h3&gt;
&lt;p&gt;我推荐使用&lt;code&gt;cfdisk&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;查看磁盘情况&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;lsblk
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;启动&lt;code&gt;cfdisk&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cfdisk &amp;lt;磁盘设备&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;格式化&lt;/h3&gt;
&lt;p&gt;同样使用&lt;code&gt;lsblk&lt;/code&gt;查看磁盘情况&lt;/p&gt;
&lt;p&gt;格式化EFI分区为FAT32&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;mkfs.fat -F32 &amp;lt;EFI分区&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;格式化交换分区为swap&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;mkswap &amp;lt;交换分区&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;格式化根分区为btrfs&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;mkfs.btrfs &amp;lt;根分区&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;btrfs子卷创建&lt;/h3&gt;
&lt;p&gt;先挂载根分区&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;mount &amp;lt;根分区&amp;gt; /mnt
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;创建子卷&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;btrfs subvolume create /mnt/@
btrfs subvolume create /mnt/@home
btrfs subvolume create /mnt/@root
btrfs subvolume create /mnt/@srv
btrfs subvolume create /mnt/@cache
btrfs subvolume create /mnt/@log
btrfs subvolume create /mnt/@tmp
btrfs subvolume create /mnt/@nix
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;:::caution
卸载根分区
:::&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;umount /mnt
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;挂载&lt;/h3&gt;
&lt;p&gt;挂载btrfs子卷&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;mount -o compress=zstd:3,noatime,ssd,space_cache=v2,discard=async,subvol=@ &amp;lt;btrfs分区&amp;gt; /mnt
mkdir -p /mnt/{home,root,srv,var/cache,var/log,tmp,nix}
mount -o compress=zstd:4,noatime,ssd,space_cache=v2,discard=async,subvol=@home &amp;lt;btrfs分区&amp;gt; /mnt/home
mount -o compress=zstd:4,noatime,ssd,space_cache=v2,discard=async,subvol=@root &amp;lt;btrfs分区&amp;gt; /mnt/root
mount -o compress=zstd:4,noatime,ssd,space_cache=v2,discard=async,subvol=@srv &amp;lt;btrfs分区&amp;gt; /mnt/srv
mount -o compress=zstd:3,noatime,ssd,space_cache=v2,discard=async,subvol=@cache &amp;lt;btrfs分区&amp;gt; /mnt/var/cache
mount -o compress=zstd:3,noatime,ssd,space_cache=v2,discard=async,subvol=@log &amp;lt;btrfs分区&amp;gt; /mnt/var/log
mount -o compress=zstd:3,noatime,ssd,space_cache=v2,discard=async,subvol=@tmp &amp;lt;btrfs分区&amp;gt; /mnt/tmp
mount -o compress=zstd:4,noatime,ssd,space_cache=v2,discard=async,subvol=@nix &amp;lt;btrfs分区&amp;gt; /mnt/nix
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;挂载EFI分区&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;mkdir -p /mnt/boot
mount &amp;lt;EFI分区设备位置&amp;gt; /mnt/boot
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;启用交换分区&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;swapon &amp;lt;交换分区设备位置&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;安装基础系统&lt;/h2&gt;
&lt;h3&gt;pacman镜像源设置&lt;/h3&gt;
&lt;p&gt;使用&lt;code&gt;reflector&lt;/code&gt;选择镜像源&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;reflector --country China --age 12 --protocol https --sort rate --save /etc/pacman.d/mirrorlist
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;基础系统安装&lt;/h3&gt;
&lt;p&gt;使用&lt;code&gt;pacstrap&lt;/code&gt;安装基础系统&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pacstrap /mnt base linux linux-firmware btrfs-progs vim
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;安装CPU微码&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pacstrap /mnt intel-ucode
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;pacstrap /mnt amd-ucode
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;生成fstab文件&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;genfstab -U /mnt &amp;gt;&amp;gt; /mnt/etc/fstab
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;进入新系统进行配置&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;arch-chroot /mnt
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;设置时间&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;hwclock --systohc
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;本地化设置&lt;/h2&gt;
&lt;p&gt;编辑&lt;code&gt;/etc/locale.gen&lt;/code&gt;，取消需要的语言前的注释&lt;/p&gt;
&lt;p&gt;取消&lt;code&gt;zh_CN.UTF-8 UTF-8&lt;/code&gt;和&lt;code&gt;en_US.UTF-8 UTF-8&lt;/code&gt;的注释&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;vim /etc/locale.gen
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;生成语言环境&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;locale-gen
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;创建&lt;code&gt;/etc/locale.conf&lt;/code&gt;，写入以下内容&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;LANG=en_US.UTF-8
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;设置主机名&lt;/h2&gt;
&lt;p&gt;创建&lt;code&gt;/etc/hostname&lt;/code&gt;，写入主机名&lt;/p&gt;
&lt;h2&gt;生成initramfs&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;mkinitcpio -P
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;设置root密码&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;passwd
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;安装引导&lt;/h2&gt;
&lt;p&gt;我用&lt;code&gt;grub&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pacman -S grub efibootmgr
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;安装grub到EFI分区并创建配置文件&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB
grub-mkconfig -o /boot/grub/grub.cfg
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;安装&lt;code&gt;os-prober&lt;/code&gt;以支持多系统启动&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pacman -S os-prober
grub-mkconfig -o /boot/grub/grub.cfg
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;退出并重启&lt;/h2&gt;
&lt;p&gt;关机后记得拔U盘&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;exit
umount -R /mnt
swapoff -a
reboot
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;进入新系统后的必要配置&lt;/h2&gt;
&lt;p&gt;先登录root账号&lt;/p&gt;
&lt;h3&gt;网络配置&lt;/h3&gt;
&lt;p&gt;安装&lt;code&gt;networkmanager&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pacman -S networkmanager
systemctl enable NetworkManager
systemctl start NetworkManager
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;连接无线网络&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;nmcli device wifi list
nmcli device wifi connect &amp;lt;SSID&amp;gt; password &amp;lt;PASSWORD&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;添加普通用户&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;useradd -m -G wheel -s /bin/bash &amp;lt;用户名&amp;gt;
passwd &amp;lt;用户名&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;允许wheel组使用sudo&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;EDITOR=vim visudo
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;取消以下行的注释&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;%wheel ALL=(ALL) ALL
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;安装snapper&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;pacman -S snapper
snapper -c root create-config /
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;创建快照命令&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;snapper -c root create -d &quot;描述信息&quot;
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>[工科复变函数] 傅里叶变换</title><link>https://alkaid114.github.io/posts/complex_func/fourier_transform/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/complex_func/fourier_transform/</guid><pubDate>Fri, 24 Oct 2025 20:05:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;s&gt;先从傅里叶级数说起&lt;/s&gt;&lt;/p&gt;
&lt;p&gt;说什么说，根本就不考&lt;/p&gt;
&lt;p&gt;&amp;lt;!--## 傅里叶级数&lt;/p&gt;
&lt;p&gt;上学期的微积分课程中学过实数表示的傅里叶级数&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
f(x) &amp;amp;= \frac{a_0}{2} + \sum_{n=1}^{\infty} \left[ a_n \cos{\left(\frac{2n\pi x}{T}\right)} + b_n \sin{\left(\frac{2n\pi x}{T}\right)} \right] \[1.5em]
a_n &amp;amp;= \frac{2}{T} \int_{-T}^{T} f(x) \cos{\left(\frac{2n\pi x}{T}\right)} dx \[1.5em]
b_n &amp;amp;= \frac{2}{T} \int_{-T}^{T} f(x) \sin{\left(\frac{2n\pi x}{T}\right)} dx
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;通过欧拉公式，可以将其转换为复数形式：
$$
f(x) = \sum_{n=-\infty}^{\infty} c_n \exp{\left(i \frac{2n\pi x}{T}\right)} = \sum_{n=-\infty}^{\infty} c_n \exp{\left(i n \omega x\right)} \[1.5em]
c_n = \frac{1}{T} \int_{-T}^{T} f(x) \exp{(-i n \omega x)} dx
$$&lt;/p&gt;
&lt;p&gt;可见，傅里叶级数将周期函数表示为一组弦波函数的线性组合&lt;/p&gt;
&lt;p&gt;其中，$n \omega$即为每个弦波的频率，$c_n$为傅里叶系数，也就是每个频率成分的权重，或者叫振幅&lt;/p&gt;
&lt;p&gt;但是如果我想表示一个非周期函数该怎么办呢？--&amp;gt;&lt;/p&gt;
&lt;h2&gt;傅里叶变换&lt;/h2&gt;
&lt;p&gt;&amp;lt;!--
:::warning
以下推导施工中，请直接看结论
:::&lt;/p&gt;
&lt;p&gt;我们可以将非周期函数看作周期趋近于无穷大的周期函数&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
f(x) &amp;amp;= \lim_{T \to \infty} \sum_{n=-\infty}^{\infty} c_n \exp{\left(i n \omega x\right)} \
&amp;amp;= \lim_{T \to \infty} \sum_{n=-\infty}^{\infty} c_n \exp{\left(i \frac{2n\pi x}{T}\right)}
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;从傅里叶级数中我们可以发现它的频率是离散的，但是当$T \to \infty$时，$\omega = \frac{2\pi}{T} \to 0$，频率间隔趋近于0，现在我们将它变成了一个连续的频率分布&lt;/p&gt;
&lt;p&gt;$T \to \infty$时，频率间隔$\Delta \omega = \frac{2\pi}{T} = \omega \to 0$&lt;/p&gt;
&lt;p&gt;如先前所说，原来的傅里叶系数$c_n$是每个离散频率$n \omega$对应的，所以现在我们需要将它转换为连续频率对应的，也就是&lt;strong&gt;频率密度函数&lt;/strong&gt;，记为$F(\omega) = \frac{c_n}{\Delta \omega}$&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
F(\omega) &amp;amp;= \frac{c_n}{\Delta \omega} \
&amp;amp;= c_n \frac{T}{2\pi} = \frac{1}{2\pi} \int_{-\infty}^{\infty} f(x) \exp{(-i \omega x)} dx
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;因为$\Delta \omega \to 0$，所以可以将上面的求和式转换为积分：&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
f(x) &amp;amp;= \sum_{n=-\infty}^{\infty} \frac{c_n}{\Delta \omega} \exp{(i n \omega x)} \Delta \omega \
&amp;amp;= \int_{-\infty}^{\infty} F(\omega) \exp{(i \omega x)} d\omega \
&amp;amp;= \frac{1}{2\pi} \int_{-\infty}^{\infty} \left[ \int_{-\infty}^{\infty} f(t) \exp{(-i \omega t)} dt \right] \exp{(i \omega x)} d\omega
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;由于得知傅里叶变换的多种约定形式，发现上面的结果与常见的形式略有不同，需要通过调整常数因子来得到标准形式，此推导暂时搁置--&amp;gt;&lt;/p&gt;
&lt;h3&gt;正变换&lt;/h3&gt;
&lt;p&gt;将一个&lt;strong&gt;时域函数&lt;/strong&gt;（信号）$f(t)$转换为&lt;strong&gt;频域函数&lt;/strong&gt;（每个频率的振幅）$F(\omega)$的过程称为傅里叶变换，公式如下：&lt;/p&gt;
&lt;p&gt;$$
F(\omega) = \int_{-\infty}^{\infty} f(t) e^{(-i \omega t)} dt
$$&lt;/p&gt;
&lt;p&gt;简写为$F(\omega) = \mathscr{F}[f(t)]$&lt;/p&gt;
&lt;h3&gt;逆变换&lt;/h3&gt;
&lt;p&gt;将一个&lt;strong&gt;频域函数&lt;/strong&gt;$F(\omega)$转换回&lt;strong&gt;时域函数&lt;/strong&gt;$f(t)$的过程称为傅里叶逆变换，公式如下：&lt;/p&gt;
&lt;p&gt;$$
f(t) = \frac{1}{2\pi} \int_{-\infty}^{\infty} F(\omega) e^{(i \omega t)} d\omega
$$&lt;/p&gt;
&lt;p&gt;简写为$f(t) = \mathscr{F}^{-1}[F(\omega)]$&lt;/p&gt;
&lt;h3&gt;条件&lt;/h3&gt;
&lt;p&gt;傅里叶变换要求函数$f(t)$满足一定的条件，通常包括：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;绝对可积性&lt;/strong&gt;：函数$f(t)$在整个实数轴上绝对可积，即$\int_{-\infty}^{\infty} |f(t)| dt &amp;lt; \infty$&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;有限个间断点&lt;/strong&gt;：函数$f(t)$在任何有限区间内只有有限个间断点&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;有限个极值点&lt;/strong&gt;：函数$f(t)$在任何有限区间内只有有限个极值点&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;常见傅里叶变换对&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;$f(t)$&lt;/th&gt;
&lt;th&gt;$F(\omega)$&lt;/th&gt;
&lt;th&gt;条件&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;$\delta(t)$&lt;/td&gt;
&lt;td&gt;$1$&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$1$&lt;/td&gt;
&lt;td&gt;$2\pi \delta(\omega)$&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$e^{i \omega_0 t}$&lt;/td&gt;
&lt;td&gt;$2\pi \delta(\omega - \omega_0)$&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$\text{sgn}(t)$&lt;/td&gt;
&lt;td&gt;$\frac{2}{i \omega}$&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$u(t)$&lt;/td&gt;
&lt;td&gt;$\pi \delta(\omega) + \frac{1}{i \omega}$&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$E e^{-\beta t^2}$&lt;/td&gt;
&lt;td&gt;$E \exp{\left(-\frac{\omega^2}{4\beta}\right)} \sqrt{\frac{\pi}{\beta}}$&lt;/td&gt;
&lt;td&gt;$E &amp;gt; 0, \beta &amp;gt; 0$&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$\frac{1}{t}$&lt;/td&gt;
&lt;td&gt;$-i \pi \text{sgn}(\omega)$&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;表格写不下了，更多见&lt;a href=&quot;#%E5%8F%AF%E8%83%BD%E4%BC%9A%E7%94%A8%E5%88%B0%E7%9A%84&quot;&gt;可能会用到的&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;单位脉冲函数（狄拉克函数）&lt;/h2&gt;
&lt;p&gt;有些时候人们需要考虑物理量在空间或时间上高度集中的现象，狄拉克函数$\delta(t)$就是用来描述这种现象的数学工具&lt;/p&gt;
&lt;p&gt;&amp;lt;!--设$x$轴上点$x=x_0$处集中了质量为一单位的物质，在其他位置都没有物质分布，则$x$轴上的物质密度函数$\rho(x)$可以表示为：&lt;/p&gt;
&lt;p&gt;用$m[a,b]$表示区间$[a,b]$内的物质总量，$\Delta = b - a$&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
\rho(x) &amp;amp;= \lim_{\substack{\Delta x \to 0 \ x \in \left [ a,b \right ] }} \frac{m[a,b]}{\Delta} \[2em]
&amp;amp;= \begin{cases}
0, \quad x \neq x_0 \
\infty, \quad x = x_0
\end{cases}
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;整个$x$轴上的物质总量为：&lt;/p&gt;
&lt;p&gt;$$
m(-\infty, +\infty) = \int_{-\infty}^{\infty} \rho(x) dx = 1
$$&lt;/p&gt;
&lt;p&gt;狄拉克函数即为上述这类集中分布密度函数加以抽象概括并标准化后的结果，--&amp;gt;定义如下：&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
\delta(t) = \begin{cases}
0, \quad t \neq 0 \
\infty, \quad t = 0
\end{cases} \[1.5em]
\int_{-\infty}^{+\infty} \delta(t) dt = 1
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;狄拉克函数已经超出了传统函数的范畴，属于广义函数，因为任何一个普通函数不可能在定义域的某一点取无穷大值&lt;/p&gt;
&lt;p&gt;教材224页到229页已经沉浸在自己的艺术里了，太长不看直接看结论&lt;/p&gt;
&lt;h3&gt;性质7.3.1&lt;/h3&gt;
&lt;p&gt;设$f(t)$是任意连续函数&lt;/p&gt;
&lt;p&gt;$$
\int_{-\infty}^{\infty} \delta(t - t_0) f(t) dt = f(t_0)
$$&lt;/p&gt;
&lt;h3&gt;性质7.3.2&lt;/h3&gt;
&lt;p&gt;$$
\delta(a t) = \frac{1}{|a|} \delta(t) \quad (a \neq 0, a \in \mathbb{R})
$$&lt;/p&gt;
&lt;h3&gt;性质7.3.3&lt;/h3&gt;
&lt;p&gt;$$
\delta^{(n)}(-t) = (-1)^n \delta^{(n)}(t)
$$&lt;/p&gt;
&lt;p&gt;$\delta^{(n)}(-t)$表示将$\delta(-t)$关于$-t$求$n$阶导数，$\frac{d^n \delta(-t)}{d(-t)^n}$&lt;/p&gt;
&lt;h3&gt;$\delta (t)$ 的导数定义式&lt;/h3&gt;
&lt;p&gt;$$
\int_{-\infty}^{\infty} \delta^{(n)}(t - t_0) f(t) dt = (-1)^n \int_{-\infty}^{\infty} \delta(t) f^{(n)}(t) dt
$$&lt;/p&gt;
&lt;h3&gt;性质7.3.4&lt;/h3&gt;
&lt;p&gt;设$g(t)$在$(-\infty, +\infty)$上连续&lt;/p&gt;
&lt;p&gt;$$
g(t) \delta(t - t_0) = g(t_0) \delta(t - t_0) \qquad t_0 \in (-\infty, +\infty)
$$&lt;/p&gt;
&lt;h2&gt;广义傅里叶变换&lt;/h2&gt;
&lt;p&gt;对于某些不满足傅里叶变换条件的函数，可以通过引入狄拉克函数来定义广义傅里叶变换&lt;/p&gt;
&lt;p&gt;还是直接记结论吧&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
\mathscr{F}[\delta(t)] &amp;amp;= 1 \quad \mathscr{F}^{-1}[1] = \delta(t) \[1em]
\mathscr{F}[1] &amp;amp;= 2\pi \delta(\omega) \quad \mathscr{F}^{-1}[2\pi \delta(\omega) ] = 1 \[1em]
\mathscr{F}[e^{i \omega_0 t}] &amp;amp;= 2\pi \delta(\omega - \omega_0) \quad \mathscr{F}^{-1}[2\pi \delta(\omega - \omega_0)] = e^{i \omega_0 t}
\end{aligned}
$$&lt;/p&gt;
&lt;h3&gt;符号函数的傅里叶变换&lt;/h3&gt;
&lt;p&gt;$$
\begin{aligned}
\text{sgn}(t) = \begin{cases}
1, \quad t &amp;gt; 0 \
-1, \quad t &amp;lt; 0
\end{cases} \[1em]
\mathscr{F}[\text{sgn}(t)] = \frac{2}{i\omega}
\end{aligned}
$$&lt;/p&gt;
&lt;h3&gt;如何求广义傅里叶变换&lt;/h3&gt;
&lt;p&gt;核心就是将函数分解成上述几种已知的结论的组合，然后利用&lt;a href=&quot;#%E5%82%85%E9%87%8C%E5%8F%B6%E5%8F%98%E6%8D%A2%E7%9A%84%E6%80%A7%E8%B4%A8&quot;&gt;傅里叶变换的性质&lt;/a&gt;求解&lt;/p&gt;
&lt;h3&gt;三角函数的傅里叶变换&lt;/h3&gt;
&lt;p&gt;用欧拉公式然后套已知变换对&lt;/p&gt;
&lt;h2&gt;傅里叶变换的性质&lt;/h2&gt;
&lt;p&gt;以下均设$\mathscr{F}[f(t)] = F(\omega)$&lt;/p&gt;
&lt;h3&gt;线性性质&lt;/h3&gt;
&lt;p&gt;$$
\mathscr{F}[a f(t) + b g(t)] = a \mathscr{F}[f(t)] + b \mathscr{F}[g(t)]
$$&lt;/p&gt;
&lt;p&gt;逆变换也有&lt;/p&gt;
&lt;h3&gt;对称性质&lt;/h3&gt;
&lt;p&gt;把频域函数当作时域函数进行变换&lt;/p&gt;
&lt;p&gt;$$
\mathscr{F}[F(t)] = 2\pi f(-\omega)
$$&lt;/p&gt;
&lt;h3&gt;位移性质&lt;/h3&gt;
&lt;p&gt;$$
\begin{aligned}
\mathscr{F}[f(t \pm t_0)] = e^{\pm i \omega t_0} \mathscr{F}[f(t)] \[1em]
\mathscr{F}^{-1}[F(\omega \pm \omega_0)] = e^{\mp i \omega_0 t} f(t)
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;&amp;lt;!--位移会影响频域的相位（乘$e^{\pm i \omega t_0}$后辐角改变），但不会改变振幅（乘$e^{\pm i \omega t_0}$后模没变）--&amp;gt;&lt;/p&gt;
&lt;h3&gt;坐标缩放性质&lt;/h3&gt;
&lt;p&gt;$$
\begin{aligned}
\mathscr{F}[f(a t)] = \frac{1}{|a|} F\left(\frac{\omega}{a}\right)
\end{aligned} \qquad (a \neq 0, a \in \mathbb{R})
$$&lt;/p&gt;
&lt;p&gt;&amp;lt;!--如果$f(t)$的图像变&lt;strong&gt;窄&lt;/strong&gt;，则$F(\omega)$的图像变&lt;strong&gt;宽&lt;/strong&gt;变&lt;strong&gt;矮&lt;/strong&gt;；反之若$f(t)$的图像变&lt;strong&gt;宽&lt;/strong&gt;，则$F(\omega)$的图像变&lt;strong&gt;窄&lt;/strong&gt;变&lt;strong&gt;高&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;生活中常见的现象：音频加速播放时，声音变得尖细（频率变高），而慢速播放时，声音变得低沉（频率变低）--&amp;gt;&lt;/p&gt;
&lt;h3&gt;微分性质&lt;/h3&gt;
&lt;p&gt;$$
\mathscr{F}[f^{(n)}(t)] = (i\omega)^n F(\omega) \[1.5em]
\mathscr{F}^{-1}[F^{(n)}(\omega)] = (-i t)^n f(t)
$$&lt;/p&gt;
&lt;p&gt;这个性质在求解微分方程时会大量用到&lt;/p&gt;
&lt;h3&gt;积分性质&lt;/h3&gt;
&lt;p&gt;$$
\mathscr{F} \left[ \int_{-\infty}^{t} f(\tau) d\tau \right] = \frac{F(\omega)}{i \omega} + \pi F(0) \delta(\omega)
$$&lt;/p&gt;
&lt;p&gt;当$\lim_{t \to -\infty} \int_{-\infty}^{t} f(\tau) d\tau \to 0$时，有&lt;/p&gt;
&lt;p&gt;$$
\mathscr{F} \left[ \int_{-\infty}^{t} f(\tau) d\tau \right] = \frac{F(\omega)}{i \omega}
$$&lt;/p&gt;
&lt;h3&gt;乘积定理&lt;/h3&gt;
&lt;p&gt;设$F_1(\omega) = \mathscr{F}[f_1(t)]$，$F_2(\omega) = \mathscr{F}[f_2(t)]$，则有&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
\int_{-\infty}^{\infty} f_1(t) f_2(t) dt &amp;amp;= \frac{1}{2\pi} \int_{-\infty}^{\infty} \overline{F_1(\omega)} F_2(\omega) d\omega \[2em]
&amp;amp;= \frac{1}{2\pi} \int_{-\infty}^{\infty} F_1(\omega) \overline{F_2(\omega)} d\omega
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;$\overline{F(\omega)}$表示$F(\omega)$的复共轭函数&lt;/p&gt;
&lt;h3&gt;帕萨瓦尔定理&lt;/h3&gt;
&lt;p&gt;$$
\int_{-\infty}^{\infty} |f(t)|^2 dt = \frac{1}{2\pi} \int_{-\infty}^{\infty} |F(\omega)|^2 d\omega
$$&lt;/p&gt;
&lt;p&gt;时域信号的总能量等于它在频域下的总能量&lt;/p&gt;
&lt;h2&gt;卷积&lt;/h2&gt;
&lt;p&gt;3b1b的这个视频讲得挺好 &lt;a href=&quot;https://www.bilibili.com/video/BV1Vd4y1e7pj/&quot;&gt;【官方双语】那么……什么是卷积？&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;定义&lt;/h3&gt;
&lt;p&gt;$$
(f * g)(t) = \int_{-\infty}^{\infty} f(\tau) g(t - \tau) d\tau
$$&lt;/p&gt;
&lt;p&gt;$f*g$表示函数$f$和$g$的卷积&lt;/p&gt;
&lt;p&gt;但是这个计算太麻烦了，好在傅里叶变换有个性质&lt;/p&gt;
&lt;h3&gt;卷积定理&lt;/h3&gt;
&lt;p&gt;设$\mathscr{F}[f(t)] = F(\omega)$，$\mathscr{F}[g(t)] = G(\omega)$，则有&lt;/p&gt;
&lt;p&gt;$$
\mathscr{F}[f * g] = F(\omega) G(\omega) \[1.5em]
\mathscr{F}[f \cdot g] = \frac{1}{2\pi} F(\omega) * G(\omega)
$$&lt;/p&gt;
&lt;p&gt;因为傅里叶变换的多种约定形式，这块可能会有不同，我这里的是教材上给的形式&lt;/p&gt;
&lt;p&gt;&amp;lt;!--也就是说，时域的卷积对应频域的乘积，只要先变换再相乘，最后逆变换就能得到卷积结果--&amp;gt;&lt;/p&gt;
&lt;h3&gt;卷积的性质&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;交换律：$f * g = g * f$&lt;/li&gt;
&lt;li&gt;结合律：$f &lt;em&gt;(g&lt;/em&gt; h) = (f * g) * h$&lt;/li&gt;
&lt;li&gt;分配律：$f &lt;em&gt;(g + h) = f&lt;/em&gt; g + f* h$、&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;设$g(t) = f_1(t) * f_2(t)$，则有&lt;/p&gt;
&lt;h4&gt;平移不变性质&lt;/h4&gt;
&lt;p&gt;$$
f_1(t-\alpha) * f_2(t-\beta) = g(t - \alpha - \beta)
$$&lt;/p&gt;
&lt;h4&gt;坐标缩放&lt;/h4&gt;
&lt;p&gt;$$
f_1(a t) * f_2(a t) = \frac{1}{|a|} g(a t)
$$&lt;/p&gt;
&lt;h3&gt;傅里叶变换求微分方程&lt;/h3&gt;
&lt;p&gt;利用傅里叶变换的微分性质，可以将微分方程转化为代数方程，从而简化求解过程&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
\text{设} \quad &amp;amp; f^{(n)}(t) + a_{n-1} f^{(n-1)}(t) + \cdots + a_1 f&apos;(t) + a_0 f(t) = g(t) \[1.5em]
\text{则} \quad &amp;amp; (i\omega)^n F(\omega) + a_{n-1} (i\omega)^{n-1} F(\omega) + \cdots + a_1 (i\omega) F(\omega) + a_0 F(\omega) = G(\omega) \[1.5em]
\text{解得} \quad &amp;amp; F(\omega) = \frac{G(\omega)}{(i\omega)^n + a_{n-1} (i\omega)^{n-1} + \cdots + a_1 (i\omega) + a_0} \[1.5em]
\text{最后逆变换} \quad &amp;amp; f(t) = \mathscr{F}^{-1}[F(\omega)]
\end{aligned}
$$&lt;/p&gt;
&lt;h2&gt;可能会用到的&lt;/h2&gt;
&lt;h3&gt;常见傅里叶变换对&lt;/h3&gt;
&lt;h4&gt;三角函数&lt;/h4&gt;
&lt;p&gt;$$
\begin{aligned}
\mathscr{F}[\cos{(\omega_0 t)}] &amp;amp;= \pi \left[ \delta(\omega - \omega_0) + \delta(\omega + \omega_0) \right] \[2em]
\mathscr{F}[\sin{(\omega_0 t)}] &amp;amp;= i \pi \left[ \delta(\omega + \omega_0) - \delta(\omega - \omega_0) \right]
\end{aligned}
$$&lt;/p&gt;
&lt;h4&gt;指数衰减函数&lt;/h4&gt;
&lt;p&gt;单边的&lt;/p&gt;
&lt;p&gt;$$
f(t) = \begin{cases}
e^{-a t}, \quad t \geq 0 \
0, \quad t &amp;lt; 0
\end{cases} \qquad (a &amp;gt; 0) \[2.5em]
F(\omega) = \frac{1}{a + i \omega}
$$&lt;/p&gt;
&lt;p&gt;双边的&lt;/p&gt;
&lt;p&gt;$$
f(t) = e^{-a |t|} \qquad (a &amp;gt; 0) \[2.5em]
F(\omega) = \frac{2a}{a^2 + \omega^2}
$$&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;指数衰减函数和三角函数的变换计算其实很简单，不用硬背&lt;/p&gt;
&lt;p&gt;之后这几个就是纯折磨，现算都是神人了&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;符号函数&lt;/h4&gt;
&lt;p&gt;$$
\text{sgn}(t) = \begin{cases}
1, \quad t &amp;gt; 0 \
-1, \quad t &amp;lt; 0
\end{cases} \[2.5em]
F(\omega) = \frac{2}{i \omega}
$$&lt;/p&gt;
&lt;h4&gt;单位阶跃函数&lt;/h4&gt;
&lt;p&gt;基于符号函数&lt;/p&gt;
&lt;p&gt;$$
u(t) = \begin{cases}
1, \quad t \geq 0 \
0, \quad t &amp;lt; 0
\end{cases} \[2.5em]
F(\omega) = \pi \delta(\omega) + \frac{1}{i \omega}
$$&lt;/p&gt;
&lt;h4&gt;钟形脉冲函数&lt;/h4&gt;
&lt;p&gt;设钟形脉冲函数为：&lt;/p&gt;
&lt;p&gt;$$
f(t) = Ee^{-\beta t^2} \quad (E &amp;gt; 0, \beta &amp;gt; 0)
$$&lt;/p&gt;
&lt;p&gt;则其傅里叶变换为：&lt;/p&gt;
&lt;p&gt;$$
F(\omega) = E \exp{\left(-\frac{\omega^2}{4\beta}\right)} \sqrt{\frac{\pi}{\beta}}
$$&lt;/p&gt;
&lt;h4&gt;矩形单脉冲函数&lt;/h4&gt;
&lt;p&gt;$$
f(t) = \begin{cases}
E, \quad |t| \leq \frac{\tau}{2} \
0, \quad |t| &amp;gt; \frac{\tau}{2}
\end{cases} \qquad (E &amp;gt; 0, \tau &amp;gt; 0) \[2.5em]
F(\omega) = \frac{2E}{\omega} \sin{\left(\frac{\omega \tau}{2}\right)}
$$&lt;/p&gt;
&lt;h3&gt;狄利克雷积分&lt;/h3&gt;
&lt;p&gt;$$
\int_{0}^{\infty} \frac{\sin{x}}{x} dx = \frac{\pi}{2}
$$&lt;/p&gt;
</content:encoded></item><item><title>[工科复变函数] 留数在实变函数积分中的应用</title><link>https://alkaid114.github.io/posts/complex_func/residue_general/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/complex_func/residue_general/</guid><pubDate>Fri, 24 Oct 2025 19:21:00 GMT</pubDate><content:encoded>&lt;p&gt;应用留数可以计算某些难以直接计算的实积分&lt;/p&gt;
&lt;p&gt;通常有以下几种形式：&lt;/p&gt;
&lt;h2&gt;第一种&lt;/h2&gt;
&lt;p&gt;$$
\int_{0}^{2\pi} R(\cos{\theta}, \sin{\theta}) d\theta
$$&lt;/p&gt;
&lt;p&gt;利用欧拉公式将$\cos{\theta}$和$\sin{\theta}$表示为复指数的形式：s&lt;/p&gt;
&lt;p&gt;设$z = e^{i\theta}$，则&lt;/p&gt;
&lt;p&gt;$$
\cos{n\theta} = \frac{z^n + \frac{1}{z^n}}{2}, \quad \sin{n\theta} = \frac{z^n - \frac{1}{z^n}}{2i}
$$&lt;/p&gt;
&lt;p&gt;代入得到&lt;/p&gt;
&lt;p&gt;$$
R(\cos{\theta}, \sin{\theta}) = R\left(\frac{z + \frac{1}{z}}{2}, \frac{z - \frac{1}{z}}{2i}\right) = f(z)
$$&lt;/p&gt;
&lt;p&gt;从而将积分变量从$\theta$变为$z$，并利用留数定理计算积分&lt;/p&gt;
&lt;p&gt;$$
\boxed{\int_{0}^{2\pi} R(\cos{\theta}, \sin{\theta}) d\theta = 2\pi i \sum_{k}^{p} \text{Res}(f(z),z_k)}
$$&lt;/p&gt;
&lt;p&gt;$z_k$是$f(z)$在&lt;strong&gt;单位圆&lt;/strong&gt;内的所有孤立奇点&lt;/p&gt;
&lt;p&gt;有时会遇到积分区域不是$0$到$2\pi$，而是$0到\pi$、$-\pi$到$\pi$等情况，这些都可以利用周期性或奇偶性进行转换&lt;/p&gt;
&lt;h2&gt;第二种&lt;/h2&gt;
&lt;p&gt;$$
\int_{-\infty}^{+\infty} f(x) dx
$$&lt;/p&gt;
&lt;p&gt;$$
\int_{-\infty}^{+\infty} f(x) dx = 2\pi i \sum_{k}^{p} \text{Res}(f(z),z_k)
$$&lt;/p&gt;
&lt;p&gt;$z_k$是$f(z)$在&lt;strong&gt;上半平面&lt;/strong&gt;内的所有孤立奇点&lt;/p&gt;
&lt;h2&gt;第三种&lt;/h2&gt;
&lt;p&gt;$f(x)$的分母至少比分子高出一阶&lt;/p&gt;
&lt;p&gt;$$
\int_{-\infty}^{+\infty} f(x) e^{i\lambda x} dx
$$&lt;/p&gt;
&lt;p&gt;$$
\int_{-\infty}^{+\infty} f(x) e^{i\lambda x} dx = 2\pi i \sum_{k}^{p} \text{Res}(f(z)e^{i\lambda z},z_k) + \pi i \sum_{k}^{q} \text{Res}(f(x)e^{i\lambda x},x_k)
$$&lt;/p&gt;
&lt;p&gt;$z_k$是$f(z)$在&lt;strong&gt;上半平面&lt;/strong&gt;内的所有孤立奇点，$x_k$是实轴上的一阶极点，且$\lambda &amp;gt; 0$&lt;/p&gt;
&lt;p&gt;有时候可能遇到比较隐蔽的形式，比如&lt;/p&gt;
&lt;p&gt;$$
\int_{-\infty}^{+\infty} \frac{\cos{\lambda x}}{g(x)} dx
$$&lt;/p&gt;
&lt;p&gt;可以将原式补齐$i\sin{\lambda x}$再利用$\mathbf{Re}化成欧拉公式的形式$：&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
\int_{-\infty}^{+\infty} \frac{\cos{\lambda x}}{g(x)} dx &amp;amp;= \int_{-\infty}^{+\infty} \frac{ \mathbf{Re} \left ( \cos{\lambda x} + i\sin{\lambda x} \right )}{g(x)} dx \[1.5em]
&amp;amp;= \mathbf{Re} \left ( \int_{-\infty}^{+\infty} \frac{e^{i\lambda x}}{g(x)} dx \right )
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;然后利用第三种形式计算积分即可&lt;/p&gt;
</content:encoded></item><item><title>[工科概率论] 各种离散型分布</title><link>https://alkaid114.github.io/posts/probability_theory/discrete_distribution/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/probability_theory/discrete_distribution/</guid><pubDate>Tue, 14 Oct 2025 11:10:00 GMT</pubDate><content:encoded>&lt;h2&gt;0-1分布（伯努利分布、两点分布）&lt;/h2&gt;
&lt;p&gt;&amp;lt;div style=&quot;width: 20%; margin: auto;&quot;&amp;gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;X&lt;/th&gt;
&lt;th&gt;0&lt;/th&gt;
&lt;th&gt;1&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;P&lt;/td&gt;
&lt;td&gt;1-p&lt;/td&gt;
&lt;td&gt;p&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;$$
X\sim B(1,p)
$$&lt;/p&gt;
&lt;h2&gt;二项分布&lt;/h2&gt;
&lt;p&gt;$$
P(X=k)=C_n^k p^k(1-p)^{n-k}
$$&lt;/p&gt;
&lt;p&gt;$$
X\sim B(n,p)
$$&lt;/p&gt;
&lt;h2&gt;泊松分布&lt;/h2&gt;
&lt;p&gt;$$
P(X=k)=\frac{\lambda^k}{k!}e^{-\lambda}
$$&lt;/p&gt;
&lt;p&gt;$$
X\sim P(\lambda)
$$&lt;/p&gt;
&lt;h2&gt;几何分布&lt;/h2&gt;
&lt;p&gt;二项分布重复试验直到第一次成功&lt;/p&gt;
&lt;p&gt;$$
P(X=k)=(1-p)^{k-1}p
$$&lt;/p&gt;
&lt;p&gt;$$
X \sim G(p)
$$&lt;/p&gt;
&lt;h2&gt;超几何分布&lt;/h2&gt;
&lt;p&gt;不放回抽样&lt;/p&gt;
&lt;p&gt;$$
P(X=k)=\frac{C_M^k C_{N-M}^{n-k}}{C_N^n}
$$&lt;/p&gt;
&lt;p&gt;$$
X \sim H(n,M,N)
$$&lt;/p&gt;
</content:encoded></item><item><title>[工科概率论] 二项分布的泊松逼近</title><link>https://alkaid114.github.io/posts/probability_theory/binary_poisson/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/probability_theory/binary_poisson/</guid><pubDate>Tue, 14 Oct 2025 10:43:00 GMT</pubDate><content:encoded>&lt;h2&gt;二项分布&lt;/h2&gt;
&lt;p&gt;:::tip&lt;/p&gt;
&lt;p&gt;$\binom{n}{k} = C_{n}^{k}$&lt;/p&gt;
&lt;p&gt;:::&lt;/p&gt;
&lt;p&gt;$$
P(X=k) = C_{n}^{k} p^k (1-p)^{n-k} \quad k=0,1,2,\cdots,n
$$&lt;/p&gt;
&lt;p&gt;可见当 $n$ 很大时，计算 $P(X=k)$ 会相当困难，所以要使用泊松分布来近似&lt;/p&gt;
&lt;h2&gt;泊松分布&lt;/h2&gt;
&lt;p&gt;$$
P_n(k) = C_{n}^{k}p^k (1-p)^{n-k} \approx \frac{\lambda^k}{k!} e^{-\lambda}
$$&lt;/p&gt;
&lt;p&gt;其中 $\lambda = np$，$k=0,1,2,\cdots,n$&lt;/p&gt;
&lt;p&gt;实际计算时，当$n \ge 10$ 且 $p \le 0.1$ 时，就可使用&lt;/p&gt;
&lt;h2&gt;查表&lt;/h2&gt;
&lt;p&gt;很多情况下会用到泊松分布的概率和$\sum\limits_{i=0}^{k} \frac{e^{-\lambda} \lambda^k}{k!}$&lt;/p&gt;
&lt;p&gt;一般是不会让自己算的，可能试卷上会给出表格？&lt;/p&gt;
</content:encoded></item><item><title>[工科概率论] 条件概率与独立性</title><link>https://alkaid114.github.io/posts/probability_theory/conditional_independent/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/probability_theory/conditional_independent/</guid><pubDate>Tue, 14 Oct 2025 10:22:00 GMT</pubDate><content:encoded>&lt;h2&gt;条件概率&lt;/h2&gt;
&lt;p&gt;设事件$A$和$B$是样本空间$S$中的两个事件，且$P(B)&amp;gt;0$，则在事件$B$发生的条件下，事件$A$发生的概率称为&lt;strong&gt;条件概率&lt;/strong&gt;，记为$P(A|B)$&lt;/p&gt;
&lt;h2&gt;常用公式&lt;/h2&gt;
&lt;p&gt;$$
P(A|B) = \frac{P(A B)}{P(B)} \quad P(B) &amp;gt; 0
$$&lt;/p&gt;
&lt;h3&gt;乘法定理&lt;/h3&gt;
&lt;p&gt;$$
P(A B) = P(B) P(A|B)  = P(A) P(B|A)
$$&lt;/p&gt;
&lt;p&gt;推广到$n$个事件&lt;/p&gt;
&lt;p&gt;$$
P(A_1 A_2 \cdots A_n) = P(A_1) P(A_2|A_1) P(A_3|A_1 A_2) \cdots P(A_n|A_1 A_2 \cdots A_{n-1})
$$&lt;/p&gt;
&lt;h3&gt;全概率公式&lt;/h3&gt;
&lt;p&gt;设$A_1,A_2,\cdots,A_n$是互不相容的事件，若对任一事件$B$，都有$B \subset A_1 + A_2 + \cdots + A_n$，则&lt;/p&gt;
&lt;p&gt;$$
P(B) = \sum_{i=1}^{n} P(A_i) P(B|A_i)
$$&lt;/p&gt;
&lt;h3&gt;贝叶斯公式&lt;/h3&gt;
&lt;p&gt;其实就是上述三个公式的结合，所以也不用特意背下来套公式，
我认为更好的方法是灵活组合上面的三个&lt;/p&gt;
&lt;p&gt;设$A_1,A_2,\cdots,A_n$是互不相容的事件，若对任一事件$B$，都有$B \subset A_1 + A_2 + \cdots + A_n$，且$P(B)&amp;gt;0$，则&lt;/p&gt;
&lt;p&gt;$$
P(A_i|B) = \frac{P(A_i) P(B|A_i)}{\sum\limits_{j=1}^{n} P(A_j) P(B|A_j)}
$$&lt;/p&gt;
&lt;h2&gt;独立性&lt;/h2&gt;
&lt;h3&gt;独立的定义&lt;/h3&gt;
&lt;p&gt;两事件$A$和$B$为任意事件，若&lt;/p&gt;
&lt;p&gt;$$
P(A B) = P(A) P(B)
$$&lt;/p&gt;
&lt;p&gt;则称事件$A$和$B$是&lt;strong&gt;相互独立&lt;/strong&gt;的&lt;/p&gt;
&lt;h3&gt;独立的性质&lt;/h3&gt;
&lt;p&gt;$A$和$B$独立&lt;/p&gt;
&lt;p&gt;条件不影响概率&lt;/p&gt;
&lt;p&gt;$$
P(B|A) = P(B|\bar{A}) = P(B)
$$&lt;/p&gt;
&lt;h3&gt;多个事件的独立性&lt;/h3&gt;
&lt;p&gt;事件$A,B,C$，如果有&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
P(A B) = P(A) P(B) \
P(A C) = P(A) P(C) \
P(B C) = P(B) P(C)
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;则称事件$A,B,C$是&lt;strong&gt;两两独立&lt;/strong&gt;的&lt;/p&gt;
&lt;p&gt;若再同时满足&lt;/p&gt;
&lt;p&gt;$$
P(A B C) = P(A) P(B) P(C)
$$&lt;/p&gt;
&lt;p&gt;则称事件$A,B,C$是&lt;strong&gt;相互独立&lt;/strong&gt;的&lt;/p&gt;
</content:encoded></item><item><title>[工科复变函数] 留数</title><link>https://alkaid114.github.io/posts/complex_func/residue/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/complex_func/residue/</guid><pubDate>Mon, 13 Oct 2025 22:33:00 GMT</pubDate><content:encoded>&lt;p&gt;:::warning&lt;/p&gt;
&lt;p&gt;本文以及本博客的数学内容主要作为个人笔记，其中包含大量的&lt;strong&gt;个人理解&lt;/strong&gt;，存在不严谨甚至错误的内容，请谨慎阅读&lt;/p&gt;
&lt;p&gt;:::&lt;/p&gt;
&lt;h2&gt;目前为止留数有什么用&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;相较于柯西积分公式，使用留数计算复积分更简洁方便&lt;/li&gt;
&lt;li&gt;计算某些难以直接计算的实积分&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;留数怎么求&lt;/h2&gt;
&lt;h3&gt;定义法&lt;/h3&gt;
&lt;h4&gt;有限点的奇点&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;设函数$f(z)$在点$z_0$处有一个&lt;strong&gt;孤立奇点&lt;/strong&gt;，则$f(z)$在该点的&lt;strong&gt;留数&lt;/strong&gt;定义为：&lt;/p&gt;
&lt;p&gt;$$
\text{Res}(f(z),z_0) = a_{-1}
$$&lt;/p&gt;
&lt;p&gt;其中$a_{-1}$是$f(z)$在点$z_0$处的&lt;strong&gt;洛朗级数&lt;/strong&gt;展开式中&lt;strong&gt;第一个负幂项&lt;/strong&gt;的系数&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;也就是，将$f(z)$在包围点$z_0$的环域展开成洛朗级数：取 &lt;strong&gt;-1次项&lt;/strong&gt; 的系数即为在$z_0$处的留数&lt;/p&gt;
&lt;h4&gt;无穷奇点&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;设函数$f(z)$在无穷远点处有一个&lt;strong&gt;孤立奇点&lt;/strong&gt;，则$f(z)$在该点的&lt;strong&gt;留数&lt;/strong&gt;定义为：
$$
\text{Res}(f(z),\infty) = -a_{-1}
$$
其中$a_{-1}$是在环域的&lt;strong&gt;洛朗级数&lt;/strong&gt;展开式中&lt;strong&gt;第一个负幂项&lt;/strong&gt;的系数&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;:::warning&lt;/p&gt;
&lt;p&gt;通过上面的内容可知，$z_0$是$f(z)$的可去奇点时，若$z_0 \neq \infty$，则$\text{Res}(f(z),z_0) = 0$，但$z_0 = \infty$时却不一定成立&lt;/p&gt;
&lt;p&gt;:::&lt;/p&gt;
&lt;h3&gt;定理与推论法&lt;/h3&gt;
&lt;h4&gt;定理5.2.1 用于任意阶极点&lt;/h4&gt;
&lt;p&gt;若$z_0$是$f(z)$的$m$阶极点，则&lt;/p&gt;
&lt;p&gt;$$
\text{Res}(f(z),z_0) =\frac{1}{(m-1)!} \lim\limits_{z\to z_0}  \frac{d^{m-1}}{dz^{m-1}} [(z-z_0)^m f(z)]
$$&lt;/p&gt;
&lt;p&gt;因为一阶比较常见，所以这里给出特例：&lt;/p&gt;
&lt;p&gt;$$
\text{Res}(f(z),z_0) = \lim\limits_{z\to z_0}  (z-z_0)f(z)
$$&lt;/p&gt;
&lt;h4&gt;推论 5.2.2 仅适用于一阶极点 （同时也可用于得到一阶极点）&lt;/h4&gt;
&lt;p&gt;若$z_0$是$f(z)$的一阶极点，且$f(z)$可表示为$f(z) = \frac{P(z)}{Q(z)}$，$P(z)$和$Q(z)$在点$z_0$处解析，且$P(z_0) \neq 0$，$Q(z_0) = 0$，$Q&apos;(z_0) \neq 0$，则$z_0$是$f(z)$的一阶极点，且&lt;/p&gt;
&lt;p&gt;$$
\text{Res}(f(z),z_0) = \frac{P(z_0)}{Q&apos;(z_0)}
$$&lt;/p&gt;
&lt;p&gt;:::tip&lt;/p&gt;
&lt;p&gt;请灵活拆分$P(z)$和$Q(z)$，尽量简化$Q(z)$的求导&lt;/p&gt;
&lt;p&gt;:::&lt;/p&gt;
&lt;h2&gt;留数基本定理&lt;/h2&gt;
&lt;h3&gt;无穷远点处的留数&lt;/h3&gt;
&lt;p&gt;$$
\sum_{k=1}^{n} \text{Res}(f(z),z_k) + \text{Res}(f(z),\infty) = 0
$$&lt;/p&gt;
&lt;p&gt;$$
\text{Res}(f(z),\infty) = -\text{Res}(\frac{1}{z^2}f(\frac{1}{z}),0)
$$&lt;/p&gt;
&lt;p&gt;有的时候，某个有限点处的留数并不好算(没法用现成的级数展开等)，但无穷远点处的留数好算，这时就可以用上面的公式通过相减来得到那一个难算的留数&lt;/p&gt;
</content:encoded></item><item><title>[工科复变函数] 奇点、极点与零点</title><link>https://alkaid114.github.io/posts/complex_func/singularity_pole_zero/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/complex_func/singularity_pole_zero/</guid><pubDate>Mon, 13 Oct 2025 21:15:00 GMT</pubDate><content:encoded>&lt;p&gt;:::warning&lt;/p&gt;
&lt;p&gt;本文以及本博客的数学内容主要作为个人笔记，其中包含大量的&lt;strong&gt;个人理解&lt;/strong&gt;，存在不严谨甚至错误的内容，请谨慎阅读&lt;/p&gt;
&lt;p&gt;:::&lt;/p&gt;
&lt;h2&gt;孤立奇点&lt;/h2&gt;
&lt;p&gt;设函数$f(z)$在点$z_0$的某个&lt;strong&gt;去心邻域&lt;/strong&gt;内解析，且在点$z_0$处不解析，则称$f(z)$在点$z_0$处有一个&lt;strong&gt;孤立奇点&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;孤立奇点的分类&lt;/h2&gt;
&lt;h3&gt;可去奇点&lt;/h3&gt;
&lt;p&gt;有点像实数函数的可去间断点&lt;/p&gt;
&lt;p&gt;将$f(z)$在点$z_0$处的&lt;strong&gt;洛朗级数&lt;/strong&gt;展开式中&lt;strong&gt;所有负幂项&lt;/strong&gt;的系数均为0，则称孤立奇点$z_0$是&lt;strong&gt;可去奇点&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;充要条件：$z_0$是&lt;strong&gt;可去奇点&lt;/strong&gt; $\Leftrightarrow \lim\limits_{z\to z_0} f(z)$ 存在且有限&lt;/p&gt;
&lt;h3&gt;m阶极点&lt;/h3&gt;
&lt;p&gt;有点像实数函数的极限无穷大点&lt;/p&gt;
&lt;p&gt;将$f(z)$在点$z_0$处的&lt;strong&gt;洛朗级数&lt;/strong&gt;展开式中&lt;strong&gt;有限个负幂项&lt;/strong&gt;的系数不为0，且最高负幂项为$m$次，则称孤立奇点$z_0$是$f(z)$的&lt;strong&gt;m阶极点&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
f(z) =\frac{a_{-m}}{(z-z_0)^m} + \frac{a_{-m+1}}{(z-z_0)^{m-1}} + \cdots + \frac{a_{-1}}{z-z_0} + a_0 + a_1(z-z_0) + \cdots
$$&lt;/p&gt;
&lt;p&gt;可见此展开式中$m$是最后一个负幂项的次数，因此孤立奇点$z_0$是$f(z)$的&lt;strong&gt;m阶极点&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;充要条件：$z_0$是&lt;strong&gt;极点&lt;/strong&gt; $\Leftrightarrow$ $\lim\limits_{z\to z_0} f(z) = \infty$&lt;/p&gt;
&lt;h3&gt;本性奇点&lt;/h3&gt;
&lt;p&gt;有点像实数函数的震荡间断点&lt;/p&gt;
&lt;p&gt;将$f(z)$在点$z_0$处的&lt;strong&gt;洛朗级数&lt;/strong&gt;展开式中&lt;strong&gt;无限个负幂项&lt;/strong&gt;的系数不为0，则称孤立奇点$z_0$是$f(z)$的&lt;strong&gt;本性奇点&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;充要条件：$z_0$是&lt;strong&gt;本性奇点&lt;/strong&gt; $\Leftrightarrow$ 不存在有限或无穷的极限 $\lim\limits_{z\to z_0} f(z)$&lt;/p&gt;
&lt;h2&gt;如何判断极点的阶数&lt;/h2&gt;
&lt;h3&gt;若难以直接看出，使用零点&lt;/h3&gt;
&lt;p&gt;函数$\frac{g(z)}{f(z)}$，对$f(z)$求$n$阶导数，若在$m$阶导处首次满足$f^{(m)}(z_0) \neq 0$，那$z_0$是$f(z)$的&lt;strong&gt;m阶零点&lt;/strong&gt;, $\left ( g(z_0) \neq 0 \right )$&lt;/p&gt;
&lt;p&gt;所以$z_0$是$\frac{g(z)}{f(z)}$&lt;strong&gt;m阶极点&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;:::note&lt;/p&gt;
&lt;p&gt;充要条件：$z_0$是$f(z)$的 &lt;strong&gt;$m$ 阶零点&lt;/strong&gt; $\Leftrightarrow$ $\frac{1}{f(z)}$在$z_0$处是 &lt;strong&gt;$m$阶极点&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;:::&lt;/p&gt;
&lt;h2&gt;无穷孤立奇点&lt;/h2&gt;
&lt;p&gt;刚刚介绍的孤立奇点的位置全是一个有限的复数点，而无穷孤立奇点则是指在无穷远处的奇点&lt;/p&gt;
&lt;p&gt;还记得黎曼球面吗？可以发现若用黎曼球面来看复平面的话，复平面的无穷远点就是黎曼球面的北极点，也就是这是&lt;strong&gt;一个&lt;/strong&gt;点&lt;/p&gt;
&lt;p&gt;设函数$f(z)$在某个去心邻域${z:|z| &amp;gt; R}$内解析，则称$z=\infty$是$f(z)$的&lt;strong&gt;无穷孤立奇点&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;为了研究无穷孤立奇点，可以将变量变换为$w=\frac{1}{z}$，则当$z \to \infty$时，$w \to 0$，于是可以研究$f(\frac{1}{w})$在$w=0$处的奇点性质&lt;/p&gt;
&lt;h3&gt;无穷奇点的分类&lt;/h3&gt;
&lt;p&gt;既然用了倒数将无穷奇点转化为了有限点的奇点，那么无穷奇点的分类就也是&quot;倒过来了&quot;&lt;/p&gt;
&lt;p&gt;其实将上方&lt;a href=&quot;#%E5%AD%A4%E7%AB%8B%E5%A5%87%E7%82%B9%E7%9A%84%E5%88%86%E7%B1%BB&quot;&gt;孤立奇点的分类&lt;/a&gt;中的&quot;负幂项&quot;改为&quot;正幂项&quot;即可&lt;/p&gt;
</content:encoded></item><item><title>[NixOS] 使用CachyOS内核启用asusctl的功耗控制</title><link>https://alkaid114.github.io/posts/nixos_cachyos_kernel_asusctl/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/nixos_cachyos_kernel_asusctl/</guid><pubDate>Wed, 08 Oct 2025 18:12:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;[!NOTE]
2026-07-03更新： 很久之前Linux 6.19已经集成了asusctl的补丁，现在都支持asusctl，直接用就行了&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;code&gt;asusctl&lt;/code&gt;的功耗控制功能是依赖特殊的内核功能的，默认的内核并不支持，经过一番搜索，在NixOS Discourse上找到了对Arch Linux上&lt;code&gt;linux-g14&lt;/code&gt;内核的&lt;a href=&quot;https://discourse.nixos.org/t/integrating-the-linux-g14-kernel-into-nixos-kernels-broader-asus-laptop-support/63350&quot;&gt;打包配置&lt;/a&gt;，但是需要自行编译，在笔记本上编译内核压力实在有点大了&lt;/p&gt;
&lt;p&gt;但其实CachyOS的内核已经集成了这些补丁，直接用CachyOS内核就可以了，Chaotic项目还提供了CachyOS内核的二进制缓存&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.nyx.chaotic.cx/&quot;&gt;https://www.nyx.chaotic.cx/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;按照文档中的示例填入配置即可&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# flake.nix
{
  description = &quot;My configuration&quot;;

  inputs = {
    nixpkgs.url = &quot;github:NixOS/nixpkgs/nixos-unstable&quot;;
    chaotic.url = &quot;github:chaotic-cx/nyx/nyxpkgs-unstable&quot;; # IMPORTANT
  };

  outputs = { nixpkgs, chaotic, ... }: {
    nixosConfigurations = {
      hostname = nixpkgs.lib.nixosSystem { # Replace &quot;hostname&quot; with your system&apos;s hostname
        system = &quot;x86_64-linux&quot;;
        modules = [
          ./configuration.nix
          chaotic.nixosModules.default # IMPORTANT
        ];
      };
    };
  };
}
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;{
    boot.kernelPackages = pkgs.linuxPackages_cachyos;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;注意如果要在安装NixOS时就启用chaotic的二进制缓存，需要添加参数&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;--option &apos;extra-substituters&apos; &apos;https://chaotic-nyx.cachix.org/&apos; --option extra-trusted-public-keys &quot;chaotic-nyx.cachix.org-1:HfnXSw4pj95iI/n17rIDy40agHj12WfF+Gqk6SonIT8=&quot;
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>[工科复变函数] 洛朗级数</title><link>https://alkaid114.github.io/posts/complex_func/laurent_series/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/complex_func/laurent_series/</guid><pubDate>Sat, 27 Sep 2025 17:02:00 GMT</pubDate><content:encoded>&lt;p&gt;:::warning&lt;/p&gt;
&lt;p&gt;本文以及本博客的数学内容主要作为个人笔记，其中包含大量的&lt;strong&gt;个人理解&lt;/strong&gt;，存在不严谨甚至错误的内容，请谨慎阅读&lt;/p&gt;
&lt;p&gt;:::&lt;/p&gt;
&lt;h2&gt;洛朗级数&lt;/h2&gt;
&lt;p&gt;洛朗级数是泰勒级数的推广&lt;/p&gt;
&lt;p&gt;泰勒级数只适用于解析函数，而洛朗级数适用于在某个环域内解析的函数&lt;/p&gt;
&lt;p&gt;它可以绕开奇点，表示在奇点附近的函数行为&lt;/p&gt;
&lt;p&gt;但实际上计算洛朗级数时仍然使用泰勒级数的结论 &lt;a href=&quot;https://alkaid.github.io/posts/complex_func/taylor_series/&quot;&gt;常用泰勒级数&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;$$
f(z) = \sum_{n=-\infty}^{\infty} a_n (z - z_0)^n
$$&lt;/p&gt;
&lt;h3&gt;系数定义&lt;/h3&gt;
&lt;p&gt;$$
a_n = \frac{1}{2\pi i} \oint_C \frac{f(z)}{(z - z_0)^{n+1}} dz
$$&lt;/p&gt;
&lt;h3&gt;收敛半径&lt;/h3&gt;
&lt;p&gt;洛朗级数的收敛域是一个圆环，所以半径有两个&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;内半径$R_1$：从奇点到内侧边界的距离，用负幂项求得&lt;/li&gt;
&lt;li&gt;外半径$R_2$：从奇点到外侧边界的距离，用正幂项求得&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;求一个函数的洛朗级数&lt;/h3&gt;
&lt;p&gt;e.g. 求$f(z) = \frac{1}{(z-i)(z-2)}$在$1 &amp;lt; |z| &amp;lt; 2$的洛朗级数&lt;/p&gt;
&lt;h4&gt;第一步 裂项&lt;/h4&gt;
&lt;p&gt;&lt;a href=&quot;#%E8%A3%82%E9%A1%B9%E6%8A%80%E5%B7%A7%E8%A6%86%E7%9B%96%E6%B3%95&quot;&gt;裂项技巧&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
\frac{1}{(z-i)(z-2)} &amp;amp;= \frac{A}{z-i} + \frac{B}{z-2} \
A &amp;amp;= \frac{1}{i-2} \
B &amp;amp;= \frac{1}{2-i} \
\frac{1}{(z-i)(z-2)} &amp;amp;= \frac{1}{i-2} \cdot \frac{1}{z-i} + \frac{1}{2-i} \cdot \frac{1}{z-2}
\end{aligned}
$$&lt;/p&gt;
&lt;h4&gt;第二步 确定每一项的奇点在圆环内侧还是外侧&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;$\frac{1}{z-i}$的奇点$z=i$在圆环内侧，所以$\frac{1}{z-i}$应展开为负幂项&lt;/li&gt;
&lt;li&gt;$\frac{1}{z-2}$的奇点$z=2$在圆环外侧，所以$\frac{1}{z-2}$应展开为正幂项&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;第三步 展开每一项&lt;/h4&gt;
&lt;p&gt;之所以需要变为$\frac{1}{z}$，是为了将展开后的收敛域&quot;翻转&quot;至边界的外侧&lt;/p&gt;
&lt;p&gt;&amp;lt;!-- &amp;gt;&amp;gt; 我觉得就是靠倒数把$&amp;lt;$某某的收敛域翻过来变成$&amp;gt;$某某，这样就能让z在收敛域内。作为面向初学者的教材还是先给个哪怕不严谨的直观理解会更好吧？--&amp;gt;&lt;/p&gt;
&lt;p&gt;正幂项内侧收敛，负幂项外侧收敛，两侧限制就形成了环形收敛域&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
f(z) &amp;amp;= \frac{1}{(z-i)(z-2)} = \frac{1}{i-2} \cdot \frac{1}{z-i} + \frac{1}{2-i} \cdot \frac{1}{z-2} \
&amp;amp;= \frac{1}{i-2} \cdot \frac{1}{z} \cdot \frac{1}{1 - \frac{i}{z}} + \frac{1}{2-i} \cdot \left(-\frac{1}{2-z}\right) \
&amp;amp;= \frac{1}{i-2} \cdot \frac{1}{z} \sum_{n=0}^{\infty} \left(\frac{i}{z}\right)^n + \frac{1}{2-i} \sum_{n=0}^{\infty} \left(\frac{z}{2}\right)^n \quad (|z| &amp;gt; 1, |z| &amp;lt; 2) \quad \text{利用几何级数} \
&amp;amp;= \sum_{n=0}^{\infty} \frac{i^n}{(i-2)} \cdot \frac{1}{z^{n+1}} + \sum_{n=0}^{\infty} \frac{z^n}{(2-i) 2^n} \
&amp;amp;= \sum_{n=1}^{\infty} \frac{i^{n-1}}{(i-2)} \cdot \frac{1}{z^n} + \sum_{n=0}^{\infty} \frac{z^n}{(2-i) 2^n}
\end{aligned}
$$&lt;/p&gt;
&lt;h3&gt;裂项技巧：覆盖法&lt;/h3&gt;
&lt;p&gt;$$
\frac{P(x)}{(x-a_1)(x-a_2)\dots(x-a_n)} = \frac{A_1}{x-a_1} + \frac{A_2}{x-a_2} + \dots + \frac{A_n}{x-a_n}
$$&lt;/p&gt;
&lt;p&gt;若要求$A_k$，则将等式两边同乘以$(x-a_k)$&lt;/p&gt;
&lt;p&gt;令$x=a_k$，此时除了$A_k$外，其他项均得0&lt;/p&gt;
&lt;p&gt;所以&lt;/p&gt;
&lt;p&gt;$$
A_k = \frac{P(a_k)}{(a_k - a_1)(a_k - a_2) \dots (a_k - a_{k-1})(a_k - a_{k+1}) \dots (a_k - a_n)}
$$&lt;/p&gt;
&lt;p&gt;由此可得每个系数$A_k$的值&lt;/p&gt;
</content:encoded></item><item><title>[工科复变函数] 泰勒级数</title><link>https://alkaid114.github.io/posts/complex_func/taylor_series/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/complex_func/taylor_series/</guid><pubDate>Sat, 27 Sep 2025 16:37:00 GMT</pubDate><content:encoded>&lt;p&gt;这篇的常见级数主要在洛朗级数中使用，复变的考试不会再考泰勒级数了&lt;/p&gt;
&lt;h2&gt;泰勒级数&lt;/h2&gt;
&lt;p&gt;$$
f(z) = \sum_{n=0}^{\infty} \frac{f^{(n)}(z_0)}{n!} (z - z_0)^n
$$&lt;/p&gt;
&lt;p&gt;系数$a_n$定义（证明题可能会考）&lt;/p&gt;
&lt;p&gt;$$
a_n = \frac{1}{2\pi i} \oint_C \frac{f(z)}{(z - z_0)^{n+1}} , dz = \frac{f^{(n)}(z_0)}{n!}
$$&lt;/p&gt;
&lt;p&gt;$z_0$为展开中心，$C$为包含$z_0$的闭合曲线&lt;/p&gt;
&lt;h2&gt;常用的泰勒级数&lt;/h2&gt;
&lt;p&gt;$$
\begin{aligned}
\frac{1}{1+z} = \sum_{n=0}^{\infty} (-1)^n z^n \quad |z| &amp;lt; 1 \
\frac{1}{1-z} = \sum_{n=0}^{\infty} z^n \quad |z| &amp;lt; 1
\end{aligned}
$$&lt;/p&gt;
&lt;h3&gt;自然对数&lt;/h3&gt;
&lt;p&gt;$$
\ln(1+z) = \sum_{n=1}^{\infty} (-1)^{n-1} \frac{z^n}{n} \quad |z| &amp;lt; 1
$$&lt;/p&gt;
&lt;h3&gt;自然指数函数&lt;/h3&gt;
&lt;p&gt;$$
e^z = \sum_{n=0}^{\infty} \frac{z^n}{n!} \quad |z| &amp;lt; \infty
$$&lt;/p&gt;
&lt;h3&gt;正弦函数&lt;/h3&gt;
&lt;p&gt;$$
\sin z = \sum_{n=0}^{\infty} (-1)^n \frac{z^{2n+1}}{(2n+1)!} \quad |z| &amp;lt; \infty
$$&lt;/p&gt;
&lt;h3&gt;余弦函数&lt;/h3&gt;
&lt;p&gt;$$
\cos z = \sum_{n=0}^{\infty} (-1)^n \frac{z^{2n}}{(2n)!} \quad |z| &amp;lt; \infty
$$&lt;/p&gt;
&lt;p&gt;正弦、余弦和自然指数函数的收敛域非常棒，展开洛朗级数的时候直接无脑展开&lt;/p&gt;
</content:encoded></item><item><title>[工科复变函数] 级数</title><link>https://alkaid114.github.io/posts/complex_func/series/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/complex_func/series/</guid><pubDate>Fri, 26 Sep 2025 23:38:00 GMT</pubDate><content:encoded>&lt;h2&gt;微积分级数复习&lt;/h2&gt;
&lt;h3&gt;p-级数&lt;/h3&gt;
&lt;p&gt;$$
\sum_{n=1}^{\infty} \frac{1}{n^p}
$$&lt;/p&gt;
&lt;p&gt;当 $p \leq 1$ 时，发散；当 $p &amp;gt; 1$ 时，收敛。&lt;/p&gt;
&lt;h3&gt;几何级数&lt;/h3&gt;
&lt;p&gt;$$
\sum_{n=0}^{\infty} ar^n = \frac{a}{1-r} \quad (|r| &amp;lt; 1)
$$&lt;/p&gt;
&lt;h3&gt;正项级数的判敛法&lt;/h3&gt;
&lt;p&gt;:::warning
这个判别法比较重要，需要看，其余部分大概率是不会考了
:::&lt;/p&gt;
&lt;h4&gt;比较判别法&lt;/h4&gt;
&lt;p&gt;若 $0 \leq a_n \leq b_n$，则&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;若 $\large \sum b_n$ 收敛，则 $\large \sum a_n$ 收敛&lt;/li&gt;
&lt;li&gt;若 $\large \sum a_n$ 发散，则 $\large \sum b_n$ 发散&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;比值判别法&lt;/h4&gt;
&lt;p&gt;设 $\lim\limits_{n \to \infty} \frac{a_{n+1}}{a_n} = L$，则&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;若 $L &amp;lt; 1$，则 $\large \sum a_n$ 收敛&lt;/li&gt;
&lt;li&gt;若 $L &amp;gt; 1$，则 $\large \sum a_n$ 发散&lt;/li&gt;
&lt;li&gt;若 $L = 1$，则无法判断&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;根值判别法&lt;/h4&gt;
&lt;p&gt;设 $\lim\limits_{n \to \infty} \sqrt[n]{a_n} = L$，则&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;若 $L &amp;lt; 1$，则 $\large \sum a_n$ 收敛&lt;/li&gt;
&lt;li&gt;若 $L &amp;gt; 1$，则 $\large \sum a_n$ 发散&lt;/li&gt;
&lt;li&gt;若 $L = 1$，则无法判断&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;积分判别法&lt;/h4&gt;
&lt;p&gt;设 $f(x)$ 在 $[1, +\infty)$ 上连续、正值且单调递减，且 $a_n = f(n)$，则 $\large \sum a_n$ 与 $\int_1^{\infty} f(x) , dx$ 同敛散&lt;/p&gt;
&lt;h4&gt;莱布尼兹判别法&lt;/h4&gt;
&lt;p&gt;设 ${a_n}$ 单调递减且 $\lim\limits_{n \to \infty} a_n = 0$，则交错级数 $\large \sum (-1)^{n-1} a_n$ 收敛&lt;/p&gt;
&lt;h2&gt;复数项级数&lt;/h2&gt;
&lt;p&gt;$$
\sum_{n=1}^{\infty} z_n ( z_n = a_n + ib_n)
$$&lt;/p&gt;
&lt;h3&gt;收敛的充分必要条件&lt;/h3&gt;
&lt;p&gt;$\large \sum\limits_{n=1}^{\infty} a_n$ 和 $\large \sum\limits_{n=1}^{\infty} b_n$ 同时收敛&lt;/p&gt;
&lt;h3&gt;收敛的必要条件&lt;/h3&gt;
&lt;p&gt;$\lim\limits_{n \to \infty} z_n = 0$&lt;/p&gt;
&lt;h3&gt;绝对收敛与条件收敛&lt;/h3&gt;
&lt;p&gt;若 $\large \sum\limits_{n=1}^{\infty} |z_n|$ 收敛，则 $\large \sum\limits_{n=1}^{\infty} z_n$ &lt;strong&gt;绝对收敛&lt;/strong&gt;；&lt;/p&gt;
&lt;p&gt;若 $\large \sum\limits_{n=1}^{\infty} z_n$ 收敛但不&lt;strong&gt;绝对收敛&lt;/strong&gt;，则&lt;strong&gt;条件收敛&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;绝对收敛 $\supset$ 条件收敛。&lt;/p&gt;
&lt;p&gt;在收敛域内一定绝对收敛并且一致收敛（不包含边界），条件收敛只可能出现在边界上&lt;/p&gt;
&lt;h4&gt;复数取绝对值就是取模&lt;/h4&gt;
&lt;p&gt;$$
|z| = \sqrt{a^2 + b^2}
$$&lt;/p&gt;
&lt;h3&gt;复变函数项级数&lt;/h3&gt;
&lt;p&gt;$$
\sum_{n=1}^{\infty} f_n(z)
$$&lt;/p&gt;
&lt;h4&gt;收敛域&lt;/h4&gt;
&lt;p&gt;级数 $\large \sum f_n(z)$ 收敛的点的全体称为收敛域&lt;/p&gt;
&lt;h4&gt;和函数&lt;/h4&gt;
&lt;p&gt;$$
\begin{aligned}
s_n(z) &amp;amp;= \sum_{n=1}^{\infty} f_n(z) \
s(z) &amp;amp;= \lim_{n \to \infty} s_n(z)
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;$s(z)$ 称为级数 $\large \sum f_n(z)$ 的和函数&lt;/p&gt;
&lt;h4&gt;定理 4.1.7&lt;/h4&gt;
&lt;p&gt;若级数 $\large \sum f_n(z)$ 在域 $D$ 上&lt;strong&gt;一致收敛&lt;/strong&gt;于和函数 $s(z)$，且各项 $f_n(z)$ 在域 $D$ 上连续，则其和函数 $s(z)$ 在域 $D$ 内处处连续&lt;/p&gt;
&lt;h3&gt;幂级数&lt;/h3&gt;
&lt;p&gt;$$
\sum_{n=0}^{\infty} a_n (z - z_0)^n
$$&lt;/p&gt;
&lt;h4&gt;阿贝尔定理&lt;/h4&gt;
&lt;p&gt;若幂级数在点$z_1$ 收敛，则在以$z_0$为圆心、$|z_1 - z_0|$为半径的圆盘内&lt;strong&gt;绝对收敛&lt;/strong&gt;，且在所有半径小于$|z_1 - z_0|$的闭圆盘上&lt;strong&gt;一致收敛&lt;/strong&gt;&lt;/p&gt;
&lt;h4&gt;求收敛半径&lt;/h4&gt;
&lt;h5&gt;比值法&lt;/h5&gt;
&lt;p&gt;若极限$\lim\limits_{n \to \infty} |\frac{a_{n+1}}{a_n}| = \lambda$，则收敛半径为&lt;/p&gt;
&lt;p&gt;$$
R = \left{\begin{matrix}
+\infty, &amp;amp; \lambda = 0 \
\frac{1}{\lambda}, &amp;amp; 0 &amp;lt; \lambda &amp;lt; +\infty \
0, &amp;amp; \lambda = +\infty
\end{matrix}\right.
$$&lt;/p&gt;
&lt;h5&gt;根值法&lt;/h5&gt;
&lt;p&gt;后面的就不写了，和实变函数的判别法都是一样的&lt;/p&gt;
&lt;h4&gt;柯西乘积&lt;/h4&gt;
&lt;p&gt;设级数 $\large \sum_{n=0}^{\infty} a_n z^n$ 和 $\large \sum_{n=0}^{\infty} b_n z^n$ 的和分别为 $A$ 和 $B$，则级数&lt;/p&gt;
&lt;p&gt;$$
\sum_{n=0}^{\infty} c_n z^n = \sum_{n=0}^{\infty} \left( \sum_{k=0}^{n} a_k b_{n-k} \right) z^n
$$&lt;/p&gt;
&lt;p&gt;称为柯西乘积，记作 $C = A \cdot B$&lt;/p&gt;
</content:encoded></item><item><title>[工科复变函数] 积分</title><link>https://alkaid114.github.io/posts/complex_func/int/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/complex_func/int/</guid><pubDate>Fri, 26 Sep 2025 23:20:00 GMT</pubDate><content:encoded>&lt;p&gt;:::warning&lt;/p&gt;
&lt;p&gt;本文以及本博客的数学内容主要作为个人笔记，其中包含大量的&lt;strong&gt;个人理解&lt;/strong&gt;，存在不严谨甚至错误的内容，请谨慎阅读&lt;/p&gt;
&lt;p&gt;:::&lt;/p&gt;
&lt;h2&gt;复变函数积分的本质&lt;/h2&gt;
&lt;p&gt;本质其实是第二型曲线积分&lt;/p&gt;
&lt;h2&gt;计算方法&lt;/h2&gt;
&lt;h3&gt;参数方程法&lt;/h3&gt;
&lt;p&gt;将曲线$C$表示为参数方程$x=x(t),y=y(t),t \in [a,b]$，即$z=z(t)=x(t)+iy(t)$&lt;/p&gt;
&lt;p&gt;所以&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
\int _C f(z)dz &amp;amp;= \int _C f(z(t))dz(t) \
&amp;amp;= \int _a^b f[z(t)]z^{\prime}(t)dt
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;代入计算即可&lt;/p&gt;
&lt;h2&gt;柯西积分定理（柯西-古萨基本定理）&lt;/h2&gt;
&lt;p&gt;若$f(z)$在简单光滑闭曲线$C$及其内部&lt;strong&gt;单连通&lt;/strong&gt;区域$D$内解析，则&lt;/p&gt;
&lt;p&gt;$$
\oint _C f(z)dz=0
$$&lt;/p&gt;
&lt;p&gt;（格林公式）&lt;/p&gt;
&lt;h2&gt;定理 3.2.2&lt;/h2&gt;
&lt;p&gt;单连通区域上的解析函数的积分与路径无关&lt;/p&gt;
&lt;h2&gt;复合闭路定理&lt;/h2&gt;
&lt;p&gt;若$f(z)$在多连通区域$D$内解析，$D$由$n+1$条闭曲线构成，$C_1,C_2,\cdots,C_n$为$C_0$内的$n$条互不相交的简单光滑闭曲线，且均取正向，则&lt;/p&gt;
&lt;p&gt;$$
C = C_0 + C_1^{-} + C_2^{-} + \cdots + C_n^{-}
$$&lt;/p&gt;
&lt;p&gt;但我个人更喜欢将闭曲线的积分看作围起来的面积，于是我会这么写&lt;/p&gt;
&lt;p&gt;$$
C = C_0 - C_1 - C_2 - \cdots - C_n
$$&lt;/p&gt;
&lt;p&gt;$C$是要求的不含奇点的闭曲线&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./assets/compound_closed_circuit.svg&quot; alt=&quot;闭曲线&quot; /&gt;&lt;/p&gt;
&lt;p&gt;又因为$\oint_C f(z)dz=0$，所以&lt;/p&gt;
&lt;p&gt;$$
\oint &lt;em&gt;{C_0} f(z)dz = \sum&lt;/em&gt;{k=1}^{n} \oint _{C_k} f(z)dz
$$&lt;/p&gt;
&lt;h3&gt;利用复合闭路定理计算含有奇点的积分&lt;/h3&gt;
&lt;p&gt;计算$\oint_C \frac{dz}{z^2-z}$，$C$是包含单位圆盘的简单闭曲线&lt;/p&gt;
&lt;p&gt;被积函数$f(z)=\frac{1}{z^2-z}=\frac{1}{z(z-1)}$有$z_1=0,z_2=1$两个奇点，此外处处解析&lt;/p&gt;
&lt;p&gt;在$C$内作正向闭曲线$C_1$和$C_2$，分别围住奇点$z_1,z_2$，由复合闭路定理得&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
\oint &lt;em&gt;C \frac{dz}{z^2-z} &amp;amp;= \oint &lt;em&gt;{C_1} \frac{dz}{z^2-z} + \oint &lt;em&gt;{C_2} \frac{dz}{z^2-z} \
&amp;amp;\text{目前只要明白这行即可，后续步骤需要用到柯西积分公式}\
&amp;amp;= \oint&lt;/em&gt;{C_1} \frac{dz}{z-1} - \oint&lt;/em&gt;{C_1} \frac{dz}{z} + \oint&lt;/em&gt;{C_2} \frac{dz}{z} - \oint_{C_2} \frac{dz}{z-1} \
&amp;amp;= 0 -2\pi i + 2\pi i - 0 \
&amp;amp;= 0
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;这里的$C$放在上面的&lt;a href=&quot;#%E5%A4%8D%E5%90%88%E9%97%AD%E8%B7%AF%E5%AE%9A%E7%90%86&quot;&gt;复合闭路定理&lt;/a&gt;里其实是$C_0$&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./assets/singularity_int.svg&quot; alt=&quot;奇点积分&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;柯西积分公式&lt;/h2&gt;
&lt;p&gt;函数$f(z)$在闭路$C$及其内部$D$内解析，$z_0$为$D$内任意一点，则&lt;/p&gt;
&lt;p&gt;$$
f(z_0) = \frac{1}{2\pi i} \oint _C \frac{f(z)}{z-z_0} dz
$$&lt;/p&gt;
&lt;p&gt;:::tip&lt;/p&gt;
&lt;p&gt;柯西积分公式多用于求奇点处的积分值，如例题&lt;a href=&quot;#%E5%88%A9%E7%94%A8%E5%A4%8D%E5%90%88%E9%97%AD%E8%B7%AF%E5%AE%9A%E7%90%86%E8%AE%A1%E7%AE%97%E5%90%AB%E6%9C%89%E5%A5%87%E7%82%B9%E7%9A%84%E7%A7%AF%E5%88%86&quot;&gt;利用复合闭路定理计算含有奇点的积分&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;:::&lt;/p&gt;
&lt;p&gt;:::caution&lt;/p&gt;
&lt;p&gt;注意分母自带负号，不要搞错$z_0$的正负&lt;/p&gt;
&lt;p&gt;:::&lt;/p&gt;
&lt;h2&gt;高阶导数柯西积分公式&lt;/h2&gt;
&lt;p&gt;$$
f^{(n)}(z_0) = \frac{n!}{2\pi i} \oint _C \frac{f(z)}{(z-z_0)^{n+1}} dz
$$&lt;/p&gt;
&lt;p&gt;:::tip&lt;/p&gt;
&lt;p&gt;利用这个公式可以直接计算高阶导数&lt;/p&gt;
&lt;p&gt;:::&lt;/p&gt;
&lt;p&gt;还可以得到一个结论&lt;/p&gt;
&lt;p&gt;$$
\int _C \frac{1}{(z-z_0)^n}dz=\begin{cases}
2\pi i,&amp;amp;n=1 \
0,&amp;amp;n \ne 1 \text{的整数}
\end{cases}
$$&lt;/p&gt;
&lt;h2&gt;由柯西积分公式得出的重要推论&lt;/h2&gt;
&lt;h3&gt;平均值公式&lt;/h3&gt;
&lt;p&gt;解析函数$f(z)$在圆心的值等于该圆周上函数值的平均值&lt;/p&gt;
&lt;p&gt;$z_0$为圆心，$R$为半径&lt;/p&gt;
&lt;p&gt;$z=z_0+Re^{i\theta}, dz=Rie^{i\theta}d\theta$&lt;/p&gt;
&lt;p&gt;$$
f(z_0) = \frac{1}{2\pi} \int _0^{2\pi} f(z_0 + Re^{i\theta}) d\theta
$$&lt;/p&gt;
&lt;h3&gt;柯西不等式&lt;/h3&gt;
&lt;p&gt;$M$为$|f(z)|$在闭圆$|z-z_0|=R$上的最大值&lt;/p&gt;
&lt;p&gt;$$
|f^{(n)}(z_0)| \leq \frac{n!M}{R^n}
$$&lt;/p&gt;
&lt;h3&gt;代数学基本定理&lt;/h3&gt;
&lt;p&gt;任何一个复系数多项式&lt;/p&gt;
&lt;p&gt;$$
f(z) = a_0 z^n + a_{1} z^{n-1} + \cdots + a_{n-1} z + a_n \quad (a_0 \ne 0, n \ge 1)
$$&lt;/p&gt;
&lt;p&gt;$f(z)=0$必有根&lt;/p&gt;
&lt;h3&gt;莫雷拉定理&lt;/h3&gt;
&lt;p&gt;若$f(z)$是区域$D$内的连续函数，且对于$D$内任意一条简单光滑闭曲线$C$，都有&lt;/p&gt;
&lt;p&gt;$$
\oint _C f(z) dz = 0
$$&lt;/p&gt;
&lt;p&gt;则$f(z)$在$D$内解析&lt;/p&gt;
&lt;p&gt;:::tip&lt;/p&gt;
&lt;p&gt;其实就是柯西-古萨基本定理的逆命题&lt;/p&gt;
&lt;p&gt;:::&lt;/p&gt;
&lt;h3&gt;泊松公式&lt;/h3&gt;
&lt;p&gt;任何一个在圆内调和且在闭圆盘上的调和函数，其在园内的值可由圆周上的值的积分表示&lt;/p&gt;
&lt;p&gt;$$
u(z_0) = u(r,\theta) = \frac{1}{2\pi} \int _0^{2\pi} \frac{R^2 - r^2}{R^2 - 2Rr\cos(\theta - \varphi) + r^2} u(Re^{i\theta}) d\theta
$$&lt;/p&gt;
&lt;p&gt;当$z = z_0$即$r=0$时，退化为平均值公式&lt;/p&gt;
</content:encoded></item><item><title>[工科复变函数] 初等函数</title><link>https://alkaid114.github.io/posts/complex_func/elementary_func/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/complex_func/elementary_func/</guid><pubDate>Fri, 26 Sep 2025 22:13:00 GMT</pubDate><content:encoded>&lt;h2&gt;复变函数的指数函数&lt;/h2&gt;
&lt;p&gt;&amp;lt;!-- {% note blue &apos;fas fa-clipboard&apos; %} --&amp;gt;
需要满足的条件:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;$f(z)$在复平面内&lt;strong&gt;解析&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;$f^{\prime}(z)=f(z), z \in C$&lt;/li&gt;
&lt;li&gt;$\mathit{Im}(z)=0$时，$f(z)=e^x$,其中$x=\mathit{Re}(z)$，可见$f(z)=e^x \left ( \cos y + i\sin y \right )$
&amp;lt;!-- {% endnote %} --&amp;gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;如果$z=x+iy$，那么称函数$f(z)=e^x \left ( \cos y + i\sin y \right )$为复变数$z$的指数函数，记作$\exp z$&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
\exp z &amp;amp;= e^x \left ( \cos y + i\sin y \right ) = e^{x+iy} \
\left | \exp z \right | &amp;amp;= e^x \
\arg (\exp z) &amp;amp;= y + 2k\pi
\end{aligned}
$$&lt;/p&gt;
&lt;h3&gt;复变指数函数的特殊性质&lt;/h3&gt;
&lt;p&gt;$e^z$是以$2k\pi i$为周期的周期函数&lt;/p&gt;
&lt;h2&gt;复变函数的对数函数&lt;/h2&gt;
&lt;p&gt;若$z \ne 0$，称满足方程$e^{\omega}=z$的函数$\omega=f(z)$为复变数$z$的对数函数，记作&lt;/p&gt;
&lt;p&gt;$$
\omega = \mathit{Ln} z
$$&lt;/p&gt;
&lt;p&gt;令$\omega = u+iv$，则有$z=e^{u+iv}=e^{u} \cdot e^{iv}$&lt;/p&gt;
&lt;p&gt;$\because e^{u}=\left | z \right |,v=\arg z$&lt;/p&gt;
&lt;p&gt;$\therefore \omega = \mathit{Ln}z=\ln{\left |z \right |}+i\arg z + 2k\pi i$ ($k=0$时为&lt;strong&gt;主值&lt;/strong&gt;)&lt;/p&gt;
&lt;p&gt;:::caution&lt;/p&gt;
&lt;p&gt;指定$k$为某具体值时&lt;/p&gt;
&lt;p&gt;$\mathit{Ln}z^n \ne n\mathit{Ln}z$ 与 $\mathit{Ln}\sqrt[n]{z} \ne \frac{1}{n}\mathit{Ln}z$ 不一定成立&lt;/p&gt;
&lt;p&gt;:::&lt;/p&gt;
&lt;h2&gt;复数的乘幂&lt;/h2&gt;
&lt;p&gt;$$
\mathbf{a^b}=e^{\mathbf{b}\mathit{Ln}\mathbf a}=e^{\mathbf{b}\ln \mathbf a} \cdot e^{2 \mathbf{b} k \pi i}
$$&lt;/p&gt;
&lt;p&gt;当$b$为整数时，$e^{2\mathbf{b}k\pi i}=1$，因$2\mathbf{b}k\pi$是$2k\pi$的倍数，故$\mathbf{a^b}$仅有一个值&lt;/p&gt;
&lt;p&gt;当$b$为非整有理数$\frac{p}{q}$时，$e^{2\mathbf{b}k\pi i}=e^{2\mathbf{\frac{p}{q}k\pi i}}$，$\mathbf{a^b}$具有$q$个值&lt;/p&gt;
&lt;p&gt;对于其他形式，有无穷多个值&lt;/p&gt;
&lt;h2&gt;复变函数的幂函数&lt;/h2&gt;
&lt;p&gt;形如&lt;/p&gt;
&lt;p&gt;$$
z^{\mathbf{b}}=e^{\mathbf{b}\mathit{Ln}z}
$$&lt;/p&gt;
&lt;p&gt;的函数称为幂函数($\mathbf{b}$为常复数)&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
z^{\mathbf{b}}&amp;amp;=e^{\mathbf{b}\mathit{Ln}z} \
&amp;amp;= e^{\mathbf{b}\ln{\left | z \right |}}\left [ \cos{\mathbf{b} \left ( \arg z + 2k\pi \right ) } + i \sin{\mathbf{b} \left ( \arg z + 2k\pi \right ) }  \right ] \text{ (k为任意整数)}
\end{aligned}
$$&lt;/p&gt;
&lt;h3&gt;复变幂函数的求导公式仍然成立&lt;/h3&gt;
&lt;p&gt;$\left ( z^{\mathbf{b}} \right ) ^{\prime}=\mathbf{b}z^{\mathbf{b-1}}$&lt;/p&gt;
&lt;h2&gt;复变三角函数&lt;/h2&gt;
&lt;p&gt;由&lt;a href=&quot;#%E6%AC%A7%E6%8B%89%E5%85%AC%E5%BC%8F&quot;&gt;欧拉公式&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
e^{i\theta} = \cos \theta + i\sin \theta \
e^{-i\theta} = \cos \theta - i\sin \theta
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;得到&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
\cos \theta = \frac{e^{i \theta}+e^{-i \theta}}{2} \
\sin \theta = \frac{e^{i \theta}-e^{-i \theta}}{2i}
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;$\theta = z$为复数时仍然成立&lt;/p&gt;
&lt;h3&gt;复变三角函数性质&lt;/h3&gt;
&lt;p&gt;都在复平面内解析，其余与实变函数相同&lt;/p&gt;
&lt;p&gt;公式&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
\cos z &amp;amp;= \cos{\left ( x+iy \right )}&amp;amp;=\cos x \cosh y - i\sin x\sinh y \
\sin z &amp;amp;= \sin{\left ( x+iy \right )}&amp;amp;=\sin x \cosh y + i\cos x\sinh y
\end{aligned}
$$&lt;/p&gt;
&lt;h3&gt;双曲函数&lt;/h3&gt;
&lt;p&gt;$$
\begin{aligned}
\cosh x &amp;amp;= \cos ix &amp;amp;= \frac{e^{x}+e^{-x}}{2}\
\sinh x &amp;amp;= -i\sin ix &amp;amp;= \frac{e^{x}-e^{-x}}{2}
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;:::warning&lt;/p&gt;
&lt;p&gt;用欧拉公式表示的$e$的形式需要重点记忆，题目中可能会出现双曲函数和三角函数之间的转换&lt;/p&gt;
&lt;p&gt;:::&lt;/p&gt;
&lt;h2&gt;反三角函数&lt;/h2&gt;
&lt;p&gt;$$
\begin{aligned}
\arcsin z &amp;amp;= -i\mathit{Ln}\left ( iz +\sqrt{1-z^2} \right ) \
\arccos z &amp;amp;= -i\mathit{Ln}\left ( iz +\sqrt{z^2-1} \right ) \
\arctan z &amp;amp;= -\frac{i}{2}\mathit{Ln}\frac{1+iz}{1-iz}
\end{aligned}
$$&lt;/p&gt;
&lt;h2&gt;反双曲三角函数&lt;/h2&gt;
&lt;p&gt;$$
\begin{aligned}
\text{arcsinh} z &amp;amp;= \mathit{Ln}\left ( z +\sqrt{z^2+1} \right ) \
\text{arccosh} z &amp;amp;= \mathit{Ln}\left ( z +\sqrt{z^2-1} \right ) \
\text{arctanh} z &amp;amp;= \frac{1}{2}\mathit{Ln}\frac{1+z}{1-z}
\end{aligned}
$$&lt;/p&gt;
</content:encoded></item><item><title>[工科复变函数] 调和函数</title><link>https://alkaid114.github.io/posts/complex_func/harmonic_func/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/complex_func/harmonic_func/</guid><pubDate>Fri, 26 Sep 2025 21:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;拉普拉斯方程&lt;/h2&gt;
&lt;p&gt;$$
\begin{aligned}
\frac{\partial^2 u}{\partial x^2} + \frac{\partial^2 u}{\partial y^2} = 0
\
\frac{\partial^2 v}{\partial x^2} + \frac{\partial^2 v}{\partial y^2} = 0
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;用Nabla算子$\nabla^2$或拉普拉斯算子$\Delta$表示&lt;/p&gt;
&lt;p&gt;调和函数是满足拉普拉斯方程的函数&lt;/p&gt;
&lt;p&gt;$f(z)=u(x,y)+iv(x,y)$&lt;/p&gt;
&lt;p&gt;若$u$或$v$满足拉普拉斯方程，则称$u$或$v$为调和函数&lt;/p&gt;
&lt;h3&gt;定理 2.3.1&lt;/h3&gt;
&lt;p&gt;若$f(z)$在区域$D$内解析，则$u(x,y),v(x,y)$都是$D$内的调和函数&lt;/p&gt;
&lt;h3&gt;定义2.3.2&lt;/h3&gt;
&lt;p&gt;来自同一个解析函数或满足柯西黎曼条件的调和函数$u$和$v$，$v$称为$u$的&lt;strong&gt;共轭调和函数&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;共轭调和函数的特点&lt;/h3&gt;
&lt;p&gt;它们的等值线在交点上永远相互正交&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./assets/harmonic.svg&quot; alt=&quot;等值线&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;定理 2.3.2&lt;/h3&gt;
&lt;p&gt;$f(z)$在区域$D$内解析$\Leftrightarrow $ 虚部$v(x,y)$是实部$u(x,y)$的共轭调和函数&lt;/p&gt;
&lt;h3&gt;积分求调和函数&lt;/h3&gt;
&lt;p&gt;由柯西黎曼条件&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
u^{\prime}_x = v^{\prime}_y \
u^{\prime}_y = -v^{\prime}_x
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;和全微分&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
dv = v^{\prime}_x dx + v^{\prime}_y dy \
du = u^{\prime}_x dx + u^{\prime}_y dy
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;得&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
v(x,y) = \int -u^{\prime}_y dx + \int u^{\prime}_x dy
\
u(x,y) = \int v^{\prime}_y dx - \int v^{\prime}_x dy
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;该积分与积分路径无关，所以可以随意选择积分路径&lt;/p&gt;
</content:encoded></item><item><title>在Fedora上无需编译安装ROS/ROS2</title><link>https://alkaid114.github.io/posts/fedora_install_ros/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/fedora_install_ros/</guid><pubDate>Sat, 13 Sep 2025 21:57:06 GMT</pubDate><content:encoded>&lt;h2&gt;起因&lt;/h2&gt;
&lt;p&gt;最近尝试加入学校的竞技机器人队，队里也是如预想的一样要求用老版本的Ubuntu&lt;/p&gt;
&lt;p&gt;&lt;s&gt;不想用Ubuntu&lt;/s&gt;&lt;/p&gt;
&lt;h2&gt;尝试&lt;/h2&gt;
&lt;p&gt;经过两次在Fedora上安装ROS的rpm包的失败尝试(&lt;s&gt;依旧RHEL专用版&lt;/s&gt;)，想起来Fedora还有个copr仓库，于是从中找到了别人打包的ROS&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://copr.fedorainfracloud.org/coprs/tavie/ros2/&quot;&gt;https://copr.fedorainfracloud.org/coprs/tavie/ros2/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;安装&lt;/h2&gt;
&lt;p&gt;安装挺简单的&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo dnf copr enable tavie/ros2
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;sudo dnf install ros-{distro}-desktop
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;{distro}&lt;/code&gt;填ROS发行版名称，如&lt;code&gt;jazzy&lt;/code&gt;(&lt;code&gt;humble&lt;/code&gt;版本只有Fedora40能安装😭)&lt;/p&gt;
&lt;p&gt;Ubuntu上使用的启动ROS环境变量的语句在这里要换成&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;source /usr/lib64/ros2-{distro}/setup.bash
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;新发现&lt;/h2&gt;
&lt;p&gt;在问AI的时候给我介绍了个叫RoboStack的项目&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://robostack.github.io/&quot;&gt;https://robostack.github.io/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;这个项目把ROS打包成了conda包，可以直接安装在conda环境中，无关发行版且方便管理ROS版本&lt;/p&gt;
&lt;p&gt;感觉是个非常有意义的项目，不知道为什么网上却几乎没有相关的讨论&lt;/p&gt;
&lt;p&gt;亲测可以在Fedora42上使用ROS-Humble，不过自定义消息类型编译会报错，目前还没有解决思路&lt;/p&gt;
&lt;h2&gt;最终&lt;/h2&gt;
&lt;p&gt;别折腾，建议用容器&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;/posts/ros_in_container/&quot;&gt;/posts/ros_in_container/&lt;/a&gt;&lt;/p&gt;
</content:encoded></item><item><title>文章加密测试</title><link>https://alkaid114.github.io/posts/example/encrypttest/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/example/encrypttest/</guid><pubDate>Sat, 13 Sep 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;该文章为加密文章，阅读请移步博客网站&lt;/p&gt;</content:encoded></item><item><title>[RM] 卡尔曼滤波快速入门</title><link>https://alkaid114.github.io/posts/kalman_filter/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/kalman_filter/</guid><pubDate>Tue, 02 Sep 2025 11:44:00 GMT</pubDate><content:encoded>&lt;p&gt;本文旨在以最快的速度学会卡尔曼滤波的使用方法，并不做理论推导和进一步的深入理解&lt;/p&gt;
&lt;p&gt;&lt;s&gt;诶我草了我一个学计算机的为什么要学现代控制理论的知识啊&lt;/s&gt;&lt;/p&gt;
&lt;h2&gt;五条最重要的公式&lt;/h2&gt;
&lt;p&gt;$$
\begin{aligned}
\text{状态预测 } \hat{x}&lt;em&gt;{k|k-1} &amp;amp;= F_k \hat{x}&lt;/em&gt;{k-1|k-1} + B_k u_k
\
\text{协方差预测 } P_{k|k-1} &amp;amp;= F_k P_{k-1|k-1} F_k^T + Q_k
\
\text{卡尔曼增益计算 } K_k &amp;amp;= P_{k|k-1} H_k^T (H_k P_{k|k-1} H_k^T + R_k)^{-1}
\
\text{状态更新 } \hat{x}&lt;em&gt;{k|k} &amp;amp;= \hat{x}&lt;/em&gt;{k|k-1} + K_k (z_k - H_k \hat{x}&lt;em&gt;{k|k-1})
\
\text{协方差更新 } P&lt;/em&gt;{k|k} &amp;amp;= (I - K_k H_k) P_{k|k-1}
\end{aligned}
$$&lt;/p&gt;
&lt;h2&gt;什么是$\hat x$状态？&lt;/h2&gt;
&lt;p&gt;$\hat x$表示对系统状态的估计值，通常是一个向量，包含了系统的各种状态变量，比如位置、速度、加速度等&lt;/p&gt;
&lt;p&gt;比如一个物体正在直线运动，它当前的真实状态就可以表示为&lt;/p&gt;
&lt;p&gt;$$
x = \begin{bmatrix} position \
velocity \
acceleration
\end{bmatrix}
$$&lt;/p&gt;
&lt;h2&gt;$\hat x$和$x$有什么区别？&lt;/h2&gt;
&lt;p&gt;$x$表示真实状态，而$\hat x$表示状态的估计值&lt;/p&gt;
&lt;p&gt;:::note
真实状态$x$是我们不知道的，而卡尔曼滤波的目的就是通过&lt;strong&gt;测量值&lt;/strong&gt;和&lt;strong&gt;估计值&lt;/strong&gt;$\hat x_{k|k-1}$计算出$\hat x_{k|k}$来尽量接近真实状态$x$
:::&lt;/p&gt;
&lt;h2&gt;$\hat x_{k|k-1}$是什么意思？&lt;/h2&gt;
&lt;p&gt;$\hat x_{k|k-1}$表示在当前时刻$k$，基于时刻$k-1$的信息进行的对当前时刻$k$预测，但并未融合$k$时刻的测量值$z_k$，也称为&lt;strong&gt;先验估计&lt;/strong&gt;/&lt;strong&gt;先验状态&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;$\hat x_{k|k}$又是什么意思？&lt;/h2&gt;
&lt;p&gt;$\hat x_{k|k}$是在当前时刻$k$，由$\hat x_{k|k-1}$和$k$时刻的&lt;strong&gt;测量值&lt;/strong&gt;$z_k$计算得出的更接近$k$时刻的真实状态的估计值，也称为&lt;strong&gt;后验估计&lt;/strong&gt;/&lt;strong&gt;后验状态&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这个&lt;strong&gt;后验状态&lt;/strong&gt;$\hat x_{k|k}$就是我们最终想要的结果&lt;/p&gt;
&lt;h2&gt;什么是观测矩阵$H_k$？&lt;/h2&gt;
&lt;p&gt;观测矩阵$H_k$定义了如何从状态变量$\hat x$映射到测量值$z_k$&lt;/p&gt;
&lt;p&gt;:::tip
举个例子，假设我们使用的测量仪器只能测量物体的位置，不能测量速度和加速度
:::&lt;/p&gt;
&lt;p&gt;所以$H_k$就应该是
$$
H_k = \begin{bmatrix} 1 &amp;amp; 0 &amp;amp; 0 \end{bmatrix}
$$&lt;/p&gt;
&lt;p&gt;因为&lt;/p&gt;
&lt;p&gt;$$
z = H_k x = \begin{bmatrix} 1 &amp;amp; 0 &amp;amp; 0 \end{bmatrix} \begin{bmatrix} position \
velocity \
acceleration
\end{bmatrix} = \begin{bmatrix} position \end{bmatrix}
$$&lt;/p&gt;
&lt;h2&gt;什么是状态转移矩阵$F_k$？&lt;/h2&gt;
&lt;p&gt;状态转移矩阵$F_k$定义了系统状态&lt;strong&gt;如何&lt;/strong&gt;从时刻$k-1$转移到时刻$k$&lt;/p&gt;
&lt;p&gt;举个例子，一个物体在匀加速直线运动，假设每次时间步长为$\Delta t$，那么状态转移矩阵$F_k$可以表示为&lt;/p&gt;
&lt;p&gt;$$
F_k = \begin{bmatrix}
1 &amp;amp; \Delta t &amp;amp; \frac{1}{2} \Delta t^2 \
0 &amp;amp; 1 &amp;amp; \Delta t \
0 &amp;amp; 0 &amp;amp; 1
\end{bmatrix}
$$&lt;/p&gt;
&lt;p&gt;因为&lt;/p&gt;
&lt;p&gt;$$
x_k = F_k x_{k-1} = \begin{bmatrix}
1 &amp;amp; \Delta t &amp;amp; \frac{1}{2} \Delta t^2 \
0 &amp;amp; 1 &amp;amp; \Delta t \
0 &amp;amp; 0 &amp;amp; 1
\end{bmatrix} \begin{bmatrix} position \
velocity \
acceleration
\end{bmatrix}_{k-1} = \begin{bmatrix} position \
velocity \
acceleration
\end{bmatrix}_k
$$&lt;/p&gt;
&lt;p&gt;换成高中物理的写法就是&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
p_k &amp;amp;= p_{k-1} + v_{k-1} \Delta t + \frac{1}{2} a_{k-1} \Delta t^2 \
v_k &amp;amp;= v_{k-1} + a_{k-1} \Delta t \
a_k &amp;amp;= a_{k-1}
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;&lt;s&gt;这下看懂了&lt;/s&gt;&lt;/p&gt;
&lt;h2&gt;什么是控制输入矩阵$B_k$和$u_k$？&lt;/h2&gt;
&lt;p&gt;控制输入矩阵$B_k$定义了外部控制输入$u_k$&lt;strong&gt;如何影响&lt;/strong&gt;系统状态&lt;/p&gt;
&lt;p&gt;:::tip
简单来说就像你在匀速驾驶一辆车，突然猛踩了一下油门，车的加速度会增加，从而影响车的速度和位置
:::&lt;/p&gt;
&lt;p&gt;而控制输入矩阵$B_k$就是用来描述这种&lt;strong&gt;外部控制&lt;/strong&gt;（猛踩一下油门）对&lt;strong&gt;系统状态&lt;/strong&gt;（车的加速度）的影响&lt;/p&gt;
&lt;p&gt;而$u_k$就是这个外部控制输入的&lt;strong&gt;具体数值&lt;/strong&gt;，也就是$k$时刻踩油门踩了多深&lt;/p&gt;
&lt;p&gt;举个例子，假设我们在$k$时刻对直线运动的物体施加一个额外的力$\Delta force$作为控制输入$u_k$&lt;/p&gt;
&lt;p&gt;$$
u_k = \Delta  force
$$&lt;/p&gt;
&lt;p&gt;那么根据牛顿第二定律$F=ma$就能得到加速度的改变量&lt;/p&gt;
&lt;p&gt;$$
\Delta a = \frac{\Delta force}{m}
$$&lt;/p&gt;
&lt;p&gt;因为卡尔曼滤波是个&lt;strong&gt;离散系统&lt;/strong&gt;，所以我们不关心加速度的连续变化，只关心在每个时间步长$\Delta t$内加速度的变化量$\Delta a$&lt;/p&gt;
&lt;p&gt;控制输入矩阵$B_k$就可以表示为&lt;/p&gt;
&lt;p&gt;$$
B_k = \begin{bmatrix}
\frac{1}{2} \Delta t^2 \frac{1}{m} \
\Delta t \frac{1}{m}\
\frac{1}{m}
\end{bmatrix}
$$&lt;/p&gt;
&lt;p&gt;$$
B_k u_k = \begin{bmatrix}
\frac{1}{2} \Delta t^2 \frac{1}{m} \
\Delta t \frac{1}{m}\
\frac{1}{m}
\end{bmatrix} \Delta  force = \begin{bmatrix}
\Delta positon \
\Delta velocity \
\Delta acceleration
\end{bmatrix}
$$&lt;/p&gt;
&lt;h2&gt;什么是过程噪声协方差矩阵$Q_k$？&lt;/h2&gt;
&lt;p&gt;过程噪声协方差矩阵$Q_k$表示系统在状态转移过程中可能存在的随机扰动或不确定性&lt;/p&gt;
&lt;p&gt;比如风吹、路面不平等因素都会影响物体的运动状态，这个在$k$时刻对物体的不确定影响我们就用$Q_k$来表示&lt;/p&gt;
&lt;h2&gt;什么是测量噪声协方差矩阵$R_k$？&lt;/h2&gt;
&lt;p&gt;测量噪声协方差矩阵$R_k$表示测量仪器本身存在的误差或不确定性&lt;/p&gt;
&lt;p&gt;比如测量仪器的精度有限，可能会有一定的误差，这个误差我们就用$R_k$来表示&lt;/p&gt;
&lt;h2&gt;什么是协方差矩阵$P$？&lt;/h2&gt;
&lt;p&gt;&lt;s&gt;主包也不知道，等主包学完概率论了再来补充&lt;/s&gt;&lt;/p&gt;
&lt;h2&gt;更适合程序中使用的协方差更新公式&lt;/h2&gt;
&lt;p&gt;由于浮点数运算是有误差的，直接使用&lt;/p&gt;
&lt;p&gt;$$
P_{k|k} = (I - K_k H_k) P_{k|k-1}
$$&lt;/p&gt;
&lt;p&gt;可能会导致协方差矩阵$P$变得不正定&lt;/p&gt;
&lt;p&gt;所以更推荐使用下面的公式来更新协方差矩阵$P$&lt;/p&gt;
&lt;p&gt;$$
P_{k|k} = (I - K_k H_k) P_{k|k-1} (I - K_k H_k)^T + K_k R_k K_k^T
$$&lt;/p&gt;
</content:encoded></item><item><title>[工科复变函数] 复数基础</title><link>https://alkaid114.github.io/posts/complex_func/basic/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/complex_func/basic/</guid><pubDate>Mon, 01 Sep 2025 22:02:12 GMT</pubDate><content:encoded>&lt;h2&gt;欧拉公式&lt;/h2&gt;
&lt;p&gt;$$
e^{i \theta} = cos \theta + i \sin \theta
$$&lt;/p&gt;
&lt;p&gt;:::tip
欧拉公式非常重要，大部分复数的运算都需要用到
:::&lt;/p&gt;
&lt;h2&gt;复数的辐角&lt;/h2&gt;
&lt;p&gt;辐角是复数与实轴的夹角，记作 $\arg z$&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
\arg z = \begin{cases}
\arctan\left(\frac y x\right) &amp;amp; \qquad x &amp;gt; 0 \
\arctan\left(\frac y x\right) + \pi&amp;amp; \qquad y \ge 0 , x &amp;lt; 0 \
\arctan\left(\frac y x\right) - \pi&amp;amp; \qquad y &amp;lt; 0 , x &amp;lt; 0 \
+\frac{\pi}{2} &amp;amp; \qquad y &amp;gt; 0 , x = 0 \
-\frac{\pi}{2} &amp;amp; \qquad y &amp;lt; 0 , x = 0
\end{cases}
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;:::tip
感没感觉有点眼熟，这个东西其实就是&lt;code&gt;atan2&lt;/code&gt;
:::&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
\operatorname{atan2}(y, x) = \begin{cases}
\arctan\left(\frac y x\right) &amp;amp; \qquad x &amp;gt; 0 \
\arctan\left(\frac y x\right) + \pi&amp;amp; \qquad y \ge 0 , x &amp;lt; 0 \
\arctan\left(\frac y x\right) - \pi&amp;amp; \qquad y &amp;lt; 0 , x &amp;lt; 0 \
+\frac{\pi}{2} &amp;amp; \qquad y &amp;gt; 0 , x = 0 \
-\frac{\pi}{2} &amp;amp; \qquad y &amp;lt; 0 , x = 0 \
\text{undefined} &amp;amp; \qquad y = 0, x = 0
\end{cases}
\end{aligned}
$$&lt;/p&gt;
&lt;h3&gt;辐角的连续性&lt;/h3&gt;
&lt;p&gt;辐角 $\omega = \arg z$ 在&lt;strong&gt;除去原点和负实轴&lt;/strong&gt;的复平面上连续&lt;/p&gt;
&lt;h2&gt;复数开根多解&lt;/h2&gt;
&lt;p&gt;$$
\sqrt[3]{i} = ?
$$&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
z &amp;amp;= \sqrt[3]{i} \
&amp;amp;= \sqrt[3]{\cos{\left ( \frac{\pi}{2} + 2k\pi \right )} + i\sin{\left ( \frac{\pi}{2} + 2k\pi \right )}} \
&amp;amp;= \sqrt[3]{e^{i \left ( \frac{\pi}{2} + 2k\pi \right )}} \
&amp;amp;= e^{i \left ( \frac{\pi}{6} + \frac{2}{3}k\pi \right )} \
&amp;amp;= \cos{\left ( \frac{\pi}{6} + \frac{2}{3}k\pi \right )} + i\sin{\left ( \frac{\pi}{6} + \frac{2}{3}k\pi \right )}
\end{aligned}
$$&lt;/p&gt;
</content:encoded></item><item><title>[解包] 常轨脱离(ハミダシ)语音与文本解包制作GPTSoVits数据集</title><link>https://alkaid114.github.io/posts/hamidashi_voice_dataset/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/hamidashi_voice_dataset/</guid><pubDate>Fri, 29 Aug 2025 21:47:58 GMT</pubDate><content:encoded>&lt;h2&gt;需要准备什么&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;游戏本体&amp;lt;!-- （不建议steam版，&lt;s&gt;虽然我也没试过&lt;/s&gt;，但之前试过解包steam版的别的游戏，内容是加密的解不了） --&amp;gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rjpcomputing/luaforwindows/releases&quot;&gt;Lua环境&lt;/a&gt;，提取文本+数据处理脚本&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/morkt/GARbro/releases&quot;&gt;GARbro&lt;/a&gt;，解包用&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ffmpeg.org/download.html#build-windows&quot;&gt;FFmpeg&lt;/a&gt;，&lt;code&gt;.ogg&lt;/code&gt;转&lt;code&gt;.wav&lt;/code&gt;，记得添加到环境变量&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;解包语音和脚本资源&lt;/h2&gt;
&lt;p&gt;运行&lt;code&gt;GARbro.GUI.exe&lt;/code&gt;，点击左上角&lt;code&gt;文件&lt;/code&gt;-&amp;gt;&lt;code&gt;打开&lt;/code&gt;，选择游戏目录内的&lt;code&gt;hamidashi.pfs&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;将&lt;code&gt;script&lt;/code&gt;目录内所有内容（扩展名&lt;code&gt;.ast&lt;/code&gt;的文件）导出备用，这个目录内即为脚本文件&lt;/p&gt;
&lt;p&gt;之后打开游戏目录内的&lt;code&gt;hamidashi.pfs.000&lt;/code&gt;，将&lt;code&gt;sound/vo/名简写&lt;/code&gt;，比如要导出&lt;strong&gt;錦あすみ&lt;/strong&gt;的语音，就导出&lt;code&gt;sound/vo/asu&lt;/code&gt;内的所有&lt;code&gt;.ogg&lt;/code&gt;音频&lt;/p&gt;
&lt;p&gt;（如果在找&lt;strong&gt;妃愛&lt;/strong&gt;的语音，还有一部分在&lt;code&gt;hamidashi.pfs.001&lt;/code&gt;的&lt;code&gt;sound/vo/hiy&lt;/code&gt;）&lt;/p&gt;
&lt;p&gt;将所有需要的&lt;code&gt;.ogg&lt;/code&gt;音频导出到一个文件夹内备用，暂且称之&lt;code&gt;voice_ogg&lt;/code&gt;目录吧&lt;/p&gt;
&lt;h2&gt;提取语音对应的文本&lt;/h2&gt;
&lt;p&gt;不同于很多使用&lt;code&gt;.json&lt;/code&gt;的其他galgame，解析这个&lt;code&gt;.ast&lt;/code&gt;的过程相当波折&lt;/p&gt;
&lt;p&gt;一段例子&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;text={
    [1]={
        vo={
            {&quot;vo&quot;,file=&quot;fem_mir_10142&quot;,ch=&quot;mir&quot;},
        },
        name={name=&quot;里&quot;},
        ja={
            {
            &quot;「今日はほんとお疲れー！　最後までみんな笑いすぎでウケる！　うち、しおぽよがあれだけ楽しそうにしてるの初めて見たし！」&quot;,
            },
        },
    },
...
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;一开始看到这语法还以为是私有标记语言，然后跟AI对线一小时整了个正则表达式&lt;/p&gt;
&lt;p&gt;后来注意到怎么从1开始呢，不会跟lua有关吧，查了一下才知道原来这整个文件就是个lua脚本（&lt;s&gt;电脑里有一款索引从1开始的语言&lt;/s&gt;）&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;2025-11-25: 才知道原来这个引擎就是基于Lua脚本的，早知道应该先调查一下的&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;提取文本与对应音频文件名生成json的lua脚本&lt;/h3&gt;
&lt;p&gt;将该脚本与&lt;a href=&quot;https://github.com/LuaDist/dkjson/blob/master/dkjson.lua&quot;&gt;dkjson.lua&lt;/a&gt;放置在与&lt;code&gt;script&lt;/code&gt;目录同级&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;local json = require(&quot;dkjson&quot;)

local lfs = require(&quot;lfs&quot;)

local script_dir = &quot;script&quot;

local target_name = &quot;妃愛&quot; -- 名字在.ast文件里能找到
local ja_name = nil -- name={name=&quot;あすみ&quot;,ja=&quot;雪景シキ&quot;}遇到类似想提取雪景シキ的情况时就填入&quot;雪景シキ&quot;，其余情况填nil，该项若非空会覆盖target_name

local all_data = {}

for file in lfs.dir(script_dir) do
    if file:match(&quot;%.ast$&quot;) then
        local path = script_dir .. &quot;/&quot; .. file
        dofile(path)
        local ast_data = _G.ast
        if ast_data and ast_data.text then
            for k, v in pairs(ast_data.text) do
                local should_insert = false

                if ja_name then
                    if v.name and v.name.ja and v.name.ja == ja_name then
                        should_insert = true
                    end
                else
                    if v.name and v.name.name and target_name == v.name.name then
                        should_insert = true
                    end
                end

                if should_insert then
                    if v.vo then
                        local tmp = v.ja[1][1]
                        tmp = string.gsub(tmp, &quot;「&quot;, &quot;&quot;)
                        tmp = string.gsub(tmp, &quot;」&quot;, &quot;&quot;)
                        tmp = string.gsub(tmp, &quot;『&quot;, &quot;&quot;)
                        tmp = string.gsub(tmp, &quot;』&quot;, &quot;&quot;)
                        local data = {
                            voice_file = v.vo[1].file,
                            text = tmp
                        }
                        table.insert(all_data, data)
                    end
                end
            end
        else
            print(&quot;无法加载文件：&quot; .. path)
        end
    end
end

-- 导出为 JSON
local json_str = json.encode(all_data, {
    indent = true
})
local out = io.open(&quot;text_output.json&quot;, &quot;w&quot;)
out:write(json_str)
out:close()
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;运行该脚本即可得到&lt;code&gt;text_output.json&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;音频格式转换与筛选&lt;/h2&gt;
&lt;p&gt;将该脚本与&lt;a href=&quot;https://github.com/LuaDist/dkjson/blob/master/dkjson.lua&quot;&gt;dkjson.lua&lt;/a&gt;放置在与&lt;code&gt;script&lt;/code&gt;目录同级&lt;/p&gt;
&lt;p&gt;:::important
需要将FFmpeg添加到环境变量，或者自己改脚本里的调用命令吧
:::&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;local lfs = require(&quot;lfs&quot;)
local json = require(&quot;dkjson&quot;)

local input_dir = &quot;voice_ogg&quot; 

local output_dir = &quot;voice_wav&quot;

local json_path = &quot;text_output.json&quot;

local min_duration = 3 -- 筛选音频最短时长（秒）
local max_duration = 30 -- 筛选音频最长时长（秒）

-- 创建输出目录
local attr = lfs.attributes(output_dir)
if not attr or attr.mode ~= &quot;directory&quot; then
    os.execute(&apos;mkdir &quot;&apos; .. output_dir .. &apos;&quot;&apos;)
end

-- 读取 JSON
local f = io.open(json_path, &quot;r&quot;)
if not f then
    error(&quot;无法打开 JSON 文件: &quot; .. json_path)
end
local content = f:read(&quot;*a&quot;)
f:close()

local data, pos, err = json.decode(content)
if err then
    error(&quot;JSON 解析失败: &quot; .. err)
end

local allowed = {}
for _, entry in ipairs(data) do
    allowed[entry.voice_file] = true
end

-- 获取音频时长（秒）
local function get_duration(file_path)
    local cmd = string.format(
        &apos;ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 &quot;%s&quot;&apos;, file_path)
    local handle = io.popen(cmd)
    local result = handle:read(&quot;*a&quot;)
    handle:close()
    return tonumber(result)
end

for file in lfs.dir(input_dir) do
    if file:match(&quot;%.ogg$&quot;) then
        local input_path = input_dir .. &quot;/&quot; .. file
        local base_name = file:match(&quot;^(.*)%.ogg$&quot;)
        local output_path = output_dir .. &quot;/&quot; .. base_name .. &quot;.wav&quot;

        if allowed[base_name] then
            local duration = get_duration(input_path)

            if duration and duration &amp;gt;= min_duration and duration &amp;lt;= max_duration then
                local cmd = string.format(&apos;ffmpeg -i &quot;%s&quot; &quot;%s&quot;&apos;, input_path, output_path)
                os.execute(cmd)
            end
        end
    end
end
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;运行脚本后我们便有了所有需要的资源&lt;/p&gt;
&lt;h2&gt;生成GPTSoVits数据集使用的&lt;code&gt;slicer.list&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;同样放置在同级目录&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;local lfs = require(&quot;lfs&quot;)

local json = require(&quot;dkjson&quot;)
local current_dir = lfs.currentdir()

local wav_dir = &quot;voice_wav&quot;

local json_path = &quot;text_output.json&quot;

local output_slicer = &quot;slicer.list&quot;

-- 读取 JSON
local f = io.open(json_path, &quot;r&quot;)
if not f then
    error(&quot;无法打开 JSON 文件: &quot; .. json_path)
end
local content = f:read(&quot;*a&quot;)
f:close()

local data, pos, err = json.decode(content)
if err then
    error(&quot;JSON 解析失败: &quot; .. err)
end

local vtpairs = {}
for _, entry in ipairs(data) do
    vtpairs[entry.voice_file] = entry.text
end

local output = io.open(output_slicer, &quot;w&quot;)

for file in lfs.dir(wav_dir) do
    if file:match(&quot;%.wav$&quot;) then
        local base_name = file:match(&quot;^(.*)%.wav$&quot;)
        local absolute_path = current_dir .. &quot;\\&quot; .. base_name .. &quot;.wav&quot;
        if vtpairs[base_name] then
            output:write(absolute_path .. &quot;|slicer|JA|&quot; .. vtpairs[base_name] .. &quot;\n&quot;)
        end
    end
end

output:close()
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;之后就可以拿去训练GPTSoVits了&lt;/p&gt;
&lt;h2&gt;顺便贴一下跟AI对线一小时得到的Regex（没用了）&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;/{[&quot;&apos;]vo[&quot;&apos;],\s*file=[&quot;&apos;]([^&quot;&apos;]+)[&quot;&apos;],\s*ch=[&quot;&apos;]([^&quot;&apos;]+)[&quot;&apos;]}[\s\S]*?ja=\s*\{\{\s*\{\s*[&quot;&apos;]([^&quot;&apos;]+)[&quot;&apos;]/g
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>[Fedora 42]自签名自定义内核，启用安全启动</title><link>https://alkaid114.github.io/posts/fedora_kernel_sign/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/fedora_kernel_sign/</guid><pubDate>Mon, 04 Aug 2025 09:30:06 GMT</pubDate><content:encoded>&lt;p&gt;为了压住天选5pro上的火龙R9 7940HX，不得不用&lt;a href=&quot;http://asus-linux.org/&quot;&gt;asus-linux&lt;/a&gt;的asusctl，想要启用功耗控制的话还要用移植到fedora的cachyos内核&lt;/p&gt;
&lt;p&gt;但是对fedora来说是第三方的cachyos内核是无签名的，只能自签名后导入MOK&lt;/p&gt;
&lt;h2&gt;使用pesign生成签名密钥&lt;/h2&gt;
&lt;h3&gt;安装pesign&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;sudo dnf install pesign
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;生成签名密钥&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;sudo openssl req -new -x509 -newkey rsa:2048 -keyout MOK.key -out MOK.crt -nodes -days 3650 -subj &quot;/CN=My Secure Boot Key/&quot;

sudo openssl x509 -in MOK.crt -out MOK.cer -outform DER
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;导入密钥到 UEFI&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;sudo mokutil --import MOK.cer
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;[!WARNING]
会提示设置密码，稍后导入密钥时会要求输入&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;重启后自动进入MOK,选择&quot;Enroll MOK&quot;导入密钥&lt;/p&gt;
&lt;h2&gt;使用sbsign签名内核&lt;/h2&gt;
&lt;h3&gt;安装sbsigntools&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;sudo dnf install sbsigntools
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;签名内核&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;sudo sbsign --key MOK.key --cert MOK.crt --output /boot/vmlinuz-$(uname -r) /boot/vmlinuz-$(uname -r)

sudo mv /boot/vmlinuz-$(uname -r).signed /boot/vmlinuz-$(uname -r)

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;!-- ## 更新grub&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo grub2-mkconfig -o /boot/grub2/grub.cfg
``` --&amp;gt;

最后在BIOS设置中开启安全启动&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>[工科复变函数] 解析函数</title><link>https://alkaid114.github.io/posts/complex_func/analytic_func/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/complex_func/analytic_func/</guid><pubDate>Mon, 07 Jul 2025 21:08:57 GMT</pubDate><content:encoded>&lt;h2&gt;复变函数的导数与微分&lt;/h2&gt;
&lt;p&gt;在复变函数中，&lt;strong&gt;可导&lt;/strong&gt;与&lt;strong&gt;可微&lt;/strong&gt;是等价的&lt;/p&gt;
&lt;p&gt;所以要证明复变函数在某点是否可微时只需算该点的导数是否存在&lt;/p&gt;
&lt;p&gt;$$
f^{\prime}(z_0) = \frac{f(z_0+\Delta z)-f(z_0)}{\Delta z}
$$&lt;/p&gt;
&lt;h3&gt;复变函数导数的几种表示形式&lt;/h3&gt;
&lt;p&gt;$$
\begin{aligned}
f^{\prime}(z) &amp;amp;= \frac{\partial u}{\partial x} + i \frac{\partial v}{\partial x} \[1.5em]
&amp;amp;= \frac{\partial v}{\partial y} - i \frac{\partial u}{\partial y}
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;第二种的计算过程&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
f^{\prime}(z) &amp;amp;= \lim_{\Delta z \to 0} \frac{f(z+i\Delta y)-f(z)}{i\Delta y} \[1.5em]
&amp;amp;= \frac{1}{i} \cdot \frac{\partial f}{\partial y} \[1.5em]
&amp;amp;= \frac{1}{i} \left( \frac{\partial u}{\partial y} + i \frac{\partial v}{\partial y} \right) \[1.5em]
&amp;amp;= \frac{\partial v}{\partial y} - i \frac{\partial u}{\partial y}
\end{aligned}
$$&lt;/p&gt;
&lt;h2&gt;解析&lt;/h2&gt;
&lt;h3&gt;解析与可导的区别&lt;/h3&gt;
&lt;p&gt;解析用于描述&lt;strong&gt;区域&lt;/strong&gt;而可导用于描述&lt;strong&gt;点&lt;/strong&gt;，也就是&lt;strong&gt;解析&lt;/strong&gt; $\supseteq$ &lt;strong&gt;可导&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;若函数在一个区域内处处可导，则称该函数在该区域内&lt;strong&gt;解析&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$f(z)$在$z_0$点处可导 $\Leftarrow$ $f(z)$在$z_0$处解析&lt;/p&gt;
&lt;p&gt;$f(z)$在$z_0$点处的&lt;strong&gt;邻域&lt;/strong&gt;可导 $\Leftrightarrow f(z)$在$z_0$处解析&lt;/p&gt;
&lt;h2&gt;柯西-黎曼条件&lt;/h2&gt;
&lt;p&gt;函数$f(z)=u(x,y)+iv(x,y)$在区域$D$内有定义则：&lt;/p&gt;
&lt;p&gt;$f(z)$在点$z=x+iy$&lt;strong&gt;可微&lt;/strong&gt;/&lt;strong&gt;可导&lt;/strong&gt; $\Leftrightarrow$ 在点$x+iy$处，$u(x,y),v(x,y)$&lt;strong&gt;可微&lt;/strong&gt;/&lt;strong&gt;可导&lt;/strong&gt;且满足&lt;strong&gt;柯西-黎曼条件&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
\frac{\partial u}{\partial x} &amp;amp;= \frac{\partial v}{\partial y} \
\frac{\partial u}{\partial y}&amp;amp;=-\frac{\partial v}{\partial x}
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;柯西-黎曼条件仅是$f(z)$可导的&lt;strong&gt;必要条件&lt;/strong&gt;，但若再证明$u^{\prime}_x,u^{\prime}_y,v^{\prime}_x,v^{\prime}_y$在$z$点处连续，则可得到$f(z)$在$z$点处&lt;strong&gt;可微&lt;/strong&gt;/&lt;strong&gt;可导&lt;/strong&gt;的&lt;strong&gt;充分必要条件&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;如何求得/证明一个函数的解析区域&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;先使用&lt;strong&gt;柯西-黎曼条件&lt;/strong&gt;，求出$u,v$的偏导数&lt;/li&gt;
&lt;li&gt;列出方程组，解出$x,y$为何值时满足柯西-黎曼条件&lt;/li&gt;
&lt;li&gt;判断$u^{\prime}_x,u^{\prime}_y,v^{\prime}_x,v^{\prime}_y$在$x,y$的取值范围内是否连续，若不连续则不可导&lt;/li&gt;
&lt;li&gt;$x,y$为点或线，则函数无解析区域，函数在此处可导；若$x,y$为区域，函数在此区域内解析&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;解析的一个必要条件&lt;/h2&gt;
&lt;p&gt;若$\omega = u(x,y) + iv(x,y)$是解析函数，则$\frac{\partial\omega}{\partial \bar z}=0$，即$\omega$只用$z$就可表示&lt;/p&gt;
&lt;h2&gt;将解析函数$f(x+iy)$化成$f(z)$的方法&lt;/h2&gt;
&lt;p&gt;令$y=0$&lt;/p&gt;
&lt;p&gt;$$
f(x+yi) = f(x) = \text{关于}x\text{的函数}
$$&lt;/p&gt;
&lt;p&gt;将$x$替换成$z$即可得到$f(z)$&lt;/p&gt;
</content:encoded></item><item><title>[大学物理] 纯滚动</title><link>https://alkaid114.github.io/posts/pure_scrolling/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/pure_scrolling/</guid><pubDate>Tue, 22 Apr 2025 09:14:35 GMT</pubDate><content:encoded>&lt;h2&gt;例题&lt;/h2&gt;
&lt;p&gt;半径为$R$的球，绕质心轴的转动惯量$J=\frac{2}{3}mR^2$（$m$为球的质量），在粗糙水平面上运动，开始时球质心速度为$v_{c0}$，初角速度为$\omega_0$，方向如图所示（垂直纸面向外），摩擦系数$\mu$，求球到开始纯滚动所需的时间及纯滚动时质心的速度&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;../../assets/post/pure_scrolling/img.svg&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;s&gt;选这个奇怪的颜色是因为无论黑白模式都能看清&lt;/s&gt;&lt;/p&gt;
&lt;p&gt;解：&lt;/p&gt;
&lt;p&gt;在平面上取一点$O$作为角动量的参考点，因为摩擦力方向与水平面平行，过$O$点，因此摩擦力矩为0，重力矩球的合外力矩为0，关于$O$点角动量守恒&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[!TIP]&lt;/p&gt;
&lt;h3&gt;重要结论&lt;/h3&gt;
&lt;p&gt;球对参考点$O$的角动量等于对点$O$的质心角动量（公转的角动量）和绕质心轴的角动量（自传的角动量）的矢量和&lt;/p&gt;
&lt;p&gt;因此开始时角动量为$mRv_{c0}-J\omega_0$，（注意$\omega_0\text{和}Rv_{c0}$的方向相反，所以要加负号，取垂直纸面向里为正方向&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;[!NOTE]&lt;/p&gt;
&lt;h3&gt;纯滚动条件&lt;/h3&gt;
&lt;p&gt;表面线速度等于角速度叉乘半径 $v=\omega \times R$&lt;/p&gt;
&lt;p&gt;表面线速度等于球质心速度 $v=v_c$&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;因此：开始纯滚动时角动量为$mRv_c+J\omega$&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
mRv_{c0}-J\omega_0 &amp;amp;= mRv_c + J\omega &amp;amp;\text{ 角动量守恒}  \
v_c-v_{c0} = - \frac{J}{mR} ( \omega_0 + \omega ) &amp;amp;= -\frac{2}{3}R ( \omega_0 + \omega ) &amp;amp;\text{ 速度改变量} \
v_c&amp;amp;=R\omega &amp;amp;\text{ 纯滚动条件}
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;可解得
$$
v_c=\frac{3}{5}v_{c0}-\frac{2}{5}R\omega_0
$$&lt;/p&gt;
&lt;p&gt;摩擦加速度$\mu g$&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
v_c &amp;amp;= v_{c0}-\mu g t \
t&amp;amp;=\frac{2}{5} \frac{v_{c0} + R \omega_0}{\mu g}
\end{aligned}
$$&lt;/p&gt;
</content:encoded></item><item><title>常系数(非)齐次线性微分方程</title><link>https://alkaid114.github.io/posts/const_coefficient_diff_equa/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/const_coefficient_diff_equa/</guid><pubDate>Thu, 09 Jan 2025 18:25:47 GMT</pubDate><content:encoded>&lt;h2&gt;齐次线性微分方程求通解&lt;/h2&gt;
&lt;p&gt;称$\large y^{(n)}+a_{n-1}y^{(n-1)}+\cdots +a_{1}y^{\prime}+a_{0}y=0$为常系数齐次线性微分方程&lt;br /&gt;
$\large \lambda ^{n}+a_{n-1}\lambda ^{n-1}+\cdots +a_{1}\lambda +a_{0}=0$为它的特征方程&lt;/p&gt;
&lt;h3&gt;特征值四种情况&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;$\large \lambda$是单实特征根，则$\large y=e^{\lambda x}$ (基础解系)&lt;/li&gt;
&lt;li&gt;$\large \lambda$是$\large k$重实特征根，则基础解系中的$\large k$个解$\large y_1=e^{\lambda x},y_2=xe^{\lambda x},\cdots,y_k=x^{k-1}e^{\lambda x}$&lt;/li&gt;
&lt;li&gt;$\large \lambda=\alpha \pm i\beta$是单复特征根，则方程基础解系中对应的两个解$\large y_1=e^{\alpha x}\cos {\beta x},y_2=e^{\alpha x}\sin{\beta x}$&lt;/li&gt;
&lt;li&gt;$\large \lambda=\alpha \pm i\beta$是$\large k$重复特征根，则对应$\large 2k$个解&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;$$
\begin{aligned}
\large y_1=e^{\alpha x}\cos{\beta x}&amp;amp;\large,y_2=e^{\alpha x}\sin{\beta x}  \
\large xe^{\alpha x}\cos{\beta x}&amp;amp;\large,xe^{\alpha x}\sin{\beta x} \
\large \cdots&amp;amp;\large,\cdots \
\large x^{k-1}e^{\alpha x}\cos{\beta x}&amp;amp;\large,x^{k-1}e^{\alpha x}\sin{\beta x}
\end{aligned}
$$&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[!TIP]
由欧拉公式$\large e^{i\theta}=\cos{\theta} \pm i\sin{\theta}$ 得出&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;[!NOTE]&lt;/p&gt;
&lt;p&gt;例题：&lt;br /&gt;
&lt;strong&gt;求$\large y^{\prime \prime} +3y^{\prime}+2y=0$的通解&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;解：特征方程$\large \lambda ^{2}+3\lambda +2=0$&lt;br /&gt;
特征根为$\large \lambda_{1}=-1,\lambda_2=-2$&lt;br /&gt;
故通解为$\large y=C_{1}e^{-x}+C_{2}e^{-2x}$&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;[!NOTE]
例题：&lt;br /&gt;
&lt;strong&gt;求$\large y^{\prime \prime} +2y^{\prime}+y=0$的通解&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;解：特征方程$\large \lambda ^{2}+2\lambda +1=0$&lt;br /&gt;
特征根为$\large \lambda_{1}=\lambda_2=-1$&lt;br /&gt;
故通解为$\large y=C_{1}e^{-x}+C_{2}xe^{-x}$&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;[!NOTE]
例题：&lt;br /&gt;
&lt;strong&gt;求$\large y^{\prime \prime} +y=0$的通解&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;解：特征方程$\large \lambda ^{2}+1=0$&lt;br /&gt;
特征根为$\large \lambda_{1}=i,\lambda_2=-i$&lt;br /&gt;
($\large \alpha = 0,\beta = 1$ 代入公式)&lt;br /&gt;
故通解为$\large y=C_{1}\cos{x}+C_{2}\sin{x}$&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;非齐次&lt;/h2&gt;
&lt;p&gt;称$\large y^{(n)}+a_{n-1}y^{(n-1)}+\cdots +a_{1}y^{\prime}+a_{0}y=f(x)$为常系数非齐次线性微分方程&lt;br /&gt;
区别就是右边的0变成了关于x的函数&lt;/p&gt;
&lt;h3&gt;求通解&lt;/h3&gt;
&lt;p&gt;方法：非齐次方程特解加对应的齐次方程通解（跟线代里学的线性方程组一样）&lt;/p&gt;
&lt;h3&gt;求特解&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;$\large f(x)$多项式型&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;设$\large f(x)=P_n(x)$&lt;/p&gt;
&lt;p&gt;$\large k$为0作为该方程特征根的重数，0不是特征根则重数为0，$\large k=0$&lt;/p&gt;
&lt;p&gt;可设特解$\large y^{\ast}=x^{k}Q_n(x)$&lt;/p&gt;
&lt;p&gt;$\large Q_n(x)=a_nx^{n}+\cdots+a_1x+a_0$&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[!NOTE]
例题：&lt;br /&gt;
&lt;strong&gt;求$\large y^{\prime \prime} -y^{\prime}=x^{2}$特解&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;解：设$\large y^{\ast}=ax^{3}+bx^{2}+cx+d, y^{\ast \prime}=3ax^{2}+2bx+c,y^{\ast \prime \prime}=6ax+2b$&lt;br /&gt;
(设$\large ax^{3}$是因为等号右侧最高次为$\large x^{2}$，左侧最低阶导数为1阶，$\large ax^{3}$求导一次得$\large 3ax^{2}$)&lt;br /&gt;
代入方程，$\large 6ax+2b-3ax^{2}-2bx-c=x^{2}$&lt;br /&gt;
解出$\large a,b,c$ 得特解&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;$\large f(x)$非多项式型&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;一般可设$\large f(x)=P_{n}(x)e^{\alpha x}\cos{\beta x}+Q_{m}(x)e^{\alpha x}\sin{\beta x}$&lt;/p&gt;
&lt;p&gt;$\large P_{n}(x)$和$\large Q_{m}(x)$为多项式&lt;/p&gt;
&lt;p&gt;特解为$\large y^{\ast}=x^{k}\left [ \tilde{P} _{t}(x)e^{\alpha x}\cos{\beta x}+\tilde{Q} _{t}(x)e^{\alpha x}\sin{\beta x}\right ]$&lt;/p&gt;
&lt;p&gt;$\large k$为$\large \alpha \pm i\beta$作为特征根时的重数且$\large t=\max \left { n,m \right }$&lt;/p&gt;
&lt;p&gt;$\large k$分为两种情况&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;若$\large \alpha \pm i\beta$为方程的$\large n$重特征根，则$\large k=n$，特解中要多乘$\large x^{k}$&lt;/li&gt;
&lt;li&gt;若$\large \alpha \pm i\beta$不是特征根则重数为0，则$\large k=0$，也就是乘$\large x^{0}=1$&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;所以解特解的思路就变成了先将$\large f(x)$化成$\large P_{n}(x)e^{\alpha x}\cos{\beta x}+Q_{m}(x)e^{\alpha x}\sin{\beta x}$的形式，进而就求得了$\large \alpha,\beta$的值，得$\large k$的值为$\large \alpha \pm i\beta$作为方程特征根时的重数&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[!NOTE]
例题：&lt;br /&gt;
&lt;strong&gt;求$\large y^{\prime \prime} +y\prime=x-2+3e^{2x}$特解&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;其实是分成了两个方程$\large x-2$和$\large 3e^{2x}$分别求特解再相加&lt;br /&gt;
解：特征方程$\large \lambda ^{2}+\lambda=0$&lt;br /&gt;
特征根为$\large \lambda_1=0,\lambda_2=-1$&lt;br /&gt;
对于$\large x-2$的部分&lt;br /&gt;
$\large \alpha \pm i\beta=0\pm i0=0$是1重特征根，所以$\large k_1 = 1$&lt;br /&gt;
所以设$\large y^{\ast}_1=x^{k_1}\left ( ax+b \right )=x\left ( ax+b \right )$&lt;br /&gt;
对于方程$\large 3e^{2x}$的部分&lt;br /&gt;
$\large \alpha \pm i\beta=2\pm i0=2$，不是$\large 3e^{2x}$的特征根，所以重数为0，$\large k_2=0$&lt;br /&gt;
所以设$\large y^{\ast}_2=x^{k_2}\left [ ce^{2x}\cos{0x}+ae^{2x}\sin{0x} \right ]=ce^{2x}$&lt;br /&gt;
因此$\large y^{\ast}=y_1^{\ast}+y_2^{\ast}=x(ax+b)+ce^{2x}$&lt;br /&gt;
代入求解$\large a,b,c$即可&lt;/p&gt;
&lt;/blockquote&gt;
</content:encoded></item><item><title>LaTex怎么将上下标放在正上和正下方</title><link>https://alkaid114.github.io/posts/tex_superscript/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/tex_superscript/</guid><pubDate>Sat, 04 Jan 2025 22:35:42 GMT</pubDate><content:encoded>&lt;h2&gt;若为数学符号&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;\sum\limits_{i=1}^{n}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;$\large \sum\limits_{i=1}^{n}$&lt;/p&gt;
&lt;h2&gt;若为普通符号&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;\mathop{\theta}\limits_{i=1}^{n}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;$\large\mathop{\theta}\limits_{i=1}^{n}$&lt;/p&gt;
</content:encoded></item><item><title>微积分上册常用公式</title><link>https://alkaid114.github.io/posts/calculus1_common_formulas/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/calculus1_common_formulas/</guid><pubDate>Thu, 02 Jan 2025 13:37:18 GMT</pubDate><content:encoded>&lt;h2&gt;1. 常见等价无穷小&lt;/h2&gt;
&lt;p&gt;$$
\begin{aligned}
\large ln\left(1+x\right)&amp;amp;\large\sim\ x \\
\large log_a\left(1+x\right)&amp;amp;\large\sim\frac{x}{lna} \\
\large1-cosx &amp;amp;\large\sim\frac{1}{2}x^2 \\
\large x-sin{x}&amp;amp;\large\sim\frac{1}{6}x^3 \\
\large\left(1+x\right)^\alpha-1&amp;amp;\large\sim\alpha\ x \\
\large x-arctan{x}&amp;amp;\large\sim\frac{1}{3}x^3 \\
\large e^x-1&amp;amp;\large\sim\ x \\
\large a^x-1&amp;amp;\large\sim\ xlna \\
\large tan{x}-x&amp;amp;\large\sim\frac{1}{6}x^3 \\
\large arcsin{x}-x&amp;amp;\large\sim\frac{1}{6}x^3 \\
\large tan{x}-sin{x}&amp;amp;\large \sim\frac{1}{2}x^3
\end{aligned}
$$&lt;/p&gt;
&lt;h2&gt;2. 高中大概率没讲过的导数&lt;/h2&gt;
&lt;p&gt;$$
\begin{aligned}
\large \left(arctan{x}\right)^\prime&amp;amp;\large=\frac{1}{1+x^2} \\
\large \left(arcsin{x}\right)^\prime&amp;amp;\large=\frac{1}{\sqrt{1-x^2}} \\
\large \left(arccos{x}\right)^\prime&amp;amp;\large=\frac{-1}{\sqrt{1-x^2}} \\
\large \left(cot{x}\right)^\prime&amp;amp;\large=\frac{-1}{sin^2x}
\end{aligned}
$$&lt;/p&gt;
&lt;h2&gt;3. 高阶导数&lt;/h2&gt;
&lt;p&gt;$$
\begin{aligned}
\large\left(x^\alpha\right)^{\left(n\right)}&amp;amp;\large=\alpha\left(\alpha-1\right)\ldots\left(\alpha-n+1\right)x^{\alpha-n} \\
\large \left(\frac{1}{x}\right)^{\left(n\right)}&amp;amp;\large=\frac{\left(-1\right)^nn!}{x^{n+1}} \\
\large \left(a^x\right)^{\left(n\right)}&amp;amp;\large=\left(lna\right)^na^x \\
\large \left(sin{x}\right)^{\left(n\right)}&amp;amp;\large=sin{\left(x+\frac{n\pi}{2}\right)} \\
\large \left(cos{x}\right)^{\left(n\right)}&amp;amp;\large=cos{\left(x+\frac{n\pi}{2}\right)}
\end{aligned}
$$&lt;/p&gt;
&lt;h3&gt;高阶导莱布尼茨公式&lt;/h3&gt;
&lt;p&gt;用于解决一些两式相乘求高阶导，k大于等于某值后其中一导数为零&lt;/p&gt;
&lt;p&gt;$\large\left(f\left(x\right)g\left(x\right)\right)^{\left(n\right)}=\sum\limits_{k=0}^{n}C_n^kf\left(x\right)^{\left(k\right)}g\left(x\right)^{\left(n-k\right)}$&lt;/p&gt;
&lt;h2&gt;4. 曲率&lt;/h2&gt;
&lt;p&gt;$$
\begin{aligned}
\large K=\frac{ \left|y^{\prime\prime}\right|}{\left(1+y^{\prime2}\right)^\frac{3}{2}}
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;曲率半径 $\large R=\frac{\large 1}{\large K}$&lt;/p&gt;
&lt;h2&gt;5. 不定积分&lt;/h2&gt;
&lt;p&gt;$$
\begin{aligned}
\large \int\frac{1}{sin^2x}dx&amp;amp;\large=\int{csc}^2{x}dx=-cot{x}+C \\
\large \int{\frac{1}{\sqrt{x^2+a^2}}dx}&amp;amp;\large=ln\left(x+\sqrt{x^2+a^2}\right)+C \\
\large \int{sec{x}dx}&amp;amp;\large=ln\left|sec{x}+tan{x}\right|+C \\
\large \int{\frac{1}{\sqrt{x^2-a^2}}dx}&amp;amp;\large=ln\left|x+\sqrt{x^2-a^2}\right|+C \\
\large \int s e c{x}tan{x}dx&amp;amp;\large=sec{x}+C \\
\large \int c o t{x}dx&amp;amp;\large=ln\left|sin{x}\right|+C \\
\large \int c s c{x}dx&amp;amp;\large=ln\left|csc{x}-cot{x}\right|+C \\
\large \int c s c{x}cot{x}dx&amp;amp;\large=-csc{x}+C
\end{aligned}
$$&lt;/p&gt;
&lt;h2&gt;6. 积分求导法则&lt;/h2&gt;
&lt;p&gt;$\large \left(\int_{a}^{g\left(x\right)}f\left(t\right)dt\right)^{\prime}=f\left(g\left(x\right)\right)g^\prime\left(x\right)\ \ \ \text{a为常数}$&lt;/p&gt;
</content:encoded></item><item><title>C printf() 的使用</title><link>https://alkaid114.github.io/posts/c_printf/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/c_printf/</guid><pubDate>Fri, 15 Dec 2023 18:19:25 GMT</pubDate><content:encoded>&lt;h2&gt;1. 转换说明符&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;%s&lt;/code&gt; 字符串&lt;/p&gt;
&lt;p&gt;&lt;code&gt;%a&lt;/code&gt; 浮点数、十六进制bai数字和p-记法(C99)&lt;/p&gt;
&lt;p&gt;&lt;code&gt;%c&lt;/code&gt; 一个字符&lt;/p&gt;
&lt;p&gt;&lt;code&gt;%d&lt;/code&gt; 有符号十进制整数，&lt;code&gt;%ld&lt;/code&gt;/&lt;code&gt;%lld&lt;/code&gt;为长整型&lt;/p&gt;
&lt;p&gt;&lt;code&gt;%e&lt;/code&gt; 浮点数、e-记数法&lt;/p&gt;
&lt;p&gt;&lt;code&gt;%f&lt;/code&gt; 浮点数、十进制记数法&lt;/p&gt;
&lt;p&gt;&lt;code&gt;%g&lt;/code&gt; 根据数值不同自动选择&lt;code&gt;％f&lt;/code&gt;或&lt;code&gt;％e&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;%i&lt;/code&gt; 有符号十进制数(与&lt;code&gt;％d&lt;/code&gt;相同)&lt;/p&gt;
&lt;p&gt;&lt;code&gt;%o&lt;/code&gt; 无符号八进制整数&lt;/p&gt;
&lt;p&gt;&lt;code&gt;%p&lt;/code&gt; 指针&lt;/p&gt;
&lt;p&gt;&lt;code&gt;%u&lt;/code&gt; 无符号十进制整数&lt;/p&gt;
&lt;p&gt;&lt;code&gt;%x&lt;/code&gt; 使用十六进制数字0f的无符号十六进制整数&lt;/p&gt;
&lt;p&gt;&lt;code&gt;%%&lt;/code&gt; 打印一个百分号&lt;/p&gt;
</content:encoded></item><item><title>解决禁用Microsoft商店自动更新后wsappx仍然运行的问题</title><link>https://alkaid114.github.io/posts/ms_store_wsappx/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/ms_store_wsappx/</guid><pubDate>Fri, 06 May 2022 17:38:45 GMT</pubDate><content:encoded>&lt;p&gt;&lt;em&gt;&lt;strong&gt;解决禁用Microsoft商店自动更新后wsappx仍然运行的问题&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;解决方法：&lt;/p&gt;
&lt;p&gt;在管理员PowerShell中输入命令卸载应M用商店&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Get-AppxPackage *WindowsStore*
Remove-AppxPackage
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;再输入命令，重新安装商店&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;get-appxpackage *store*
remove-Appxpackage
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;再执行以下命令&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;add-appxpackage -register &quot;C:\Program Files\WindowsApps\*Store*\AppxManifest.xml&quot; -disabledevelopmentmode
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;之后打开商店再关闭自动更新即可&lt;/p&gt;
</content:encoded></item><item><title>解决win10资源管理器(桌面任务栏)频繁假死</title><link>https://alkaid114.github.io/posts/win10_explorer_frozen/</link><guid isPermaLink="true">https://alkaid114.github.io/posts/win10_explorer_frozen/</guid><pubDate>Fri, 06 May 2022 10:47:43 GMT</pubDate><content:encoded>&lt;p&gt;&lt;strong&gt;最近装了ltsc2021,发现桌面和任务栏频繁假死，且无法呼出任务管理器，只能注销重新登录，搜索了好久终于在Microsoft社区找到了解决办法&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在管理员Powershell中，输入以下两条命令：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$manifest = (Get-AppxPackage Microsoft.WindowsStore).InstallLocation + &apos;\AppxManifest.xml&apos; ; Add-AppxPackage -DisableDevelopmentMode -Register $manifest
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;Get-AppXPackage -AllUsers |Where-Object {$_.InstallLocation -like &quot;*SystemApps*&quot;}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;重启计算机即可。&lt;/p&gt;
&lt;p&gt;社区问题链接：&lt;a href=&quot;https://answers.microsoft.com/zh-hans/windows/forum/all/win10%E8%B5%84%E6%BA%90%E7%AE%A1%E7%90%86%E5%99%A8/41e4a6f7-7cd9-475e-8949-7ed50328949b?auth=1&quot;&gt;传送门&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;!-- &lt;img src=&quot;https://cdn.jsdelivr.net/gh/Alkaid114514/Pictures/imgs/202205060738695.png&quot; alt=&quot;&quot; /&gt; --&amp;gt;&lt;/p&gt;
</content:encoded></item></channel></rss>