Skip to content

Commit

Permalink
up
Browse files Browse the repository at this point in the history
  • Loading branch information
haoxins committed Feb 25, 2024
1 parent 840293b commit d712673
Show file tree
Hide file tree
Showing 2 changed files with 174 additions and 0 deletions.
113 changes: 113 additions & 0 deletions 2024/math-differential-geometry-1.md
Original file line number Diff line number Diff line change
Expand Up @@ -599,9 +599,122 @@ date: 2023-10-06
$$ \mathbb{C} $$
的反射.
- 反演是反共形映射, 将圆周映射为圆周.
- __复反演是黎曼球面的旋转__. 考虑在这个几何反演后接着取共轭,
$$ z \longmapsto \overline{z} $$,
那么最终的结果就是复反演. 但是, 共轭对黎曼球面的作用是另一种反射,
这次是关于经过实轴的纵向平面的反射. 你可以很容易地验证,
两个关于经过实轴的纵向平面的反射的复合是围绕该轴的一个旋转:
- 复反演
$$ z \longmapsto (1 / z) $$
是黎曼球面绕实轴旋转角度
$$ π $$.
因此它是共形的, 将圆周映射到圆周.

> 复分析: Page 282
- __保角性和保圆性__. 默比乌斯变换是共形的,
它将每一个定向圆周
$$ K $$
映射为定向圆周
$$ \tilde{K} $$,
并将
$$ K $$
前进方向左侧的区域映射为
$$ \tilde{K} $$
前进方向左侧的区域.

- [射影坐标/齐次坐标](https://en.wikipedia.org/wiki/Homogeneous_coordinates)

- 正如
$$ \mathbb{R}^2 $$
空间中的线性变换都可以用一个
$$ 2 \times 2 $$
的实矩阵表示一样,
$$ \mathbb{C}^2 $$
空间中的线性变换都可以用一个
$$ 2 \times 2 $$
的复矩阵表示.

- 于是, 每一个默比乌斯变换
$$ M(z) $$
对应一个
$$ 2 \times 2 $$
矩阵
$$ [M] $$,
- $$
M(z) = \frac{az + b}{cz + d}
\longleftrightarrow
[M] =
\begin{bmatrix}
a & b \\
c & d
\end{bmatrix}
$$.
- 而且, 表示两个默比乌斯变换的复合的矩阵就是两个对应矩阵的乘积:
- $$ [ M_2 \circ M_1 ] = [ M_2 ] [ M_1 ] $$.
- 同样, 表示默比乌斯逆变换的矩阵就是对应矩阵的逆矩阵:
- $$ [ M^{-1} ] = [ M ]^{-1} $$.
- 由此易得: 非奇异默比乌斯变换构成一个群, 这是我们前面提到过的事实.
- 因为默比乌斯变换的系数不是唯一的,
所以默比乌斯变换对应的矩阵也不是唯一的: 如果
$$ k $$
是任意非零常数, 则矩阵
$$ k [M] $$
$$ [M] $$
对应同一个默比乌斯变换.
- 然而, 如果限定
$$ (ad - bc) = 1 $$,
将矩阵
$$ [M] $$
`规范化`, 那么一个默比乌斯变换的对应矩阵就只有两种可能:
- 一个是
$$ [M] $$,
另一个是
$$ - [M] $$.
- 换言之, 默比乌斯变换对应的矩阵在`"不计正负号的情况下"`是唯一的.

### 主要结果

- 所有三种常曲率几何的对称群
$$ \mathcal{G}_{+} (\mathcal{S}) $$
都是默比乌斯变换群的子群.
- __欧几里得几何__
$$ (\mathcal{K} = 0) $$:
- $$ E(z) = e^{iθ}z + k $$.
- 注意
$$ z \longmapsto \overline{z} $$
是反向等距变换, 是关于实轴的反射. 于是整个等距变换群是
$$ \mathcal{G} = \{ E(z) \} \cup \{ E(\overline{z}) \} $$.
- __球极地图中的球面几何__
$$ (\mathcal{K} = +1) $$:
- $$ S(z) = \frac{a z + b}{- \overline{b} z + \overline{a}} $$,
其中
$$ |a|^{2} + |b|^{2} = 1 $$.
- 注意
$$ z \longmapsto \overline{z} $$
是反向等距变换, 是球面关于过实轴的纵向平面的反射. 于是整个等距变换群是
$$ \mathcal{G} = \{ S(z) \} \cup \{ S(\overline{z}) \} $$.
- __庞加莱半平面地图中的双曲几何__
$$ (\mathcal{K} = -1) $$:
- $$ H(z) = \frac{az + b}{cz + d} $$,
其中 `a`, `b`, `c`, `d` 为实数, 且
$$ (ad - bc) = 1 $$.
- 注意
$$ z \longmapsto - \overline{z} $$
是反向等距变换, 是关于虚轴的反射. 于是整个等距变换群是
$$ \mathcal{G} = \{ H(z) \} \cup \{ H(- \overline{z}) \} $$.
- 有了关于矩阵的结果, 就容易证明以上三个集合都是群.
我们还注意到, 在球面几何中的矩阵是一种特殊类型, 在物理学中起着重要作用.
- 这类矩阵称为`酉矩阵`, 也就是说, 将它取共轭, 再做转置 (这两个操作的复合记为
$$ * $$
), 则可得到逆变换的矩阵:
- $$ S $$
`酉矩阵`, 意味着
$$ [S] [S]^{*} = 单位矩阵 $$.

> 酉矩阵! 哈哈哈~
### 爱因斯坦的时空几何学

### 三维双曲几何
Expand Down
61 changes: 61 additions & 0 deletions 2024/programming.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,67 @@ go install golang.org/x/tools/cmd/deadcode@latest

---


---

- [Robust generic functions on slices](https://go.dev/blog/generic-slice-functions)
- `Delete` need not allocate a new array,
as it shifts the elements in place.
Like `append`, it returns a new slice.
- Many other functions in the `slices` package
follow this pattern, including
`Compact`, `CompactFunc`, `DeleteFunc`,
`Grow`, `Insert`, and `Replace`.
- When calling these functions we must consider
the original slice invalid, because the
underlying array has been modified.
- `go vet` 应该检测这些~
- Out of pragmatism, we chose to modify the implementation
of the five functions `Compact`, `CompactFunc`, `Delete`,
`DeleteFunc`, `Replace` to "clear the tail".
- The code changed in the five functions uses the new
built-in function `clear` (Go 1.21) to set the obsolete
elements to the zero value of the element type.

```go
first, second, third, fourth := 11, 22, 33, 44
s := []*int{&first, &second, &third, &fourth}

if len(s) >= 4 {
s = slices.Delete(s, 2, 3)
fmt.Println("New length is", len(s))
}

for _, v := range s {
fmt.Println(*v)
}

// New length is 3
// 11
// 22
// 44
```

```go
first, second, third, fourth := 11, 22, 33, 44
s := []*int{&first, &second, &third, &fourth}

if len(s) >= 4 {
s := slices.Delete(s, 2, 3)
fmt.Println("New length is", len(s))
}

for _, v := range s {
fmt.Println(*v)
}

// New length is 3
// 11
// 22
// 44
// panic: runtime error: invalid memory address or nil pointer dereference
```

- [Warp](https://www.warp.dev)
- Warp is the terminal reimagined with AI and
collaborative tools for better productivity.
Expand Down

0 comments on commit d712673

Please sign in to comment.