遛狗中的数学:Rouché 定理和曲线的环绕数

我写了一个 Shadertoy 小动画,演示 Needham 的《Visual complex analysis》一书中第七章 "Winding numbers and topology" 中的结论:

一个人和他的狗在公园里绕着一棵树散步,人和狗各自走的路径都是闭曲线,即经过一段时间后都会回到起点。如果人把狗绳抓的紧一些,使得整个过程中狗无法接触到树,则结束后人和狗绕着树走的圈数是一样的,这就是下面这个动画演示的:(树的位置用一个表盘标记)

对应的数学结论是:两条闭曲线 \(\gamma_1,\gamma_2\) 如果都不经过原点,且 \(\gamma_1\) 可以在不碰触到原点的前提下通过连续的形变变为 \(\gamma_2\) (同伦),则 \(\gamma_1,\gamma_2\) 关于原点的环绕数相等。

其实动画中还包含了幅角原理:动画中的两条路径分别是单位圆 \(S^1\) 在两个解析函数 \(f,g\) 下的像,这里的 \(f\) 我取的形如 \[f(z) =\frac{z-a}{1-\overline{a}z}\frac{z-b}{1-\overline{b}z}\frac{z-c}{1-\overline{c}z} (z-2-2i),\quad a,b,c\in\mathbb{D}.\] 于是 \(f(z)\) 在单位圆 \(\mathbb{D}\) 的内部有 3 个根,在边界 \(S^1\) 上不为 0,在单位圆外部有一个根。\(f(z)\) 的前三个因子构成一个 Blaschke 乘积,这是一个多对一的映射,它把圆盘 \(\mathbb{D}\) 的内部仍然映射为内部,把边界 \(S^1\) 仍然映射为 \(S^1\),于是对任何 \(z\in S^1\)\[|f(z)| = |z - 2 - 2i| \geq 2\sqrt{2} - 1,\quad z\in S^1.\] 所以如果绳子 \(l(z)\) 满足 \(|l(S^1)| < 2\sqrt{2}-1\),则狗走的路径 \(g(S^1)=f(S^1)+l(S^1)\) 就不可能接触到原点。我这里取了 \(l(z) = cz\),其中 \(c\) 是一个小于 \(2\sqrt{2}-1\) 的正实数。

根据幅角原理\(f(S^1)\)\(g(S^1)\) 关于原点的环绕数等于它们在 \(S^1\) 内的零点个数,于是我们知道 \(g(z)\) 也必然在 \(S^1\) 内有三个零点。这就是 Rouché 定理的结论。

三维双曲空间中的万花筒结构

在我之前的文章中,已经讨论过了三维和四维球面上的万花筒三维欧式空间中的万花筒,本文来介绍三维双曲空间中的万花筒,也即蜂巢结构。这也是理论最复杂、结构最具多样性、视觉美感最奇妙的一类结构。下面开始我们奇妙的旅程吧!

本文图片使用了 Fragmentarium 软件渲染,代码在 github 上

  • 下图展示的是 Poincaré 单位球空间中的正双曲蜂巢 (5, 3, 5)

    这里 (5, 3, 5) 是一个记号,叫做 Schläfli 记号,就像生物学家给不同的蛋白质编号一样,这个记号是用来给不同的蜂巢结构编号的。

    从图中可以看到,整个蜂巢结构由许许多多小的胞腔组成,每个胞腔是一个正十二面体,这对应符号中的后两个 (3, 5),每个顶点与五个胞腔相邻,这对应符号中的第一个 5。

    注意双曲空间是一个在双曲度量下无穷大的空间,其中的物体与原点之间的双曲距离和欧式距离是指数增长的关系,所以虽然看起来远处的胞腔“急剧变小”,那只是我们在欧式空间中观察导致的错觉,实际上双曲度量下所有胞腔都是全等的。

静电场与 Marden 定理

我昨晚刚完成了一个 Shadertoy 小动画,演示平面几何中的 Marden 定理、复分析中的 Gauss-Lucas 定理以及静电场的关系。请欣赏:

