从z=xy到马鞍面:双曲抛物面的几何本质与可视化
我第一次跟人聊起zxy这个曲面是在一节三维图形学的课间。当时我用网格线把这个方程渲染出来一个同学盯着旋转中的模型看了半天问了一句这不就是一个扭过去的平面吗为什么非要叫它“马鞍面”我愣了一下然后发现这个问题问得特别到位——因为单看三维线框很多人的确认不出它和马鞍有什么关系只有把方向、截面、曲率这几个角度全摆出来那个“鞍”的轮廓才会变得特别明显。这篇文章就把zxy彻底拆开聊一遍。它对应数学里的双曲抛物面也就是最常见的马鞍面。我会从坐标变换、剖面分析、临界点判定、可视化实操再到它为什么出现在薯片包装和建筑屋顶里一层层讲透。适合正在学多元微积分、三维图形、CAD建模或者单纯好奇“一个方程怎么能长得像马鞍”的读者。1. 先别急着画图zxy到底描述了一个什么样的“面”很多初学者第一次看到zxy脑子里默认它是二维坐标系里的一条曲线。但这里明明有三个变量x、y是输入z是输出。它描述的是三维空间里的一个点集所有满足(x, y, xy)的点合起来构成一个二维曲面。换句话说你把整个xy平面铺开在每一点上方或下方垂直抬升xy的高度最后得到的那个“地形”就是曲面。这句话说起来简单但直接想象形状很难。最笨也最有效的办法是看几条特殊轨迹当y0时z0。也就是说整条x轴在曲面上对应的高度全是零。当x0时z0。整条y轴也落在高度零的平面上。当xy时zx²。沿着第一、三象限的角平分线往上走曲面呈现一条开口向上的抛物线。当x-y时z-x²。沿着第二、四象限的角平分线往下走曲面呈现一条开口向下的抛物线。这四条观察已经能说明问题了在原点附近一个方向往上翘另一个方向往下弯中间还横着两条高度为零的轴。把这个形状往脑子里一放是不是已经有马鞍的雏形了但要注意这只是局部印象还没回答“为什么它是数学课本上那个标准的双曲抛物面”。提示如果“二元函数的图形是一个曲面”这个概念还有点陌生你可以把曲面想象成一块被弯折过的布。每个坐标点(x, y)对应布上的一根经线和纬线的交点z则决定这个点被顶起或压下的高度。2. 旋转坐标系45度“马鞍”的本质立刻现形很多教材直接告诉你zxy是双曲抛物面但不说为什么。一个很关键的隐藏步骤是把坐标系旋转 45 度方程会变成一眼能看穿的标准形式。设新坐标系(u, v)是由原坐标系绕z轴旋转 45 度得到的。旋转公式为u (x y) / √2 v (x - y) / √2反过来就是x (u v) / √2 y (u - v) / √2把x和y代入zxyz [(u v) / √2] · [(u - v) / √2] (u² - v²) / 2所以旋转之后zxy变成z u²/2 - v²/2这个形式太漂亮了。它是一个双曲抛物面的标准形态一个方向以抛物线方式上升另一个方向以抛物线方式下降中间的交点就是马鞍点。更一般地双曲抛物面的标准方程写成z x²/a² - y²/b²这里a b √2所以z x²/2 - y²/2再经过一次 45 度旋转变回xy。为什么这个变换能说明本质因为旋转坐标系不会改变曲面的几何形状只是改变了我们观察它的角度。原来的曲面在空间里就是那个马鞍形状只是在常规xy坐标系里它的“脊线”和“谷线”没有对齐坐标轴所以看起来像被扭了一下。旋转 45 度之后翘起的方向正好对准新坐标轴马鞍的特征就完全暴露了。这个结论也可以从二次型角度理解。把zxy看成关于x, y的二次型z [x y] · [[0, 1/2], [1/2, 0]] · [x; y]这个矩阵的特征值是1/2和-1/2一正一负。特征值为正的方向对应凸起的方向特征值为负的方向对应凹陷的方向。特征向量恰好就是(1, 1)和(1, -1)也就是我们旋转 45 度后对齐的那两个方向。所以这里有一个特别重要的认知判断一个二次曲面是不是马鞍面本质是看它对应的二次型矩阵是否有正有负的特征值。只要一正一负就注定有一个方向凸、一个方向凹必然出现马鞍形态。zxy正好是最简洁的例子。3. 用刀切出来的形状截面法解剖zxy如果说坐标变换是从代数上揭示本质那截面法就是从几何上亲眼看清楚这个曲面长什么样。方法很简单拿一个平面去切曲面看切出来的截线是什么曲线。3.1 水平截面双曲线从哪来先看最常见的水平截面zc其中c是常数。把zc代入方程得到xy c当c 0时这是一条位于第一、三象限的双曲线。当c 0时这是一条位于第二、四象限的双曲线。当c 0时方程变为xy 0也就是两条直线x0和y0可以理解为“退化”的双曲线。这个现象就是“双曲抛物面”里“双曲”二字的来源水平切出来的截面是一族双曲线。如果你从高处往下看等高线图会发现它呈现出一组双曲线簇中间夹着两条交叉的直线非常容易识别。3.2 垂直截面直线和抛物线交错再看垂直截面。固定xa用平面xa去切曲面z a · y这是一条直线。固定yb用平面yb去切曲面z b · x这也是一条直线。这说明zxy有一个很酷的性质在每个平行于xz平面或yz平面的截面里截线都是直线。换句话说这个曲面表面存在无数条直线三维空间里叫它直纹面。你甚至可以把它想象成用一根根直线“搭”出来的曲面把一根直线沿某个方向滑动同时连续改变它的倾斜角度就能扫出这个马鞍面。不过只看到直线还不够还要看“抛物线”从哪来。取一个倾斜的垂直截面比如沿着yx方向切一刀。换句话说在曲面上取参数曲线(x, y, z) (t, t, t²)投影到xz平面就是z x²这是一条开口向上的抛物线。再沿着y-x方向切一刀得到(t, -t, -t²)投影到xz平面是z -x²开口向下。所以这个曲面的完整图像是水平方向切出双曲线某些垂直方向切出直线另外一些垂直方向切出开口相反的抛物线。三条线索拼在一起“马鞍”的形象就立体起来了——前后方向是高起的抛物线脊左右方向是低陷的抛物线谷中间四角则向外延伸。实操建议如果你在用 GeoGebra 或 MATLAB 可视化不要只转三维图可以同时打开水平切面功能把c的值从-3连续滑到3。看到双曲线分支从第二、四象限跳到第一、三象限比看十段文字都有用。4. 中心那个“不上不下”的点为什么叫鞍点马鞍面最让人迷惑的是原点那个特殊位置。从直观上看它既像最低点沿着xy方向看它是谷底又像最高点沿着x-y方向看它是山脊。但在真正的局部极值定义里它既不是极大值也不是极小值。这个点就是鞍点。用微积分来判定。先求偏导∂z/∂x y ∂z/∂y x令两个偏导同时为零得到x 0, y 0所以原点是唯一的临界点。接下来要看二阶偏导构造 Hessian 矩阵H [[∂²z/∂x², ∂²z/∂x∂y], [∂²z/∂y∂x, ∂²z/∂y²]] [[0, 1], [1, 0]]这个矩阵的行列式是-1小于零。按照二元函数极值的判定法则行列式小于零说明这个临界点不是局部极大值也不是局部极小值而是鞍点。从特征值角度看得更清楚。Hessian 矩阵的两个特征值分别是1和-1对应的特征向量是(1, 1)和(1, -1)。特征值为正的方向函数表现出极小值行为特征值为负的方向函数表现出极大值行为。一个方向极小、一个方向极大正好就是“鞍点”的定义。这里可以对比一下几个常见二次曲面的临界点曲面标准方程Hessian 特征值临界点性质椭圆抛物面z x² y²2, 2局部极小值倒椭圆抛物面z -x² - y²-2, -2局部极大值双曲抛物面z x² - y²2, -2鞍点本文曲面z xy1, -1鞍点鞍点这个概念在多元微积分里是重点也是很多人容易混淆的地方。它跟“拐点”不是一回事拐点是一元函数凹凸性改变的位置鞍点则是多元函数沿不同方向具有不同凹凸性的位置。zxy是最好的记忆模型因为它用最少的符号承载了全部关键性质。注意判断鞍点不能只看 Hessian 行列式小于零要确保你求的是临界点也就是一阶偏导都为零。否则随便找一个非临界点谈“鞍点”是没有意义的。5. 自己动手画马鞍面从手绘到代码实操理论讲完了现在说怎么把马鞍面真正画出来。画法不同看到的细节也不同。5.1 手绘思路三步画出能看懂的草图如果你在考试或笔记里想快速画马鞍面不需要做精确的三维透视图。按下面三步画出来的图已经足够说明问题画一组水平截面双曲线在xy平面上画出xy±1、xy±2的轮廓注意c0在第一三象限c0在第二四象限。画两条相交的直线x0和y0代表高度为零的位置这两条直线在原点交叉。标出两条抛物线轨道在yx方向画一个向上开口的抛物线在y-x方向画一个向下开口的抛物线。这三样东西放在一起观感上就是一个被前后向上弯、左右向下弯的曲面。如果你觉得不够立体可以再加一个从侧面看的剖面强调“直线截面”的存在。5.2 Python 可视化一次看清全貌现在最方便的是用 Python 的matplotlib做三维曲面图。最小可用代码如下import numpy as np import matplotlib.pyplot as plt x np.linspace(-3, 3, 400) y np.linspace(-3, 3, 400) X, Y np.meshgrid(x, y) Z X * Y fig plt.figure(figsize(10, 7)) ax fig.add_subplot(111, projection3d) ax.plot_surface(X, Y, Z, cmapRdBu, alpha0.9, linewidth0, antialiasedTrue) ax.set_xlabel(x) ax.set_ylabel(y) ax.set_zlabel(z) ax.set_title(r$z xy$) plt.show()运行后你会看到经典的红蓝马鞍面。但光是看三维图还不够我建议同时画一个等高线图plt.figure(figsize(8, 6)) contour plt.contour(X, Y, Z, levels[-4, -2, -1, -0.5, 0, 0.5, 1, 2, 4], cmapRdBu) plt.clabel(contour, inlineTrue, fontsize8) plt.axhline(0, colorgray, linewidth0.5) plt.axvline(0, colorgray, linewidth0.5) plt.gca().set_aspect(equal) plt.title(等高线双曲线簇) plt.show()等高线图里那一组组双曲线就是第 3 节说的水平截面。这里有个绘制细节值得提一下x、y的取值范围对称且足够大比如[-3, 3]否则曲面边缘看起来像被切掉一块容易误读鞍点的形状。如果你用plot_surface时发现曲面有奇怪的锯齿把antialiasedTrue打开并把网格点数提高到 300 以上。5.3 最容易犯的绘图错误坐标轴比例画马鞍面时有一个特别常见的坑三维坐标系三个轴的比例不一致。matplotlib默认会拉伸各轴导致zxy看起来比实际更平或更陡。比如原本标准圆的截面在拉伸后变成椭圆原本正交的脊谷线在视觉上也不再正交。解决方法是手动设置三个轴的比例ax.set_box_aspect((1, 1, 1))或者设置相等的坐标范围ax.set_xlim(-3, 3) ax.set_ylim(-3, 3) ax.set_zlim(-9, 9)严格说zxy在原点附近的形状跟z(x²-y²)/2只是差了 45 度旋转。如果你把标准鞍面zx²-y²旋转 45 度就得到z2xy。很多同学在网上下载模型时发现两个曲面长得像但又不完全一样就是因为没有意识到这个旋转关系。6. 马鞍面在真实世界里无处不在很多人觉得马鞍面只是微积分教材里的玩具但它在工程和日常生活中出现的频率之高超出想象。6.1 从薯片到屋顶双曲抛物面的工程优势最经典的例子是薯片。一片标准薯片的形状就是一个马鞍面或者说双曲抛物面的一小部分。为什么厂商要费劲把薯片做成马鞍形而不是一个平坦的圆片原因有三力学强度高马鞍面在空间上弯曲比平面薄片更能抵抗弯曲变形不容易碎。可堆叠多个马鞍面可以整齐叠放在一起节省包装空间。结构优雅双曲抛物面是直纹面意味着它可以用直线元素构建制造模具和切割路径更简单。建筑工程里也有大量例子。墨西哥建筑师费利克斯·坎德拉就特别喜欢用双曲抛物面壳结构做屋顶比如著名的宇宙射线实验室。双曲抛物面的优势在于它由直线生成混凝土浇筑时模板可以用直木条搭出曲面同时它兼具曲面刚度可以做得很薄却非常稳固。你下雨天路过某些高架桥的遮阳棚如果看到那种反向弯曲的波浪形屋顶很可能就是双曲抛物面。6.2 机器学习与博弈论鞍点成了“麻烦制造者”马鞍面在现代计算领域还有一个更抽象的应用优化问题中的鞍点。训练神经网络时损失函数在高维空间里可能有大量鞍点而不是只有局部最小值点。想象一下你站在zxy的原点沿着一个方向看是山谷沿着另一个方向看是山脊。普通的梯度下降法很容易在鞍点附近减速因为梯度在这些区域接近零但又不像局部极小值那样容易通过微小扰动逃离。更戏剧化的例子是生成对抗网络。生成器和判别器的博弈过程本质上是在寻找一个极小极大问题的鞍点而不是单纯的最小值。理解了zxy上的鞍点你就能理解为什么很多 GAN 训练会不稳定——因为它们的目标函数天然存在马鞍结构而梯度下降的逻辑是为“找最低点”设计的遇到马鞍点自然会犹豫。经济学的纳什均衡、博弈论的混合策略也都可以用鞍点来理解一方希望某个指标最大化另一方希望它最小化最后稳定在的平衡点往往就是某个广义鞍点。6.3 一个需要澄清的误解马鞍面是极小曲面吗最后我得纠正一个常见误解。很多人看到马鞍面的肥皂膜效果或者听说“悬链面”也是马鞍形就以为zxy是极小曲面。这是不对的。极小曲面的定义是平均曲率为零。对函数型曲面zf(x,y)平均曲率公式为H ((1f_y²) f_xx - 2 f_x f_y f_xy (1f_x²) f_yy) / [2 (1f_x²f_y²)^(3/2)]代入f(x,y)xy得到f_xyf_yxf_xx0f_yy0f_xy1于是H -2xy / [2(1x²y²)^(3/2)] -xy / (1x²y²)^(3/2)它在原点处为零但在其他地方并不为零。比如在x1, y1处平均曲率是负值。所以zxy不是极小曲面它只是处处有负高斯曲率形状上很像一片被拉伸的马鞍膜。真正肥皂泡形成的极小曲面需要满足更复杂的方程常见的例子是悬链面。这个澄清不是钻牛角尖。如果你在学微分几何或者做物理模拟很容易被表面形状骗到。判断一个曲面是不是极小曲面必须先算出平均曲率而不是看它“弯得是否好看”。我自己现在教别人认马鞍面一定会让他们先把zxy旋转 45 度再看截面最后才回到原方程。很多抽象概念一旦找到那个“旋转视角”一下子就通了。如果你手边有 Python 或者 GeoGebra花三分钟把代码跑一遍从不同方向转几圈比背十遍“双曲抛物面”都管用。数学里很多看似奇怪的曲面本质上都是某个熟悉形状换了一个观察角度而已。
上一篇/下一篇内容由系统自动关联
返回资讯列表 →