本篇就算正式进入微分几何的大门了。来讲讲Frenet标架(Frenet Frame)这个在19世纪中期就已经被提出的“古老”想法。

3.1 Frenet标架

Definition 3.1.1记c:I→Rnc:I\rightarrow \mathbb{R}^nc:I→Rn为一条参数曲线。
i) n维活动标架(moving n-frame)是n个可微映射ei:I→Rn,1≤i≤ne_i:I\rightarrow \mathbb{R}^n, \quad 1\leq i\leq nei​:I→Rn,1≤i≤n其中 eie_iei​ 满足 ∀t∈I,ei(t)⋅ej(t)=δij\forall t\in I, e_i(t) \cdot e_j(t) = \delta_{ij}∀t∈I,ei​(t)⋅ej​(t)=δij​,这里δij\delta_{ij}δij​是克罗内克记号(Kronecker Delta),且每个 ei(t)e_i(t)ei​(t) 都表示一个沿着ccc的向量场。

ii) n维Frenet标架 是指一个n维活动标架,满足,∀k,1≤k≤n,c(k)(t)∈span{e1(t),…,ek(t)}\forall k, 1\leq k\leq n, c^{(k)}(t)\in \text{span} \{ e_1(t),\dots, e_k(t)\}∀k,1≤k≤n,c(k)(t)∈span{e1​(t),…,ek​(t)}.

活动标架的想法其实非常自然,如果能在曲线的每一点都找到一个坐标系的话,我就能在曲线的每一个局部更好的描述它,甚至进行一些微积分运算。

但显然这么优良的性质不是所有曲线都能够满足的,于是就增加一些条件,从种类繁多,奇形怪状的曲线中先找出些“好的”曲线继续探索。挺有道理的。这样我们自然而然的就有疑问,这些{ei}\{e_i\}{ei​},我们是从哪找出来的呢?或者说对什么样的曲线我们能够找到这样的标架呢?于是更进一步有了Frenet标架的定义。

下面的命题讲述了对于什么样的曲线一定能找到Frenet标架,以及该如何构造这个标架中的{ei}\{e_i\}{ei​}.
Proposition 3.1.2(Frenet标架的存在唯一性)c:I→Rnc:I\rightarrow \mathbb{R}^nc:I→Rn为一条参数曲线。如果 ∀t∈I,c′(t),…,c(n−1)(t)\forall t\in I, c'(t),\dots,c^{(n-1)}(t)∀t∈I,c′(t),…,c(n−1)(t) 线性无关,那么曲线 ccc 存在唯一的Frenet标架,且满足如下的性质:
i) ∀1≤k≤n−1,c′(t),…,c(k)(t)\forall 1\leq k\leq n-1, c'(t),\dots,c^{(k)}(t)∀1≤k≤n−1,c′(t),…,c(k)(t) 与 e1(t),…,ek(t)e_1(t),\dots, e_k(t)e1​(t),…,ek​(t) 定向相同;
ii) e1(t),…,en(t)e_1(t),\dots, e_n(t)e1​(t),…,en​(t)为正定向。
这里,两组基底定向相同是指:从一组基底变换到另一组基底的系数矩阵行列式为正;
正定向是指:这组基和Rn\mathbb{R}^nRn中我们常说的标准基底定向相同。

