☰
微分几何入门:从讲稿到代码,手算曲线与曲面曲率
2026/10/29 18:12:50 网站建设 项目流程

简介:这份资源是陈维桓《微分几何》讲稿的Word文档,面向数学专业学生、考研复习者及对微分几何感兴趣的研究者,帮助系统梳理从绪论到曲线论的核心理论。讲稿内容覆盖绪论、第一章预备知识与第二章曲线论,涉及三维欧氏空间中的标架、正交坐标变换、刚体运动、向量函数、参数曲线、弧长、曲率与Frenet标架、挠率与Frenet公式、曲线论根本定理及平面曲线等知识点,并提及曲面论、非欧几何与活动标架等后续方向。资源包内共1个doc文件,大小约6.54MB,目录结构清晰,按章节与节次编排,便于按模块检索学习。目前已有74人学习下载。读者可借助这份讲稿建立微分几何的知识框架,理解标架与坐标如何连接“形”与“数”,掌握曲线局部性质与整体特征的描述方法,为后续曲面论学习和数学研究打下基础。

1. 从一份讲稿 .doc 说起:微分几何入门到底该按什么顺序啃

如果你手头正好有一份「微分几何-陈维桓-绪论-第一章-第二章-第三章讲稿.doc」,大概率你正处在两种状态之一:要么是数学系低年级学生,课上跟得吃力,想找一份能顺着读下去的讲义;要么是已经工作、想补微分几何这块底子的工程师,面对满屏的「流形」「切空间」「联络」不知道从哪页翻起。这份讲稿覆盖绪论加前三章,恰好是微分几何从零到「能算曲率」的最短路径。它解决的不是高深理论,而是把参数曲线、参数曲面、第一第二基本形式、法曲率、高斯曲率这条主线串成一条能动手算的线。适合谁?适合能熟练求偏导、会一点线性代数、但一看到抽象定义就发懵的人。下面我按自己带人读这份讲稿的顺序,把每一块该盯什么、算到什么程度讲清楚。

2. 绪论与前三章的知识地图:先分清哪些是定义、哪些是定理、哪些是算例

2.1 绪论真正要抓的两件事

很多人读绪论会直接跳过,觉得都是废话。但陈维桓这份讲稿的绪论其实埋了两个后面反复用的东西:一是「正则参数曲线」和「正则参数曲面」的定义,二是「允许的参数变换」到底允许到什么程度。前者决定了你后面能不能对曲线求弧长、对曲面求法向量;后者决定了你换参数之后,曲率、挠率这些几何量会不会变。

具体来说,正则曲线要求切向量处处非零。这个条件看着弱,但一旦某点切向量为零,弧长参数化就崩了,后面 Frenet 公式里的 T、N、B 三向量在该点没有定义。我一般会让人拿一个具体例子验证:曲线 r(t) = (t², t³),在 t=0 处切向量是 (0,0),虽然曲线本身光滑,但这一点不是正则点。讲稿里这类反例不多,读的时候要自己补。

参数变换允许的是 C^k 微分同胚且雅可比行列式不为零。这条在曲面部分尤其关键:你换参数算第一基本形式,如果雅可比为零,等于把曲面压成一条线,度量矩阵直接退化。绪论里这句话如果没读进去,第二章算第一基本形式时就会莫名其妙得到 det I = 0。

2.2 第一章到第三章的递进关系

这份讲稿前三章的安排是典型的「曲线 → 曲面 → 曲面的曲率」三段式。第一章讲空间曲线,核心是弧长参数、Frenet 标架、曲率和挠率。第二章进入曲面,核心是第一基本形式和第二基本形式。第三章讲曲面的曲率,包括法曲率、高斯曲率、平均曲率,以及高斯映射。

这个顺序不能乱。因为第二基本形式里的单位法向量 n,依赖第一章里对切向量和正交标架的理解;而高斯曲率 K = det(II)/det(I),又直接建立在两个基本形式之上。我见过有人想直接跳到第三章看高斯曲率怎么算,结果连 II 的系数 L、M、N 是怎么来的都说不清,算出来的 K 符号经常搞反。

