Distribution Cheetsheet

分布 分布是一个高阶函数。 二项分布:$B:\Z\Rightarrow\R\Rightarrow(\Z\Rightarrow\R)=(n,p)\mapsto x\mapsto{n\choose x}p^x(1-p)^{n-x}$ ; 超几何分布:$H:\Z\Rightarrow\Z\Rightarrow\Z\Rightarrow(\Z\Rightarrow\R)=(n,K,N)\mapsto x\mapsto\frac{{K\choose x}{N-K\choose n-x}}{N\choose n}$ ; 正态分布:$N:\R\Rightarrow\R\Rightarrow(\R\Rightarrow\R)=(\mu,\sigma)\mapsto x\mapsto\frac{1}{\sigma\sqrt{2\pi}}\exp(-\frac{(x-\mu)^2}{2\sigma^2})$ . 期望 $$ {\rm E}:({\rm Dom}\Rightarrow\R)\Rightarrow\R=f\mapsto x\mapsto\int_{\rm Dom}xf(x){\rm d}x $$ ${\rm E}(l\circ f)=l\circ{\rm E}(f)$ 对于线性映射 $l$ . ${\rm E}(x\mapsto f(x)g(x))=E(f)E(g)$ 当 $f$ 与 $g$ 无关。 方差 $$ \begin{align*} {\rm D}&:({\rm Dom}\Rightarrow\R)\Rightarrow\R\newline &=f\mapsto x\mapsto \int_{\rm Dom}(x-{\rm E}(f))^2{\rm d}x\newline &=f\mapsto {\rm E}((x\mapsto x^2)\circ f)-{\rm E}(f)^2 \end{align*} $$ ${\rm D}((x\mapsto x+a)\circ f)={\rm D}(f)$ . ${\rm D}((x\mapsto ax)\circ f)=a^2{\rm D}(f)$ ....

October 14, 2024 · 1 min · 132 words

歪诗一首

近日读网络小说《赛博英雄传》有感作。 沁园春 人死神留,万代千秋,本性难移。 纵水泥为肉,钢筋作骨,捉鳖揽月,不改其一。 僭主高踞,营私建党,每罄南山未可极。 无妨便,即易筋换血,尽算天机。 方得自在毫厘。智人种,当绝禽兽习。 教暴秦夺魄,懦夫增气,中天不济,万世风激。 旧法尘封,铅华尽洗,我以六龙回日低。 循苦旅,抵群星所在,寰宇雄奇。

October 13, 2024 · 1 min · 10 words

通量和散度

通量 通量 (Flux) 用以描述一个向量场“穿过”曲面的部分的大小。 向量场 $\bold A$ 在曲面 $\Sigma$ 上的通量 $\Phi_{\bold A}(\Sigma)$ 定义为: $$ \Phi_{\bold A}(\Sigma)=\iint_\Sigma\bold A\cdot\bold n{\rm d}S $$ 其中 $\bold n$ 为曲面在每一点上的单位法向量。一点上的单位法向量是自这一点垂直曲面向外的单位向量。 上述形式的通量是标量。 混乱邪恶 在一些情境下,通量还可以指向量场在曲面上某一点的向量在其单位法向量上的投影。 相当于上文中 $\bold A\cdot\bold n$ . 我们不采用这种说法。在需要时,用「通量密度」代替。 散度 散度 (Divergence) 用以描述向量场中的某一点附近的向量“趋向”或“远离”该点的趋势。标量。 向量场 $\bold A$ 在点 $x$ 的散度 ${\rm div}\bold A(x)$ 定义为: $$ {\rm div}\bold A(x)=\lim_{\delta V\rightarrow{x}}\frac{\Phi_\bold A(\Sigma)}{|\delta V|} $$ 其中 $\Sigma$ 是包含点 $x$ 的一个封闭曲面, $\delta V$ 为该曲面内的微小体元, $|\delta V|$ 为此微小体元的体积。上述定义可直观理解为以 $x$ 为球心的无穷小球上的通量。 向量场 $\bold A$ 的散度场记作 $\nabla\cdot\bold A$ ....

October 13, 2024 · 1 min · 93 words

Programming Robot