Proof:
这里条件的意思就是,我们可以先用Gram-Schmidt正交化,从其线性无关的各阶导数,构造出基底 {ei(t)}\{e_i(t)\}{ei​(t)}:
先令e1(t)=c′(t)∣c′(t)∣e_1(t)=\frac{c'(t)}{|c'(t)|}e1​(t)=∣c′(t)∣c′(t)​,因为线性无关,各阶导数的模长不会为0.
假设 e1(t),…,ej−1(t),j<ne_1(t),\dots, e_{j-1}(t), j<ne1​(t),…,ej−1​(t),j<n已经取好,接下来取 ej(t)e_j(t)ej​(t):
e~j(t)=cj(t)−∑i=1j−1(ei(t)⋅cj(t))ei(t)\tilde{e}_j(t)=c^{j}(t)-\sum_{i=1}^{j-1}(e_i(t) \cdot c^j(t))e_i(t)e~j​(t)=cj(t)−i=1∑j−1​(ei​(t)⋅cj(t))ei​(t)
再将其规范化:ej(t)=e~j(t)∣e~j(t)∣e_j(t)=\frac{\tilde{e}_j(t)}{|\tilde{e}_j(t)|}ej​(t)=∣e~j​(t)∣e~j​(t)​.
这样我们便通过标架的前 j−1j-1j−1 个分量,得到了第 jjj 个分量。如此反复操作下去,即可得到前 n−1n-1n−1 个分量。

这里 {ei(t)},1≤i≤n−1\{e_i(t)\}, 1\leq i\leq n-1{ei​(t)},1≤i≤n−1构成了 Rn−1\mathbb{R}^{n-1}Rn−1中的一组基底,只需要再添入一个分量 en(t)e_n(t)en​(t) ,使它扩充为 Rn\mathbb{R}^nRn空间中的一组与标准基定向相同的基底,这样我们就得到了Frenet标架。并且这样的操作是可以做到的,比如在三维空间中,知道两个向量,可以通过叉积(cross product)求出与这两个向量都垂直的向量。

因为Gram-Schmidt正交化的系数矩阵是下三角的,且对角线都是所除的模长,所以系数矩阵的行列式恒正,这样命题中要求的性质也就得到了满足。
接下来再说明最后一点,在活动标架中所要求的 ei(t),1≤i≤ne_i(t), 1\leq i \leq nei​(t),1≤i≤n是可微的:
前 n−1n-1n−1 个分量由曲线ccc的导数线性组合而成,所以都是可微的;
最后的 en(t)e_n(t)en​(t) 由叉积得到,仍然是由可微函数的加和乘构成,当然还是可微的。
至此我们完成了证明。

回过头看定理证明,最主要的原因就是对曲线 ccc 要求了∀t∈I,c′(t),…,c(n−1)(t)\forall t\in I, c'(t),\dots,c^{(n-1)}(t)∀t∈I,c′(t),…,c(n−1)(t) 线性无关这个条件。我们接下来所接触的Frenet标架,都是从这个条件所得来的,这个条件非常的重要,不妨将其称作 Frenet条件
接下来通过Gram-Schmidt正交化,将其转化为Frenet标架。