下面这张表把前三章的核心对象和它们依赖的前置知识列清楚,读讲稿时可以对着查。

章节核心对象关键公式/定义依赖的前置
第一章空间曲线 r(t)弧长 s、Frenet 公式、κ、τ向量求导、正交标架
第二章参数曲面 r(u,v)第一基本形式 I、第二基本形式 II偏导、法向量、第一章标架
第三章曲面曲率法曲率 κ_n、高斯曲率 K、平均曲率 HI 和 II 的系数、线性代数

2.3 读讲稿时该动手算什么

光看定义记不住。我的做法是每读完一节,至少手算一个具体曲面。比如第二章读完第一基本形式,就拿球面 r(u,v) = (R sin u cos v, R sin u sin v, R cos u) 算一遍 E、F、G。算完你会发现 E = R²,F = 0,G = R² sin²u,度量矩阵是对角的,这跟球面的对称性对得上。

第三章读完高斯曲率,再拿球面算 K。球面的 II 系数是 L = -R,M = 0,N = -R sin²u,所以 K = (LN - M²)/(EG - F²) = (R² sin²u)/(R² · R² sin²u) = 1/R²。这个结果跟球面半径平方成反比,符合直觉。手算一遍比看十遍公式有用。

提示:讲稿里的算例往往只给结果,中间步骤省略。读的时候把省略的偏导和行列式展开自己补上,补不出来说明卡在某个前置知识点上,回头查。

3. 把讲稿里的公式变成可复现的计算:从曲线到曲面的最小代码路径

3.1 用 Python 符号计算验证 Frenet 公式

讲稿第一章的 Frenet 公式是 dT/ds = κN,dN/ds = -κT + τB,dB/ds = -τN。这三个式子背下来容易,但符号和方向经常记混。我一般用 sympy 对一个具体曲线算一遍,把 T、N、B、κ、τ 都求出来,再验证公式两边是否相等。

import sympy as sp t = sp.symbols('t', real=True) # 定义一条非平面曲线:螺旋线 r = sp.Matrix([sp.cos(t), sp.sin(t), t]) # 求切向量并归一化 dr = r.diff(t) T = dr / dr.norm() T = sp.simplify(T) # 求曲率:|dr x d2r| / |dr|^3 d2r = dr.diff(t) cross = dr.cross(d2r) kappa = sp.simplify(cross.norm() / dr.norm()**3) # 主法向量 N = (dT/dt) / |dT/dt| dT = T.diff(t) N = sp.simplify(dT / dT.norm()) # 副法向量 B = T x N B = sp.simplify(T.cross(N)) # 挠率 tau = (dr, d2r, d3r) / |dr x d2r|^2 d3r = d2r.diff(t) triple = dr.dot(d2r.cross(d3r)) tau = sp.simplify(triple / cross.norm()**2) print("T =", T) print("N =", N) print("B =", B) print("kappa =", kappa) print("tau =", tau)

这段代码的逻辑是:先定义曲线,再按 Frenet 标架的定义逐步求 T、N、B,最后用混合积公式求挠率。参数说明上,sp.symbols('t', real=True)声明实参数,避免 sympy 引入不必要的复共轭;dr.norm()是向量模长;cross.norm()**2是叉积模长平方。跑出来螺旋线的 κ 和 τ 都是常数,这跟讲稿里「圆柱螺旋线是常曲率常挠率曲线」的结论一致。如果算出来 κ 带 t,说明曲线不是螺旋线或者求导出错。

3.2 第一基本形式和第二基本形式的矩阵算法

第二章的核心是把曲面的两个基本形式写成矩阵。讲稿里通常写成 I = E du² + 2F dudv + G dv²,II = L du² + 2M dudv + N dv²。落到计算上,就是先求 r_u 和 r_v,再求单位法向量 n,然后:

  • E = r_u · r_u
  • F = r_u · r_v
  • G = r_v · r_v
  • L = r_uu · n
  • M = r_uv · n
  • N = r_vv · n