What is a program? 设想您编写了一个程序但不产生任何 I/O 操作,显然此程序在运行时和不运行时对我们而言没有任何区别。这样的程序除占用系统资源以外不能完成任何工作。 一个简单的程序的功能可以是将 I/O 操作映射到 I/O 操作上,这样的计算模型可以简单地表达为: $$ {\rm Program}:{\rm IO}\Rightarrow{\rm IO} $$ I/O 操作是 Input / Output 的简写。程序对一切外部资源的访问都是 I/O 操作,包括控制台输入输出、文件读写、网络请求、驱动硬件等。 但是,不难发现,上述抽象似乎存在有一个问题:程序似乎没有“记忆”。只要输入的 I/O 操作相同,输出的 I/O 操作也相同。 和数学中的“函数”很像?没错!在计算机编程中,这类“输入相同,输出总是相同,无状态”的函数被称为纯函数,有别于您可能编写过的,用以执行代码而修改外部状态的副作用函数或过程。 如果我们想要让程序“记住”之前的结果,就需要引入状态。在很多程序设计情景中,您可以粗暴地认为变量就是状态,除: 不可变变量 函数参数 以外。 每次程序处理一个输入,都对应地读取并修改状态,以此实现更普通意义上的功能。 有限状态机 (Finite State Machine, FSM) 有限状态机是一种常用于工业控制和游戏开发的计算模型。该模型定义机器可能处于的有限个状态,并根据当前状态处理输入和转移到下一个状态。 $$ {\rm Program}:({\rm State},{\rm IO})\Rightarrow({\rm State},{\rm IO}) $$ 设想您有一台自动售货机来贩售可乐。我们使用有限状态机对此程序进行建模: 程序带有两个状态 $S_1$ 和 $S_2$ , 分别表示未投币和已投币; $S_1$ 在投币时转移为 $S_2$ , 其他时候保持不变; $S_2$ 在取货时吐出一瓶可乐,同时转移为 $S_1$ , 其他时候保持不变。 上述逻辑表达为以下伪代码(JavaScript): let state = "未投币" const 吐出可乐 = () => { /* some implementation */ } const 未投币 = (evt) => { switch (evt) { case "投币": state = "已投币" } } const 已投币 = (evt) => { switch (evt) { case "取货": { state = "未投币" 吐出可乐() } } } const 售货机 = (evt) => { switch (state) { case "未投币": 未投币(evt) case "已投币": 已投币(evt) } } 状态依赖地狱 我们通过引入状态成功解决了问题。您现在可以通过不断添加状态来构建更加复杂的程序了。...

September 26, 2024 · 2 min · 246 words

Y-组合子及其推导过程

