Daily Surf [daily-surf]
Daily Surf [daily-surf]
每个人都是独一无二的笨蛋 看到独一无二的宿命, 向另一个笨蛋提枪冲锋 死去, 照耀着独一无二的光荣 装好 侧边栏字体大小 侧边栏文件树条目 文件 Tab 字体大小 如果你是一个没有定制化需求的 Sagemath 用户或者单纯地使用 Jupyter Notebook 连接一些与 Sagemath 无关的服务, 你遇到本文所关心问题的可能性是很低的, 这个主要有以下两个原因. Sagemath Jupyter Notebook 在 Visual Studio Code 上几乎不能使用. 这是因为, 所有由 MathJax 提供渲染的公式都无法呈现, 甚至连 Cell 也不出现. 于是最稳妥的做法就变成了使用浏览器访问 Jupyter Notebook. Jupyter Notebook 的主题设计非常混乱, 常用主题位于 jupyterthemes 包, 但是这个包的文档和使用示例并不适用于 Sagemath. 这两点使得问题看上去不太容易. 因为一般的, 如果用户使用 Visual Studio Code 访问 Jupyter Notebook 就完全不需要担心主题问题, 于是相应的可能在互联网上存在的解决方案就会变少. 关于第二点, 如果尝试在 Jupyter Notebook 当中执行下面这样的程序 确实能够切换到 这样的做法, 这里的 最直接的方法是, 找到像下面这样的编译后的样式文件 然后覆盖到 这样你就得到了一个永久生效的样式设置. 随后可以通过修改 从编译后的样式文件中我们可以看到, 一个常见的需求是, 对已经存在的 commit 历史作出修改. 如果目标 commits 都存在于本地分支, 那么一组 这里只说方法. 哪怕是对于已经提交的 commit, 修改 commits 还是一样的用 虽然后者目前已经被标记为 deprecated. $\gdef\Mat{\operatorname{Mat}}$
$\gdef\vol{\operatorname{vol}}$
$\gdef\diag{\operatorname{diag}}$
$\gdef\d{\operatorname{d}}$
$\gdef\R{\mathbf{R}}$
$\gdef\Q{\mathbf{Q}}$ 一个矩阵 $A \in \Mat_{n \times n}(\R)$ 所确定的线性映射 $\alpha: \R^n \to \R^n$ 作用在 $X \in \R^n$ 上, 此映射对 $X$ 的 (有向) 体积 $\vol(X)$ 的缩放量为 $\det A$. 即 $\vol(\alpha X) = \det A \cdot \vol(X)$. 特别地取 $A = \diag(a,b)$, 然后乘单位圆 $u^2+v^2=1$ 上一点构成的向量 $(u,v)$, 得到满足椭圆方程 $\frac{x^2}{a^2}+\frac{y^2}{b^2}=1$ 的 $(x,y)$, 这样便能看出椭圆的面积 $S = \det A \cdot \pi$. 设 $\omega$ 是一个 $k$-形式, 它的两次微分 $\d(\d \omega) = 0$. 另一方面, 考虑一个有向流形 $\Omega$ 和它的边缘 $\partial \Omega$, 我们知道 $\partial(\partial M) = \varnothing$. 这两件事相互对偶. 考虑数域 $K=\Q(\alpha_1, \cdots, \alpha_i)$ 的一个存在于上的历史原因是, 在适当的 $K$ 中考虑能够使原本在 $\Q$ 上无法分解的 Diophantus 方程因式分解. 如 $\Q(\sqrt{-7})$ 能使 Ramanujan–Nagell 方程 $x^2=2^n-7$ 改写为 $(x+\sqrt{-7})(x-\sqrt{-7})=2^n$. Fermat 方程 $x^n+y^n=z^n$ 能够在 $\Q(\zeta_n)$ 上分解成 $x^n=(z-y)(z-\zeta_n y) \cdots (z-\zeta_n^{n-1} y)$, 这是 Kummer 提出理想数概念的一个原因. 抛一枚硬币 $n \ge 2$ 次且从不连续出现正面, 这样的可能共有 $F_{n+2}$ 种, 这里的 $F_{n+2}$ 是从零开始的 Fibonacci 数列. 我们把抛 $n$ 次不连续出现正面的可能数记为 $S_n$, 考虑相邻的两次抛硬币, 假设第 $i$ 次掷硬币为正面, 则第 $i+1$ 次掷硬币只能是反面, 这个时候的所有可能为 $S_{n-2}$. 假设第 $i$ 次掷硬币为反面, 则第 $i+1$ 次掷硬币的结果可任意. 因此 $S_n = S_{n-1} + S_{n-2}$, 再利用初值 $S_1$, $S_2$ 就能解出 $S_n$. 根据 这个 Reddit 问题. 首先这项功能来自 Nvidia Overlay, Intel 用户可以通过 我们姑且按照该 Reddit 问题的某个回答这么称呼此信息. 这一证明最早似乎来自 Michael Rozman. 除此之外 MSE 上也有极类似的回答, 见 此处. M. Rozman, Evaluate Gaussian integral using differentiation under the integral sign, Course notes for Physics 2400 (UConn), Spring 2016. $\gdef\R{\mathbf{R}}$
$\gdef\spaces#1{~ #1 ~}$
$\gdef\d{\operatorname{d}}$ 核心技巧来自一个函数 $F(t)$ 的构造. 对 $t \in \R$ 定义如下函数 $$
F(t) \spaces= \int_0^\infty \frac{e^{-t^2(1+x^2)}}{1+x^2} \d x
$$ 容易验证 $F(t)$ 满足 $F(0)=\frac{\pi}{2}$, $F(\infty) = 0$, 以及最关键的 $$
F'(t)
\spaces= \int_0^\infty -2te^{-t^2(1+x^2)} \d x
\spaces= -2te^{-t^2} \int_0^\infty e^{-(tx)^2} \d x
$$ 记高斯积分为 $I$. 这就有 $F'(t) = -2Ie^{-t^2}$, 此时再求 $F'(t)$ 于 $[0, \infty)$, 上的积分, 就能得到 $$
F(\infty)- F(0) \spaces= -2I \int_0^\infty e^{-t^2} \d t \spaces= -2I^2
$$ 于是这给出 $I = \frac{\sqrt\pi}2$. Wolfram 把 Mathematica 的内核 Wolfram Engine 单独拆出来并作为免费软件 1 提供已不是什么新鲜事. 如不考虑实际的交互体验, 至少对于开发者而言, 为最新版 Mathematica 付费这件事基本就意味着只购买了个带官方服务支持的 Wolfram Notebook. Wolfram 引擎能直接使用 Homebrew 或 winget 等包管理器安装, 命令行功能由引擎自带的 Wolfram Script 提供. 虽然能用, 但可想而知体验不会太好. 最早的一个方案是用 Visual Studio Code 和相关 Notebook 插件连接到 Wolfram 引擎, 这样一来比起纯命令行能好上不少, 但是对于习惯了 Mathematica 官方笔记本的用户来说还差点意思. 要是用户不在乎多装一个浏览器以此换来更好的 Notebook 体验, 那么开源的 WLJS 会是一个可供考虑的选择. Augsburg 大学的物理学家 Kirill Vasin 在 2023 年 11 月 16 日发布了 WLJS 的第一个长期版本 2. WLJS 这几个字母是 Wolfram JS Frontend 的缩写, 从技术上说, 它是一个 Electron APP, 如果用户的目的是对于 Mathematica 功能有高度依赖的科研用途, 那么多装一个浏览器的代价自然算不了什么. 另外 WLJS 的引导部分做的很不错, 也有不少很有意思但是 Wolfram Notebook 不具备的功能. 因为各种读者可以想象的原因, 基于网络的面对面文件互传其实是一件经常会遇到的事. 笔者先后尝试过依赖于特定品牌的互传功能, 但时不时会遇到因未知原因导致的传输无法开始的问题. 索性另求他法. 我们假设有设备 $A$, $B$, 且 $A$ 将要发送文件 $F$ 给 $B$, 另可设文件 $F$ 充分大 (如 $\geqslant 1 \text{GB}$). 方案如下. $B$ 联网且开热点, $A$ 连接热点. 随后 $A$ 通过 Termux + miniserve 或其他等效软件在文件 $F$ 所在目录开启本地 HTTP 服务器, 记下 IP. $B$ 使用浏览器访问 IP, 下载文件即可, 此时下载速率依赖于 $B$ 连接到的网络. $\gdef\Z{\mathbf{Z}}$ 设 $\frac1{(1-q)^3} = \sum_{u \ge 0} a_u q^u$,
求 $a_n$. 显然 $a_n$ 同时也是 $x_1+x_2+x_3 = n$
在 $\Z_{\ge 0}$ 上解的个数.
$\gdef\Q{\mathbf{Q}}$
$\gdef\N{\mathbf{N}}$
$\gdef\Z{\mathbf{Z}}$
$\gdef\C{\mathbf{C}}$
$\gdef\A{\mathbb{A}}$
$\gdef\spaces#1{~ #1 ~}$ 代数数即 $\Q$-系数首一多项式的根, 容易看出这也是任意整系数多项式方程的根. 1874 年, Cantor 在文章 “Ueber eine Eigenschaft des Inbegriffes aller reellen algebraischen Zahlen” 中运用多项式高度的概念证明了实代数数的可数性. Cantor 的思路很大程度上可以视为一种数论策略. 他首先想的是对多项式 $P$ 定义一个恰当的高度概念 $H(P) \in \N$, 使得一旦我们固定了正整数 $h$, 则只会存在有限个多项式 $P$ 满足 $H(P) = h$, 且任意多项式都能被某个高度覆盖. 即用高度分类全体多项式的同时又控制了多项式的复杂程度. 随后, 代数基本定理保证给定 $n$ 次多项式, 其根在 $\C$ 上至多只有 $n$ 个, 全体代数数便可以写为可数个有限集的并, 如此证得. 遵循着这种思路, Cantor 给出的高度定义为: $$
H(P) \spaces= \deg P - 1 + \sum_{0 \le i \le n} |a_i|
$$ 反过来, 任给一个整系数多项式 $P$, 我们都能计算他的 $H(P) \in \N$. $\textbf{Lemma.}$ 固定 $h \in \N$, 则集合 $P_h = \{ P \in \Z[x] : H(P) = h \}$ 有限. $\textit{proof.}$ 注意到此时多项式的次数最多是 $H$, 因为至少有一个非零整系数 $a_i$ 使得 $|a_i| \ge 1$. 另一方面, 每个 $a_i$ 也满足 $|a_i| \le H$, 因此一个多项式的所有信息都被正整数 $H$ 控制, 故 $P_h$ 有限. $\textbf{Lemma.}$ 固定 $h \in \N$, 集合 $R_h = \{ z \in \C : P(z) = 0, P \in P_h \}$ 有限. $\textit{proof.}$ 对 $P \in P_h$ 处每一个固定的 $P$ 使用代数基本定理, 便可得到此时的 $z$ 也只有有限多个. $\textbf{Theorem.}$ 代数数只有可数多个. 根据代数数域 $\A$ 的定义之一, 我们知道 $$
\A \spaces= \bigcup_{h \in \N} R_h
$$ 所以 $|\A| = |\N|$, 即可数. $\gdef\spaces#1{~ #1 ~}$ 设 $0 < x_1, x_2, \cdots, x_n < 1$. 试证 $$
x_1^{x_2} + x_2^{x_3} + \cdots + x_n^{x_1} > 1
$$ 利用 Bernoulli 不等式, $(1+\frac{x}{y})^{\frac{1}{x}} \geqslant 1+\frac{1}{y} > \frac{1}{y}$ 得到 $1+\frac{x}{y} > \frac{1}{y^x}$, 即 $y^x > \frac{1}{1+\frac{x}{y}}$. $$
\begin{aligned}
x_1^{x_2} + x_2^{x_3} + \cdots + x_n^{x_1}
&\spaces> \sum_{1 \leqslant i \leqslant n} \frac{1}{1+\frac{x_1}{x_{i+1}}} \\
&\spaces> \sum_{1 \leqslant i \leqslant n} \frac{x_{i+1}}{x_1 + x_2 + \cdots + x_n} \\
&\spaces= 1
\end{aligned}
$$ 此处 $i+1$ 按照 $\Z/n\Z$ 处理. $\gdef\spaces#1{~ #1 ~}$ Young 不等式有许多风格迥然的证明, 最常见的办法可能是使用定积分.
我们在此介绍一种充分利用对数线性化 $\log x \le x -1 $ 的方法, 即 Young 引理.
并展示 Young 不等式与其他常见不等式如何作为此结果的直接推论. 对数函数 $\log$ 最为特殊的性质可以说就是 $\log a^b = b\log a$ 和 $\log a b = \log a + \log b$. 另一方面, 我们知道对于非负的 $X,Y$, 不等式 $X \le Y$ 等价于 $\log \frac XY \le 0$. 如果我们希望充分利用这三点, 那么就可以试着去考虑 $$ \log \frac{f_1^{p_1}f_2^{p_2}}{g^{p_1+p_2}} \spaces= p_1\log\frac{f_1}g \spaces+ p_2\log\frac{f_2}g $$ 现在对右侧使用对数的线性化, 得到 $$
\begin{aligned}
\log \frac{f_1^{p_1}f_2^{p_2}}{g^{p_1+p_2}}
&\spaces\le p_1\Big(\frac{f_1}g-1\Big) \spaces+ p_2\Big(\frac{f_2}g-1\Big) \\
&\spaces= g^{-1}(p_1f_1+p_2f_2) - (p_1+p_2)
\end{aligned}
$$ 我们当然希望 $\log\frac\Box\Box \le 0$. 这就是说, 如果有关于加法和乘法的条件 $$
p_1f_1+p_2f_2 \spaces\le (p_1+p_2)g
$$ 那么可以推出 $f_1^{p_1}f_2^{p_2} \le g^{p_1+p_2}$ 这样一个指数上的结果. 有时我们也写成 $$
p_1 \log f_1 + p_2 \log f_2 \spaces\le (p_1+p_2)\log g
$$ 用完全相同的步骤, 也可以证明任意多个 $p_i$ 和 $f_i$ 时的情况.
Poetry. Adams 谱序列 [adams]
Sublime Text 4 高分屏设置 [sublime-text-config]
PackageDev
1 包后, 修改主题文件如 Default.sublime-theme
即可."class": "sidebar_label",
"fg": "var(sidebar_label)",
"font.face": "var(font_face)",
"font.size": "var(font_size)" // line 264
padding
"class": "sidebar_tree",
"platforms": ["windows"],
"row_padding": [6, 5, 4, 5], // line 226
"class": "tab_label",
"font.face": "var(font_face)",
"font.size": "var(font_size_lg)", // line 938
PackageResourceViewer
这个包也能用, 不过相对而言太旧了.Sagemath Jupyter 主题设置 [sagemath-theme]
from jupyterthemes import get_themes, jtplot
import jupyterthemes as jt
from jupyterthemes.stylefx import set_nb_theme
set_nb_theme('monokai')
monokai
主题, 同时你还会发现当前使用的 Jupyter Notebook 的 Header
和 Toolbar
消失了 1. 如果你尝试检索相关信息, 你会在 jupyterthemes 的文档中找到像是jt -t monokai -T -N
-T
是 Toolbar Visible, -N
是 Name & Logo Visible. 然后遗憾地发现这不会对 Sagemath 的 Jupyter Notebook 造成任何作用. 同时, 这样的设置也是临时的, 如果希望将某个特定的主题作为默认主题, 就得另谋他法.sagemath/runtime/opt/sagemath-9.3/local/lib/python3.7/site-packages/jupyterthemes/styles/compiled/monokai.css
<SAGE_HOME>/.sage/jupyter-4.1/custom/custom.css
div#maintoolbar
和 #header-container
的 display
为 block
重新显示这两个组件. 修改 .MathJax
的 font-size
为 120%
或者更大则能够增大渲染后公式的字号.div#maintoolbar
和 #header-container
确实被设置为了 display: none
.Git 过滤分支 [git-filter-branch]
rebase
就能解决问题. 但若是要修改已经推送至远程仓库或托管平台 1 就没那么容易了, 而且对于真实的多人协作仓库来说, 这么做的潜在危害远高于修改 commits 历史所得到的短期好处 2. 因此我们接下来的讨论都是以接受这一点作为前提来进行.rebase
. 但现在肯定是不能直接推送了, 我们需要额外做一步 filter-branch
.git filter-branch --force
filter-branch
配合 replace
或者 <GIT_DIR>/info/grafts
也能够用来快速清除某次 commit 之前的所有记录.hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint:
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint:
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"
Exegesis. 日经观点 [baby-viewpoint]
Fibonacci 抛硬币 [fibonacci-flip]
屏幕右上角的 “FPS GPU CPU 延时” [nvidia-fps-gpu-cpu]
Alt+R
开启这个 “PC 统计数据”1
AMD 则是 Ctrl + Shift + O
. 目前看来这个信息会出现在安装了 Nvidia APP (Beta) 或者 GeForce Experience 程序的设备上.极坐标出现前人们怎样计算高斯积分 [gaussian-integral]
Wolfram 引擎与 WLJS [wolfram-engine]
文件互传 [file-transfer]
Theorem. 生成函数系数 [expand-coefficient]
代数数可数 [count-algebraic-number]
Example. 经典对称幂指数不等式 [exponent-symmetry]
Lemma. Young 引理 [young-lemma]