下面用 Python 对环面算一遍,环面是讲稿里常出现的例子,因为它的高斯曲率有正有负,能检验符号。

import sympy as sp u, v = sp.symbols('u v', real=True) R, r = sp.symbols('R r', positive=True) # 环面参数方程 x = (R + r*sp.cos(u)) * sp.cos(v) y = (R + r*sp.cos(u)) * sp.sin(v) z = r * sp.sin(u) rv = sp.Matrix([x, y, z]) # 一阶偏导 ru = rv.diff(u) rv_ = rv.diff(v) # 单位法向量 n = ru.cross(rv_) n = sp.simplify(n / n.norm()) # 第一基本形式系数 E = sp.simplify(ru.dot(ru)) F = sp.simplify(ru.dot(rv_)) G = sp.simplify(rv_.dot(rv_)) # 二阶偏导 ruu = ru.diff(u) ruv = ru.diff(v) rvv = rv_.diff(v) # 第二基本形式系数 L = sp.simplify(ruu.dot(n)) M = sp.simplify(ruv.dot(n)) N = sp.simplify(rvv.dot(n)) # 高斯曲率 K = sp.simplify((L*N - M**2) / (E*G - F**2)) print("E,F,G =", E, F, G) print("L,M,N =", L, M, N) print("K =", K)

逻辑说明:先构造环面参数方程,求两个方向的一阶偏导,叉积得到法向量方向再归一化。第一基本形式系数是偏导的内积,第二基本形式系数是二阶偏导与单位法向量的内积。最后 K = (LN - M²)/(EG - F²)。参数上R是环面中心到管中心的距离,r是管半径,都声明为正数,避免 sympy 在开方时产生分段讨论。跑出来 K = cos(u) / (r(R + r cos u)),在 u = π/2 附近 K 变号,这正是环面内圈和外圈曲率符号相反的表现。如果算出来 K 恒正,检查法向量方向是否取反了。

3.3 高斯映射和曲率的关系怎么验证

第三章讲高斯映射,把曲面上每一点映到单位球面上的法向量。高斯映射的雅可比行列式就是高斯曲率 K。这个结论在讲稿里通常以定理形式出现,但验证起来不难:对球面本身,高斯映射是恒等映射(差一个符号),雅可比行列式为 1,K = 1/R²,跟直接算的一致。

我一般让人用数值差分验证:在曲面上取一个小参数矩形,算四个角点的法向量,再算这些法向量在单位球面上围成的面积与参数矩形面积的比值,取极限就是 K。这个方法在讲稿里不一定写,但能帮你理解为什么 K 是内蕴量。

注意:数值差分验证时步长不能太大,否则高阶项会污染结果;也不能太小,否则浮点误差会放大。一般取 1e-4 到 1e-5 之间试。

4. 读这份讲稿最容易翻车的几个地方:避坑与排查

4.1 法向量方向取反导致曲率符号全错

现象:算出来的高斯曲率跟讲稿答案差一个负号,或者法曲率正负跟预期相反。原因:单位法向量 n 的方向有两种取法,n 和 -n 都垂直于切平面。第二基本形式 L、M、N 都含 n,n 取反后 II 整体变号,K = det(II)/det(I) 不变,但法曲率 κ_n = II/I 会变号。解决:在算之前先约定 n 的方向,通常取 r_u × r_v 的方向,并检查它是否指向曲面「外侧」。对球面,r_u × r_v 指向球心还是外侧,取决于参数顺序,换参数顺序会翻。

4.2 把第一基本形式当成常数矩阵