在传统方法下,我们很难在无类型 $\lambda$ - 演算这样的匿名上下文中进行函数的递归。 为解决此问题,我们希望有一个函数用以“得到函数自身”,即为 Y - 组合子。 Y - 组合子使用 $\lambda$ - 演算定义为: $$ Y=\lambda f.(\lambda x.f(x\space x))\space(\lambda x.f(x\space x)) $$ Y - 组合子应用于函数: $$ \begin{align} Y\space f &=(\lambda x.f(x\space x))\space(\lambda x.f(x\space x))\newline &=f\space((\lambda x.f(x\space x)\space(\lambda x.f(x\space x)))\newline &=f(Y\space f) \end{align} $$ 即进行两次 $\beta$ - 规约并将 (1) 代入 (3)。最终我们得到: $$ Y\space f=f\space(Y\space f) $$ Y - 组合子或称不动点组合子,因其将函数映射到其不动点上。 若 $f\space x=x$ ,则称 $x$ 是 $f$ 的一个不动点。 推导 Y - 组合子的推导过程实质上就是解不动点方程 $Y\space f=f\space(Y\space f)$ 的过程。...

September 21, 2024 · 1 min · 126 words

FRC Programming: Start From Zero

先决条件 安装有 Windows 操作系统的 x86_64 计算机 网络环境 配置开发环境 根据官方教程安装「WPILib」与「FRC Game Tools」。这分别是开发和部署 FRC 程序所使用的工具。 安装「Phoenix Tuner X」。 2.1 您可以从 Microsoft Store 中安装;或 2.2 下载离线安装包。 配置项目 打开「FRC VS Code」,运行 WPILib: Create a new project 命令(为打开命令输入对话,请按下 Ctrl+Shift+P 快捷键)。根据提示,在GUI中操作。项目类型选择「Command Robot」。 安装商家依赖库,这使得我们能正确驱动第三方商家的产品。您可以运行 WPILib: Manage Vendor Libraries 命令,选择在线安装,并输入商家提供的依赖描述文件链接。对于6353,常用 CTRE 提供的产品,因此可以前往其官网获取下载连接。 现在 FRC 程序的开发工作准备就绪。请注意,对于新的项目,您需要重复上述步骤。 部署代码 为了将代码部署到机器人,您需要检查机器人的电路(见后续章节)并开机。 您可以有线或无线连接机器: 有线连接:将打印机线的 USB 口插入计算机,PIN5 口插入「RoboRIO」; 无线连接:将无线路由器通过网线连接「RoboRIO」,待其发出提示音后连接无限局域网。 启动「FRC Driver Station」,待面板显示连接成功后,运行 WPILIb: Deploy Robot Code 命令,或在项目目录下执行 ./gradlew deploy 。 运行和调试 在「FRC Driver Station」中,您可以通过 GUI 控制机器人的启用/禁用,并切换程序模式。...

September 10, 2024 · 1 min · 102 words

epsilon-delta极限定义的思维过程

Attempt 1 “极限就是越来越近。” 定义 $\lim_{x\rightarrow a^-}f(x)=L$ iff: $\forall \Delta_x’\le\Delta_x$, $|f(a-\Delta_x’)-L|\le|f(a-\Delta_x)-L|$. 依样定义右极限,并定义左右极限相等时极限存在。 容易发现根据上述定义,$\lim_{x\rightarrow+\infin}\frac{1}{x}$ 鉴于在 $\R^+$ 上单调减,其极限可以是任意非正实数。 这不是我们所期待的。我们希望上述极限定义为 $0$ 。 Attempt 2 “极限是越来越近,且可以无限接近。” 定义 $\lim_{x\rightarrow a^-}f(x)=L$ iff: $\forall \Delta_x’\le\Delta_x$ , $|f(a-\Delta_x’)-L|\le|f(a-\Delta_x)-L|$; and $\forall \Delta_y\in\R^+$, $\exist\Delta_x$ s.t. $|f(a-\Delta_x)-L|\le\Delta_y$. 上述定义成功排除了多余的极限值。但是,可以发现,鉴于其对函数整个定义域上的单调性作要求,这似乎严格地排除了过多函数,使得定义不甚实用。 我们希望得到能使类似于 $\lim_{x\rightarrow0}\cos x=1$ 的极限定义(而非现在的未定义)。 Attempt 3 “在 $a$ 上的极限是在一个包含 $a$ 的范围内越来越近,且可以无限接近。” 定义 $\lim_{x\rightarrow a^-}f(x)=L$ iff $\exist\Delta_0\in\R^+$ s.t.: $\forall0\lt\Delta_x’\le\Delta_x<\Delta_0$ , $|f(a-\Delta_x’)-L|\le|f(a-\Delta_x)-L|$; and $\forall \Delta_y\in\R^+$, $\exist\Delta_x\le\Delta_0$ s.t. $|f(a-\Delta_x)-L|\le\Delta_y$. 上述定义允许更多函数的极限被定义。 这似乎是完备的。但是,知晓数列极限的定义,依然能容易地给出定义的不足之处:此定义对于不断振荡——不单调,但在接近确定值的函数未能给出定义。例如,我们希望像 $\lim_{x\rightarrow0}x\sin\frac{1}{x}$ 这样的极限被定义为 $0$ ,而非未定义。 Attempt 4 “在 $a$ 上的极限是在一个包含 $a$ 的范围内可以无限接近,且对于某个值,总存在一个更小的值使得在更小的值以后的所有函数值都要更近。”...

September 10, 2024 · 1 min · 145 words

`serde_derive` amazingly smart

Within context like this: #[derive(Serialize, Deserialize)] #[serde(transparent)] pub struct Id<T: Register> { id: &'static str, _phantom: PhantomData<T>, } serde_derive intelligently recognizes that there is no need to serialize _phantom and the #[serde(transparent)] flag simply works.

July 22, 2024 · 1 min · 35 words

Helloworld

Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! HELLO WORLD hello world #include<stdio.h> main(){ printf("Hello, world!\n"); return 0; } ${\rm e}^{i\pi}=-1$

June 16, 2024 · 1 min · 27 words