这个动画的含义如下:

  1. 在复平面上不共线的三个点 \(A,B,C\) 处各自放置一个带有单位正电荷,则电场强度为 0 的点都位于 \(\Delta ABC\) 的内部,这样的点有两个,它们是三次复多项式 \(P(z) = (z-A)(z-B)(z-C)\) 的导数 \(P'(z)\) 的零点。

  2. 不仅如此,这两个零点还是一个内切于 \(\Delta ABC\) 的椭圆的两个焦点,此椭圆是所有内切于 \(\Delta ABC\) 的椭圆中面积最大者,并且其与 \(\Delta ABC\) 的三边的切点均为各边中点。这个椭圆叫做 Steiner 内切椭圆

这个动画是受几天前 Albert Chern 的一篇推文启发所作,John Baez 也写了一篇关于这个话题的文章。我是由此才了解到 Marden 定理还有如此有趣的物理学解释,的确大开眼界!

二维随机游动 (二):一个随机的完美迷宫分别有多少个死角、拐角、岔路和十字路口?

此为二维随机游动系列的第二篇文章,但本文介绍的理论也适用于一般的图。

问题:在 \(n\times n\) 的正方形网格图 \(G_n\) 的所有生成树中等概率地随机任选一个,记这个随机生成树为 \(T\)\(T\) 叫做 \(G_n\) 的一个均匀生成树。对 \(G_n\) 中任一顶点 \(v\)\(v\)\(T\) 的叶节点的概率是多少?

这个问题也可以表述为,“对一个完全随机的 \(n\times n\) 的完美迷宫,求它包含的死角的比例”。这里一个迷宫称作是完美的,如果迷宫中的任何两个房间之间都有且仅有唯一的道路相连 (这正是生成树的等价描述!)。迷宫中的一个房间称作是“死角”,当且仅当它只有一条道路与其它房间相通。换句话说,一旦进去了就必须原路返回,没有其它出路 (这正是叶节点的等价描述!)。

下图显示了三个不同的均匀生成树,它们分别来自大小为 \(80\times 80\)\(120\times120\)\(200\times200\) 的三个网格图,这三个生成树的叶节点 (用蓝色标出) 占全体顶点的比例分别为 \(1884/6400=0.294375\)\(4234/14400\approx0.294028\)\(11776/40000=0.2944\)。咦?看起来好像是在围着一个固定的值波动喔?

二维随机游动 (一):逃出太阳系可没有你想象的那么难!

这是一个关于二维随机游动的小系列,整理自我研究生时的读书笔记,每篇文章会从一个有趣直观的问题出发,介绍随机游动理论中的一个相关知识。整个系列的内容都比较基础,涉及的知识在 Durrett 的教材 1 中都可以找到。

今天的问题依然有趣,但是并不简单。

问题:假设某人以太阳系的中心为原点出发,在一个固定的平面内,以恒为 1 米的步长作随机行走。每次这个人等概率地随机选择东、南、西、北中任一方向,然后向此方向移动 1 米的距离。如果某个时刻此人回到了原点,或者离开了太阳系则过程结束。

现在有 A, B 两个旁观者打赌哪一种情形先发生,A 认为此人会先回到原点,B 认为此人会先离开太阳系。请问 A, B 获胜的概率分别是多少?

作为参考,太阳系半径约为 45 亿千米,看作一个中心在原点的圆形区域。

Coxeter 群,有限状态机与均匀密铺

终于完成了一个新的 Python 小程序,虽然还有一些功能有待实现,但是大致的效果已经出来了。这个程序是我最近半年多来利用几乎所有业余时间呕心沥血、披星戴月、艰苦攻关完成的新作品,是一个纯粹的、优雅的、有益于广大人民欣赏数学之美的程序。代码在 github 上,目前还有许多不尽人意的地方,后面还会继续维护和改进。

这个程序是我目前为止写过的所有程序中最难的一个,它涉及的数学知识相当复杂,使用了 Coxeter 群的一些深刻性质,所以理解起来可能不太容易。但是这个程序可以做的事情相当惊人,它可以用来绘制二维和三维欧式空间、双曲空间和球面上的各种均匀密铺 (uniform tilings),生成的图片效果非常优美。我最好还是先有图有真相:

例子

  • 下图是二维的欧式密铺 omnitruncated (4, 2, 4):

Todd-Coxeter 算法和 3D/4D 均匀多胞体

The English version of this doc is here.

本文要介绍的是我写的一个高颜值的、脱离了低级趣味的小程序:用 Python 和 POV-Ray 绘制各种三维多面体和四维多胞体,代码在 github 上。

以下是用这个程序渲染的一些例子:(注意不同颜色的顶点/边/面表示它们在对称群的作用下位于不同的轨道中,具体解释见后)

例子

  • 所有的 Platonic 多面体,Archimedean 多面体,比如 snub dodecahedron:

Möbius 变换的分类与上半双曲空间的等距

2021/06/27 更新:我更新了一下 shader 代码,把每个动画放在一个 SVG 图片中。最后几个动画代码是可以使用键盘选择场景的,具体操作如下:

  • 按下 1 开启/关闭 Möbius 变换。
  • 按下 2 开启/关闭椭圆旋转。
  • 按下 3 开启/关闭双曲缩放。
  • 按下 4 开启/关闭展示 Riemann 球面。

这几个按键可以组合出许多不同的效果来!


本文的想法源自 Roice Nelson 的 shadertoy 项目,我觉得他的创意很棒,就是效果有点糙,于是动手改进了一番,结果见这里。不懂的人看这个动画可能只是觉得好玩,其实它背后的数学并不简单。

这篇文章将用动画的形式从三个角度演示 Möbius 变换,这三个角度是密切相关的:

  1. Möbius 变换作为扩充复平面 \(\hat{\mathbb{C}}\) 到自身的全纯函数。
  2. Möbius 变换作为 Riemann 球面 \(S^2\) 到自身的全纯函数。
  3. Möbius 变换作为上半双曲空间中的等距变换。

本文只做演示,并不介绍详细的数学证明。读者可以参考下面的两份资料:

  1. 维基百科页面.
  2. Visual complex analysis, Tristan Needham.

借助本文的动画你可以很容易地理解这两份资料中的内容。

文中的动画全部使用 shader 程序制作,需要你的浏览器支持 Webgl2.0,代码在 github 上。

 | 

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器