现象:换参数后算出来的 E、F、G 跟讲稿对不上。原因:第一基本形式是参数 (u,v) 的函数,不是常数矩阵。比如球面的 G = R² sin²u,随 u 变化。有人看到 E = R² 是常数,就以为整个矩阵是常数的。解决:每次换参数都重新算 E、F、G,不要套用旧参数下的结果。参数变换公式是 I' = J^T I J,其中 J 是参数变换的雅可比矩阵。

4.3 弧长参数和一般参数混用

现象:Frenet 公式里 dT/ds 和 dT/dt 搞混,导致 κ 算错。原因:Frenet 公式是在弧长参数下成立的,dT/ds = κN。如果曲线用一般参数 t 给出,要先转成弧长参数,或者用链式法则 dT/ds = (dT/dt)/(ds/dt)。解决:算 κ 时用公式 κ = |r' × r''| / |r'|³,这个公式对一般参数直接成立,不用先转弧长。但算 τ 时要注意符号,τ = (r', r'', r''') / |r' × r''|²。

4.4 高斯曲率公式在退化点失效

现象:在某些点 K 算出来是无穷大或 0/0。原因:K = (LN - M²)/(EG - F²),当 EG - F² = 0 时,第一基本形式退化,曲面在该点不是正则的。比如球面的极点 u = 0 或 u = π,G = R² sin²u = 0,EG - F² = 0。解决:这些点是参数化的奇点,不是曲面本身的奇点。换一组参数覆盖极点,或者在极限意义下算 K。球面在极点的 K 仍然是 1/R²,用极限取。

4.5 把平均曲率 H 和高斯曲率 K 的符号规则搞混

现象:H = 0 的极小曲面判断错。原因:H = (EN - 2FM + GL) / (2(EG - F²)),符号依赖 L、M、N 的符号,而 L、M、N 又依赖法向量方向。K 对法向量方向不变,但 H 会变号。解决:判断极小曲面时,先固定法向量方向,再算 H。如果 H 在某个法向量方向下为 0,换方向后还是 0,因为 0 变号还是 0。但非零的 H 换方向会变号,所以「H = 常数」这种说法要注明法向量方向。

5. 从讲稿到独立推导:一个检验自己是否真懂的技巧

读讲稿的最终目的不是记住公式,而是能自己推。我检验自己是否真懂一个曲面,会做一件事:不看讲稿,从参数方程出发,独立算出第一基本形式、第二基本形式、高斯曲率和平均曲率,然后跟讲稿对。如果中间卡住,卡在哪一步就说明哪个定义没吃透。

拿悬链面 r(u,v) = (cosh u cos v, cosh u sin v, u) 举例。这是讲稿里常用来讲极小曲面的例子。独立算的步骤是:

  1. 求 r_u = (sinh u cos v, sinh u sin v, 1),r_v = (-cosh u sin v, cosh u cos v, 0)。
  2. 算 E = r_u · r_u = sinh²u + 1 = cosh²u,F = 0,G = cosh²u。
  3. 法向量 n = r_u × r_v / |r_u × r_v|,算出来 n = (-cos v / cosh u, -sin v / cosh u, tanh u) 或它的反向。
  4. 求二阶偏导 r_uu、r_uv、r_vv,再跟 n 做内积得 L、M、N。
  5. 算 K = (LN - M²)/(EG - F²) 和 H = (EN - 2FM + GL)/(2(EG - F²))。

悬链面的结果是 K = -1/cosh⁴u,H = 0。H = 0 说明它是极小曲面。如果你算出来 H 不为零,检查法向量方向或者二阶偏导是否求错。这个独立推导过程做三到五个曲面,前三章的主线基本就通了。

提示:独立推导时先用符号计算验证,再手算一遍。符号计算帮你确认结果,手算帮你记住步骤。两者缺一不可。

我自己的习惯是每读一章讲稿,就在空白纸上默写该章的核心定义和定理,然后拿一个讲稿里没出现的曲面算一遍。如果算得出来,说明这章过了;算不出来,回头重读。这个习惯帮我省了很多后悔药,因为微分几何的坑往往不在难题上,而在定义的条件和符号约定上。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询