也就是span {c′(t),…,c(i)(t)}=span {e1(t),…,ei(t)},∀1≤i≤n.\text{span } \{c'(t), \dots ,c^{(i)}(t)\}=\text{span } \{e_1(t), \dots ,e_{i}(t)\},\quad \forall 1\leq i\leq n.span {c′(t),…,c(i)(t)}=span {e1​(t),…,ei​(t)},∀1≤i≤n.

如果明白了线性无关,明白了Gram-Schmidt正交化,那么就应该可以非常直观的理解Frenet标架。

一个问题是,这个导数线性无关的条件,到底是指怎样的曲线呢?先留个疑问。接下来讲讲Frenet方程组(Frenet equations):

3.2 Frenet方程组

更进一步,接下来要探寻一些在等距变换和参数变换下的不变量,这会让我们感觉自己离某些本质的东西更近了一些。

Proposition 3.2.1 记 c(t)c(t)c(t) 的Frenet标架为 {ei(t)}\{e_i(t)\}{ei​(t)} ,则 ωij(t)≜ei′(t)⋅ej(t)=−ωji(t),\omega_{ij}(t)\triangleq e'_i(t)\cdot e_j(t)=-\omega _{ji}(t),ωij​(t)≜ei′​(t)⋅ej​(t)=−ωji​(t), ei′(t)=∑jωij(t)ej(t),e'_i(t)=\sum_j \omega_{ij}(t)e_j(t),ei′​(t)=j∑​ωij​(t)ej​(t),并且ωij(t)=0,如果 j>i+1.\omega_{ij}(t)=0, \text{如果 }j>i+1.ωij​(t)=0,如果 j>i+1.

Proof:
由正交性ei(t)⋅ej(t)=0,∀1≤i≤ne_i(t)\cdot e_j(t)=0, \forall 1\leq i\leq nei​(t)⋅ej​(t)=0,∀1≤i≤n, 两边求导,ei′(t)⋅ej(t)+ei(t)⋅ej′(t)=0e'_i(t)\cdot e_j(t)+e_i(t)\cdot e'_j(t)=0ei′​(t)⋅ej​(t)+ei​(t)⋅ej′​(t)=0,即证明了命题的第一句话。

接下来由于Frenet标架的性质,也是在前面提到的ei(t)∈span {c′(t),…,c(i)(t)}e_i(t)\in \text{span } \{c'(t), \dots ,c^{(i)}(t)\}ei​(t)∈span {c′(t),…,c(i)(t)},所以
ei′(t)∈span {c′(t),…,c(i+1)(t)}=span {e1(t),…,ei+1(t)}e'_{i}(t)\in \text{span } \{c'(t), \dots ,c^{(i+1)}(t)\}=\text{span } \{e_1(t), \dots ,e_{i+1}(t)\}ei′​(t)∈span {c′(t),…,c(i+1)(t)}=span {e1​(t),…,ei+1​(t)}
既然 ei′(t)e'_{i}(t)ei′​(t) 只有前 n+1n+1n+1 个Frenet标架分量有关,那么当然对于大于 i+1i+1i+1 的 jjj 都有wij(t)=ei′(t)⋅ej(t)=0w_{ij}(t)= e'_i(t)\cdot e_j(t)=0wij​(t)=ei′​(t)⋅ej​(t)=0,证毕。

所以我们看如果用{ei(t)}\{e_i(t)\}{ei​(t)}将{e(i)(t)}\{e^{(i)}(t)\}{e(i)(t)}表出的话,其系数矩阵,记作 ω\omegaω,应该是反对称的(skew-symmetric),且除了次对角线外,起于元素均为0.

这就是Frenet运动方程组:
ddt(e1(t)e2(t)e3(t)⋮en(t))=(0ω120…0−ω120ω23…00−ω230ω340…0⋮⋱…00…0ωn−1,n0…0−ωn−1,n0)⋅(e1(t)e2(t)e3(t)⋮en(t))\frac{d}{dt}\begin{pmatrix} e_1(t) \\e_2(t) \\e_3(t)\\ \vdots \\e_n(t) \end{pmatrix} = \begin{pmatrix} 0& \omega_{12} & 0 &\quad & \quad& \dots &0 \\ -\omega_{12}& 0 & \omega_{23} & & & \dots& 0\\ 0& -\omega_{23} & 0 & \omega_{34} & 0 & \dots &0 \\ \vdots & & & & \ddots &\dots & 0\\ 0 & & \dots & & 0 & &\omega_{n-1,n} \\ 0& & \dots &0 &-\omega_{n-1,n} & &0 \end{pmatrix}\cdot \begin{pmatrix}e_1(t) \\e_2(t) \\e_3(t) \\\vdots \\ e_n(t) \end{pmatrix} dtd​⎝⎜⎜⎜⎜⎜⎛​e1​(t)e2​(t)e3​(t)⋮en​(t)​⎠⎟⎟⎟⎟⎟⎞​=⎝⎜⎜⎜⎜⎜⎜⎜⎛​0−ω12​0⋮00​ω12​0−ω23​​0ω23​0……​ω34​0​0⋱0−ωn−1,n​​…………​0000ωn−1,n​0​⎠⎟⎟⎟⎟⎟⎟⎟⎞​⋅⎝⎜⎜⎜⎜⎜⎛​e1​(t)e2​(t)e3​(t)⋮en​(t)​⎠⎟⎟⎟⎟⎟⎞​

Proposition 3.2.2 ∀1≤i,j≤n,ωij∣c′(t)∣\forall 1\leq i,j\leq n, \frac{\omega_{ij}}{|c'(t)|}∀1≤i,j≤n,∣c′(t)∣ωij​​是等距变换和保定向的参数变换下的不变量。

Proof:
在参数变换下这是不变量,只需要简单的隐函数求导即可。

为了证明是等距变换下的不变量,记 B:Rn→RnB: \mathbb{R}^n \rightarrow \mathbb{R}^nB:Rn→Rn 为一个等距变换,其变换矩阵为一个正交矩阵,记作 RRR.
注意每一个e~i(t)\tilde{e}_i(t)e~i​(t)都在沿曲线 c~\tilde{c}c~ 的向量场中,所以可知 c~=B∘c\tilde{c}=B \circ cc~=B∘c 的Frenet标架为 e~i(t)=Rei(t)\tilde{e}_i(t)=R e_i(t)e~i​(t)=Rei​(t),那么由内积的定义和正交矩阵的性质:
ω~ij(t)=e~i′(t)⋅e~j(t)=Rei′(t)⋅Rej(t)=(Rei′(t))∗Rej(t)=ei′(t)R∗Rej(t)=ei′(t)⋅ej(t)=ωij\tilde{\omega}_{ij}(t)=\tilde{e}'_i(t)\cdot \tilde{e}_j(t)=Re'_i(t)\cdot Re_j(t)=(Re'_i(t))^*Re_j(t)=e'_i(t)R^*Re_j(t)=e'_i(t)\cdot e_j(t)=\omega_{ij}ω~ij​(t)=e~i′​(t)⋅e~j​(t)=Rei′​(t)⋅Rej​(t)=(Rei′​(t))∗Rej​(t)=ei′​(t)R∗Rej​(t)=ei′​(t)⋅ej​(t)=ωij​,其中∗*∗表示共轭转置,在实的情况下理解为转置就好。
又因为∣c~′(t)∣=∣Rc′(t)∣=∣c′(t)∣|\tilde{c}'(t)|=|Rc'(t)|=|c'(t)|∣c~′(t)∣=∣Rc′(t)∣=∣c′(t)∣,所以ωij∣c′(t)∣\frac{\omega_{ij}}{|c'(t)|}∣c′(t)∣ωij​​不变,证毕。

神奇,至此我们发现了一个看起来很有趣的不变量,我们从比较一般的曲线中,似乎发掘出一点金光闪闪的东西。那接下来当然很好奇它的性质,不能放过它,给它命名为曲率,抓着它研究,看它有什么性质。

Definition 3.2.3 记c:I→Rnc:I\rightarrow \mathbb{R}^nc:I→Rn是一个满足Frenet条件的参数曲线,其第 iii 个 (i=1,2,…,n−1)(i=1,2,\dots,n-1)(i=1,2,…,n−1) 曲率(curvature) 定义为κi(t)≜ωi,i+1∣c′(t)∣.\kappa_i(t)\triangleq \frac{\omega_{i,i+1}}{|c'(t)|}.κi​(t)≜∣c′(t)∣ωi,i+1​​.

Proposition 3.2.4 在上述定义中,κi(t)>0,i=1,2,…,n−2.\kappa_i(t)>0, i=1,2,\dots,n-2.κi​(t)>0,i=1,2,…,n−2.

也就是说,在c:I→Rnc:I\rightarrow \mathbb{R}^nc:I→Rn这个满足Frenet条件的参数曲线上,定义了 n−1n-1n−1 个曲率,其中前n-2个曲率是恒正的。

Proof:
也就是只要证明前 n−2n-2n−2 个 ωi,i+1\omega_{i,i+1}ωi,i+1​是恒正的。
还是要从构造方法入手,我们可以写出:
ek=∑l=1kbklc(l)and c(k)=∑l=1kaklel,1≤k≤n−1.e_k=\sum^k_{l=1}b_{kl}c^{(l)} \quad \text{ and } \quad c^{(k)}=\sum^k_{l=1}a_{kl}e_l,\quad 1\leq k\leq n-1.ek​=l=1∑k​bkl​c(l) and c(k)=l=1∑k​akl​el​,1≤k≤n−1.
上式中的 bijb_{ij}bij​ 为正交化矩阵的元素,aija_{ij}aij​ 是正交化矩阵的逆矩阵中的元素。这里参考了Klingenberg书上的记号,但其实他这里因果反了,不过问题不大。
因为在Gram-Schmidt正交化中,正交化矩阵的对角线是1除以模长(试试写出正交化矩阵),也就是bkk>0b_{kk}>0bkk​>0.下三角矩阵的逆还是下三角的,且有 akk=bkk−1>0a_{kk}=b^{-1}_{kk}>0akk​=bkk−1​>0.
所有由 ωi,i+1\omega_{i,i+1}ωi,i+1​ 的定义:
ωi,i+1=ei′⋅ei+1=biic(i+1)⋅ei+1=biiai+1,i+1>0,1≤i≤n−2.\omega_{i,i+1}=e'_i\cdot e_{i+1}=b_{ii}c^{(i+1)}\cdot e_{i+1}=b_{ii}a_{i+1,i+1}>0, \quad 1\leq i\leq n-2.ωi,i+1​=ei′​⋅ei+1​=bii​c(i+1)⋅ei+1​=bii​ai+1,i+1​>0,1≤i≤n−2.

其实总而言之,这个性质的来源是在构造Frenet标架时候,我们构造了前 n−1n-1n−1 个标架分量,给了第 nnn 个分量足够的自由度。

接下来的两个定理,是非常重的基本定理,能被称为“定理”,显然不知道比“命题”高到哪里去了,虽然有的命题实用性远高于定理。
这两个定理都很直观,证明属于之前所说的严格论证的描述性证明,所以就直接叙述结果吧。(具体证明请参见[1] p13-p15页)

有些时候是这样的,总有人会说数学总是非要证明显而易见的东西。
其实不是的,数学主体并不是围绕着显而易见且琐碎的东西研究(并不否认有个别是这样的),大家更关心的一般是更具有启发性,更有价值的东西,说到底还是数学品味的问题吧,虽然我现在尚且谈不上什么数学品味。

Theorem 3.2.5 (存在性定理)(Existence of curves with prescribed curvature functions)   在含 x0∈Rx_0\in \mathbb{R}x0​∈R 的领域内给定了 n−1n-1n−1 个可微函数作为曲率 κi(s),1≤i≤n−1\kappa_i(s), \quad 1\leq i\leq n-1κi​(s),1≤i≤n−1,其中前 n−2n-2n−2 个恒大于零。
那么存在一个包含 x0x_0x0​ 的区间 III,以及一个弧长参数化曲线c:I→Rnc:I\rightarrow \mathbb{R}^nc:I→Rn,它满足Frenet条件且曲率恰好为 κi(s)\kappa_i(s)κi​(s)。

这个定理说明,给定了曲率,我们可以相应的找到一条曲线与之对应,这个定理的证明从Frenet运动方程组出发,由微分方程解的存在唯一性,证明了有解,如果去看书的话要留意一下,他取出的X(s)X(s)X(s)的第一列向量T(s)T(s)T(s),对它做变上限积分,得到曲线 c(s)=∫x0sT(τ)dτc(s)=\int^s_{x_0}T(\tau)d\tauc(s)=∫x0​s​T(τ)dτ,这里其实就是把 T(s)T(s)T(s) 当成了e1(t)=c′(t)∣c′(t)∣e_1(t)=\frac{c'(t)}{|c'(t)|}e1​(t)=∣c′(t)∣c′(t)​.

接下来那么这条曲线是唯一的吗?上面定理只是在解Frenet运动方程组时候用到的微分方程解存在唯一的条件,但不能说明只有这一种构造方法啊。下面的定理给出了回答:

Theorem 3.2.6 (唯一性定理)记c:I→Rnc:I\rightarrow \mathbb{R}^nc:I→Rn 和 c~:I→Rn\tilde{c}:I\rightarrow \mathbb{R}^nc~:I→Rn 为两条满足Frenet条件的曲线,他们的各个曲率对应相等 κi(t)=κ~i(t),1≤i≤n−1\kappa_i(t)=\tilde{\kappa}_i(t), \quad 1\leq i\leq n-1κi​(t)=κ~i​(t),1≤i≤n−1,且运动速率相同:∣c′(t)∣=∣c~′(t)∣|c'(t)|=|\tilde{c}'(t)|∣c′(t)∣=∣c~′(t)∣,那么这两条曲线之间只差一个旋转等距变换,也就是,存在唯一一个等距变换 B:Rn→Rnx↦Rx+bB: \mathbb{R}^n\rightarrow \mathbb{R}^n \quad x\mapsto Rx+bB:Rn→Rnx↦Rx+b,使得c~=B∘c,\tilde{c}=B\circ c,c~=B∘c,且这里∣R∣=1|R|=1∣R∣=1.

证明也不难,因为任意两个单位切向量间存在唯一一个旋转正交变换,满足Rei(t0)=e~i(t0),1≤i≤n.Re_i(t_0)=\tilde{e}_i(t_0), \quad 1\leq i\leq n.Rei​(t0​)=e~i​(t0​),1≤i≤n.再利用这个正交阵,找到唯一一个使对应点重合的等距变换Bc(t0)=c~(t0)Bc(t_0)=\tilde{c}(t_0)Bc(t0​)=c~(t0​),接下来再证明这个等距变换对其他任意点都成立即可。

至此,Frenet标架及Frenet方程组就讲到这里。不得不说Frenet标架真是天才般的发明,非常期待微分几何后面会展现什么更有意思的发现。

下一篇主要是一些计算,计算二维三维空间中曲线的曲率,在非弧长参数曲线下该怎么算。

[1]W. Klingenberg.   A course in differential geometry.   Translated from the German by David Hoffman. Graduate Texts in Mathematics, Vol. 51. Springer-Verlag, 1978.

微分几何笔记(3) —— Frenet标架及Frenet方程组相关推荐

  1. 【高等数学笔记】多元函数微分学在几何上的应用、Frenet标架、空间曲线的曲率与挠率

    文章目录 一.空间曲线的切线与法平面 二.弧长 三.曲面的切平面与法线 四.Frenet标架 1. 法平面与切线 2. 密切平面与次法线 3. 从切平面与主法线 五.空间曲线的曲率与挠率 1. 曲率 ...

  2. 作业捷径! scipy库实现曲率、挠率、Frenet标架计算!

    本周作业算的曲率.挠率.Frenet标架实在算的让人秃头,废话不多说,我们直接上代码! #曲率.挠率.Frenet标架计算 from sympy import * def OuterProduct(A ...

  3. 机器人轨迹规划中经常用到的曲线特性小结:Cn连续与Gn连续、Frenet标架、曲率和挠率

    文章目录 1 光滑曲线,正则曲线 2 参数连续性与参数曲线的几何连续性 2.1 为什么要区分两种连续性? 2.2 Frenet标架.曲率.挠率 2.2.1 Frenet 标架 2.2.2 曲率 2.2 ...

  4. 光滑曲线_微分几何笔记(2) —— 曲线的参数化

    第二周讲完了Klingenberg的第一章Curves,做一点微小的笔记. 分成三个部分,本篇讲曲线的弧长参数:下一篇讲一般的Frenet标架及方程组:再下一篇讲二维三维空间曲线的curvature ...

  5. 光滑曲线_微分几何笔记(4) —— 二维三维空间中曲线的曲率以及环绕数

     本篇文章我们从一般化的 空间回到我们生活的 空间,看看低维空间中的曲线有哪些性质,主要计算下在非弧长参数下的曲线,曲率挠率的一般表达式. 最后引入环绕数的概念,讲讲怎么数曲线转了多少圈. 4.1 ...

  6. 微分几何笔记(4) —— 二维三维空间中曲线的曲率以及环绕数

    本篇文章我们从一般化的 Rn\mathbb{R}^nRn 空间回到我们生活的 R2,R3\mathbb{R}^2,\mathbb{R}^3R2,R3空间,看看低维空间中的曲线有哪些性质,主要计算下在非 ...

  7. 线性代数学习笔记(二十九)——方程组解的结构(一)

    停更2年多了,做事得有始有终,继续更新... 本篇笔记回顾了线性方程组解的三种情况,并讨论了齐次线性方程组解的结构,并介绍了齐次线性方程组解的相关性质.其中重点讨论了基础解系定义,以及基础解系的求法和 ...

  8. 微分几何笔记(1):概念与定义

    文章目录 概念与定义 微分流形 张量场与微分形式 联络与曲率 概念与定义 微分流形 拓扑流形: 设MMM是一个Hausdorff拓扑空间,若对每一点p∈Mp\in Mp∈M,都有ppp的一个邻域UUU ...

  9. 《计算方法》笔记之(二)线性代数方程组之Gauss消去法

    目录 Gauss 消去法 消去法的基本思想 消去法的消去过程 列主元 Gauss 消去法 本章的重点在于求解下列线性方程组: {α11x1+α12x2+⋯+α1nxn=β1α21x1+α22x2+⋯+ ...

  10. 《数学建模简明教程--基于python》学习笔记-第二章-绘图与解方程组-课后习题解答

    文章目录 准备工作 01 绘制双曲函数图像 02 绘制伽马函数图像 03 单个窗口绘制二次函数(k=1,2,...,6) 04 根据不同K值绘制子图 05 绘制二次曲面 05-1 绘制单叶双曲面 05 ...

最新文章

  1. linux进程间通信:消息队列实现双端通信
  2. 如何在MFC线程中使用控件的成员变量和函数
  3. 运维总监聂鑫:腾讯海量监控体系经验分享
  4. Windows 7 下IIS 7.5 结合Zend构建PHP集成开发环境
  5. python cannot import name main_virtualenv: cannot import name 'main'
  6. 应用市场中的应用转让
  7. python生成随机数方法_详解用python生成随机数的几种方法
  8. 从应用层修改系统日期和时间
  9. 网络工程师笔记--网络管理技术
  10. 奋战聊天机器人(二)语料和词汇资源
  11. MATLAB遗传算法调试
  12. php设计鸡兔同笼问题解法,鸡兔同笼问题口诀及解题方法(含经典应用题及答案)...
  13. 单层感知器的学习规则
  14. Speedoffice(word)怎么撤回上一步的操作
  15. 邮件开发:邮件作用、邮件服务器、电子邮箱与邮件客户端软件
  16. 笔记本自带键盘与IDEA快捷键冲突
  17. iOS14适配【解决iOS14下pop多层控制器至首页时,tabbar不显示问题】之问题分析篇
  18. Anytime Dynamic A* (AD*)算法分析
  19. xampp中MySQL启动错误问题
  20. 异步协议与同步协议:面向字符的协议BSC协议

热门文章

  1. https防流量劫持
  2. Unity 导入图片安卓和IOS自动转换格式ETC2或者ASTC
  3. thing JS笔记
  4. C++如何判断一个程序是 死锁 还是 死循环,如何进行问题定位与分析
  5. c语言oj1065统计,东方博宜OJ
  6. 2021年北京高校数学建模校际联赛题目出版社图书印制策略解题论文及程序
  7. fn键台式计算机在哪,fn键在哪里
  8. iOS上玩galgame的各类模拟器【完整版】
  9. 每日一题之 hiho1542 无根树变有根树
  10. python语音合成并播放_用Python写一个语音播放软件