1. 初遇 z=xy:直觉为什么会失效
1.1 从一条“意外”的曲线说起
第一次在数学课上看到 z=xy,大多数人脑子里冒出来的问题是:这不就是一个二元函数吗?能有什么特别的?如果你试着代几个点进去,比如 x=1、y=1 得 z=1,x=2、y=3 得 z=6,感觉平平无奇,像一张被慢慢抬起来的纸。
但真正把它的图像画出来时,你会看到一张扭曲的、像蝴蝶翅膀又像马鞍的东西——中间有个点,沿着一个方向看它是谷底,沿着另一个方向看它又是山脊。头一回见到这个图的人,十有八九会愣一下:这真的是一个二次曲面吗?为什么它不像是抛物面倒扣或者正放,偏偏是这么个形状?
其实答案并不复杂,关键在于“截面”。我们平常见到的二次曲面,比如 z=x²+y²,在任意水平高度切一刀,得到的都是一个圆;而 z=xy 在水平方向切一刀,得到的是一条双曲线。这一条性质就决定了它和“椭圆抛物面”从根子上分道扬镳,走向了另一类曲面——双曲抛物面,也就是俗称的马鞍面。
1.2 先做两个“零成本”实验
如果不借助任何绘图工具,只用纸笔也能感受 z=xy 的脾气。第一个实验:令 x=0,不管你给 y 取什么值,z 恒为 0。这意味着 z=xy 的图像完整地包含了 y 轴这条直线。同理,令 y=0,z 也恒为 0,图像也包含了 x 轴这条直线。
也就是说,这个曲面上确实有两条直线,而且它们在原点十字交叉。你可能会想:一个曲面里居然能装下两条直线,那它是不是一个平面?先别急着下结论。
接下来做第二个实验:让 y 始终等于 x。代进去,z=x·x=x²,这是一条开口向上的抛物线;再让 y 始终等于 -x,z=x·(-x)=-x²,这是一条开口向下的抛物线。同一个曲面,在一个方向上是“上凸”的抛物线,在另一个方向上却是“下凹”的抛物线。
到这里,马鞍面的灵魂已经露出来了:它不是一个单纯的“碗”,而是一个同时容纳了“谷”和“脊”的形状。原点恰恰是这两条抛物线的交汇处:沿 y=x 方向,原点是极小值点;沿 y=-x 方向,原点却是极大值点。这就是“鞍点”这个概念最直观的几何画面。
1.3 这类曲面的正式身份:二次曲面中的“叛逆者”
在解析几何里,二次曲面按特征值分成几大家族:椭球面、单叶双曲面、双叶双曲面、椭圆抛物面、双曲抛物面,还有一堆退化情形。马鞍面在分类里对应的就是“双曲抛物面”,标准方程一般写成:
z = x²/a² - y²/b²
注意这个“减号”。加号出来的是椭圆抛物面,一个碗;减号出来的是马鞍面,一个扭曲的翅膀。z=xy 乍看没有平方也没有减号,但它只需要做一个 45° 的坐标旋转,就能完全变成上面的标准形。这一点在后面的章节会仔细展开,因为它是理解“为什么是马鞍面”最关键的一步代数变形。
一句话先记住:马鞍面的本质,是在两个互相垂直的方向上,一个方向凹、一个方向凸,中间那个“莫比乌斯式”的转折点,就是鞍点。
2. 亲手“切”开马鞍面:截面法全解析
2.1 水平切一刀:双曲线全家福
理解 z=xy 最直观的方法,不是直接盯着三维图看,而是像切豆腐一样,一层一层地切开它。让 z 等于一个常数 c,方程变成 xy=c。
如果你中学学过解析几何,一眼就能认出来:这是反比例函数,是双曲线。当 c>0 时,比如 xy=1,双曲线的两支分别躺在第一象限和第三象限;当 c<0 时,比如 xy=-1,两支跑到第二象限和第四象限;当 c=0 时,退化成了两条直线 x=0 和 y=0。
这意味着,你把马鞍面放在案板上,水平一刀切下去,切口永远是一条双曲线。高度越往上,双曲线离原点越远,“翅膀”张得越开。把这一层层双曲线从低到高堆叠起来,再用一个光滑曲面把它们连起来,就是马鞍面。
这也是“双曲抛物面”这个名字里“双曲”二字的来源。很多人学二次曲面时只记公式,不记为什么叫这个名字;其实名字本身就是图像的自白:它由双曲线一层层“扫”出来,而它在另外两个方向的截面,却全是抛物线。
2.2 竖着切两刀:一上一下的抛物线
水平切完了,再竖着切。先沿着 y=x 这个方向切。什么叫“沿着 y=x 切”?就是取所有满足 y=x 的点,看这些点形成的截面曲线。代入之后,z=x²,这是一条顶点在原点、开口向上的抛物线。
再沿着 y=-x 方向切,z=-x²,这是一条顶点在原点、开口向下的抛物线。
这两条抛物线一条开口向上、一条开口向下,共同“挂”在原点上。你可以想象自己骑在一匹真正的马上:顺着马背的方向(对应其中一个截面),鞍座是向下凹的;而垂直于马背的方向(对应另一个截面),鞍座又是向上凸的。马鞍之所以能托住骑手,靠的正是这种两个方向凹凸刚好相反的曲面结构。
更妙的是,如果你不是沿着 45° 方向切,而是沿着任意直线 y=kx 切,得到的 z=kx² 仍然是一条抛物线。当 k>0 时开口向上,当 k<0 时开口向下。所以实际上,z=xy 在过 z 轴的每一个竖直平面里的截面全都是抛物线,只是有些开口朝上,有些开口朝下。只有 k=0 和 k=∞(即 x 轴或 y 轴方向)这两个特例,抛物线“压扁”成了直线。
2.3 切完之后的“形体语言”
截面法最有用的地方,在于它能把一个三维的形状,拆成一组二维的曲线来理解。水平截面全是双曲线,说明这个面沿“对角”方向是向外张开的;竖直截面全是抛物线,说明它沿斜方向有着明显的弯曲方向变化。
把这两组信息放在一起,马鞍面的全貌就清楚了:在原点附近,沿着直线 y=x 方向,曲面像一个山谷,两侧逐渐抬高;沿着 y=-x 方向,曲面像一个山脊,两侧逐渐降低;水平方向看,它像两个背对背的翅膀,向外无限延伸。
这就是“马鞍面”这个名字的全部理由:它的基本几何特征不是“凹”也不是“凸”,而是在不同方向上同时凹和凸。平面上你没法让一条曲线既向上弯曲又向下弯曲,但曲面可以——这是三维空间才能容纳的“分裂性格”。
3. 从代数上彻底搞懂:旋转与二次型视角
3.1 45° 旋转:把 xy 变成 x²-y²
很多人卡在一个点:标准双曲抛物面是 z=x²-y²,凭什么是 z=xy 也是双曲抛物面?它们看起来简直不像。这里需要做一个坐标旋转。
设新坐标:
u = (x + y) / √2
v = (x - y) / √2
反过来解就是:
x = (u + v) / √2
y = (u - v) / √2
把它们代进 z=xy:
z = [(u+v)/√2] · [(u-v)/√2] = (u² - v²) / 2
看到了吗?z=xy 在旋转 45° 之后,变成了 z=(u²-v²)/2,这就是标准的双曲抛物面形式,只不过系数是 1/2 而不是 1。系数只影响“坡度”的陡缓,不改变曲面的形状类别。所以 z=xy 和 z=x²-y² 本质上是同一个曲面,只是放置的方向差了 45°。
这一步旋转的意义很大。它告诉我们:判断一个二次曲面属于什么类型,不应该看它写在哪个坐标系里的样子,而应该看它的“二次型”部分在对角化之后表现出的符号结构。xy 这个交叉项没有平方,看起来人畜无害,但它在二次型里等价于“一个正方向减一个负方向”。
3.2 用 Hessian 矩阵识别鞍点
在多元微积分里,判断一个点是极大值、极小值还是鞍点,靠的是 Hessian 矩阵,也就是二阶偏导数组成的矩阵。对 z=xy 来说:
f_xx = 0,f_yy = 0,f_xy = 1
Hessian 矩阵写出来是:
H = [[0, 1], [1, 0]]
这个矩阵的特征值是 1 和 -1。一正一负,这正是“鞍点”的标志。如果两个特征值都为正,那是极小值点;都为负,那是极大值点;一正一负,那就是鞍点。
特征值的方向也有几何意义:特征值 1 对应的特征向量是 (1,1),也就是 y=x 方向,在这个方向上原点是一个极小点,因为二次项 z 的那一方向导数是正的;特征值 -1 对应的特征向量是 (1,-1),也就是 y=-x 方向,在这个方向上原点是一个极大点。这和我们 2.2 节看到的抛物线开口方向完全吻合:一个方向开口向上,一个方向开口向下。
所以,鞍点不是一个“不确定的极值点”,它有自己的独立身份:一个在各方向上看,凹凸性质彼此矛盾的临界点。在最优化理论里,鞍点意味着“沿某些方向还能下降、沿另一些方向却无法再上升”,这也是为什么很多迭代算法在鞍点处容易“卡壳”。
3.3 高斯曲率:为什么马鞍面可以“扭”成这样
还有一个经常被忽略但特别有趣的视角:微分几何里的高斯曲率。对显式函数 z=f(x,y),高斯曲率的公式是:
K = (f_xx · f_yy - f_xy²) / (1 + f_x² + f_y²)²
把 z=xy 的偏导数代进去,分子是 0·0 - 1² = -1,分母恒为正,所以这个曲面上每一个点的高斯曲率 K 都是负数。
高斯曲率为负,说明这个曲面在每个点都呈现“双曲型”的局部形状——沿一个方向弯、沿另一个方向反着弯。这也是为什么马鞍面能像薯片那样既可以被弯成一个方向,又可以被弯成另一个方向,而且不会像球面那样需要拉伸变形。生活中那些能叠在一起收纳的“薯片形”曲面,本质上都是负高斯曲率的曲面,它们天生就适合“互相嵌套”。Pringles 薯片的经典造型,就是 z=xy 这类双曲抛物面的实际应用。
4. 动手画一遍:可视化验证的完整流程
4.1 用 Python 五分钟画出马鞍面
理论说了一堆,亲眼看到比什么都管用。我建议你自己动手画一次这个曲面,其实非常简单。只需要 Python 的 matplotlib 和 numpy 就能实现:
import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D x = np.linspace(-3, 3, 200) y = np.linspace(-3, 3, 200) X, Y = np.meshgrid(x, y) Z = X * Y fig = plt.figure(figsize=(8, 6)) ax = fig.add_subplot(111, projection='3d') ax.plot_surface(X, Y, Z, cmap='coolwarm', alpha=0.9) # 标记原点 ax.scatter(0, 0, 0, color='black', s=50) ax.set_xlabel('x') ax.set_ylabel('y') ax.set_zlabel('z') ax.set_title('z = xy: 马鞍面') plt.show()运行这段代码,你会看到一个从四个角向外延伸的曲面,中间在原点处凹下去、又凸起来。如果觉得视觉上还不够“马鞍”,可以把视角旋转一下:让观察方向沿着 y=x 看,再沿着 y=-x 看,两个方向看到的图像完全不一样,一个像山谷一个像山脊。这个差异就是马鞍面最本质的视觉证据。
建议顺手把 z=XY 改成 z=XX - Y*Y 再画一张,你会发现两个图长相几乎一样,只是整体旋转了 45°。这就是 3.1 节旋转关系最直观的印证。
4.2 不写代码的办法:GeoGebra 与在线工具
如果你不想动代码,GeoGebra 3D 计算器是个特别方便的选择。打开网页版 GeoGebra,在输入框直接输入 z=x*y,点回车,它就能立刻渲染出马鞍面,而且支持鼠标拖拽旋转视角。比起 matplotlib 需要手动调整视角,GeoGebra 更适合教学演示——你在课堂上一边拖动视角一边给学生讲“沿这个方向是谷、沿那个方向是脊”,比黑板上画一百遍投影图都管用。
Wolfram Alpha 也支持直接输入 z=x*y,会返回三维图,还能顺手算 Hessian 矩阵、曲率等进阶指标。如果你只是想快速验证某个具体问题,Wolfram Alpha 是最省事的路径。
4.3 用排除法反向验证:画几个“邻居”曲面
要真正理解马鞍面,光画它自己还不够。把它的几个“近亲”一起画出来对比,你会瞬间明白分类的意义。
- z=x²+y²:椭圆抛物面,一个碗。水平截面是圆,所有方向都向上弯。
- z=x²-y²:标准双曲抛物面,旋转 45° 后的马鞍面,水平截面是双曲线。
- z=x²+2y²:椭圆抛物面,只是两个方向弯曲程度不同,仍然是一个碗。
- z=xy+2x+3y:仍然是一个马鞍面,因为二次部分没变,只是整体平移和倾斜了。
我个人的经验是,把 z=x²+y²、z=x²-y²、z=xy 三张图并排放在一起,学生基本一眼就能分清“碗”和“鞍”的区别。有时候一张好图比满黑板公式更顶用。
5. 常见误区与实战心得
5.1 误区一:以为“有交叉项”就不是标准二次曲面
很多初学者一看到 xy 就疑惑,觉得这种“交叉项”应该是高次曲面的特征。实际上二次曲面看的是变量的最高次数,xy 虽然是交叉项,但 x 和 y 都是一次方,乘积是二次,所以它和 x²、y² 是同一个级别的量。在二次曲面的完整方程里,交叉项和平方项完全可以是并存的,比如 x²+2xy+y² 同样是一个二次曲面(只不过它退化成了一个抛物柱面)。
判断一个二次曲面的类型,唯一的铁律是看它的二次型部分对角化之后的特征值符号分布,而不是看某一项是否“纯净”。
5.2 误区二:把“鞍点”当成“既不是极大也不是极小”
这个说法不算全错,但不精确。鞍点是一个临界点,它的 Hessian 矩阵既含有正特征值也含有负特征值。这意味着在鞍点处,沿某些方向你能看到极小值,沿另一些方向你看到的是极大值。它的身份不是“没有极值性”,而是“在不同方向上有矛盾的极值性”。
实际应用里这个区分很重要。比如在训练神经网络时,梯度为零的点除了极小值,还大量存在鞍点,尤其在损失函数维度极高的场景下,鞍点的数量远多于真正的极小值点。如果不懂鞍点的几何本质,很容易在高维空间里反复“卡住”而完全不自知。
5.3 误区三:以为马鞍面只有一种朝向
有些人画了 z=xy 的图,再看 z=x²-y² 的图,总觉得“哪里不一样”,然后就怀疑自己是不是画错了。其实两者是同一个曲面,只差一个 45° 的旋转。你还可以画出 z=2xy、z=-xy,这些图像形状一样,只是坡度和方向略有差异。真正的数学类别就一个:双曲抛物面。
判断两个曲面是不是同一类,靠的是旋转、平移以及非零缩放这些“刚体变换+均匀缩放”后能否互换。z=xy 能变成 z=x²-y²,说明它们是同一个几何对象的不同姿势。
5.4 实操中的一个土办法
如果手边没有电脑,但你想快速判断一个二次曲面大概长什么样,有一个特别实用的土办法:看它能不能先通过配方变成“平方加平方”、“平方减平方”或“只有交叉项”这三种形态。能配成两个平方相加,一般是碗状;能配成平方相减,一般是马鞍状;只有交叉项,也一定是马鞍状,只是还需要旋转才能看清。手动配一次方,比直接背分类表可靠得多。
我在实际教学里经常让学生先做这一步“配方体操”,再做坐标旋转,最后才画图验证。三步走下来,二次曲面分类基本就烂熟于心了,后面再遇到什么奇怪方程,先配方再说,方向感就有了。
说到底,z=xy 之所以是马鞍面,最核心的一条逻辑链就是:水平截面是双曲线、两个主方向上的竖直截面分别是向上和向下的抛物线、旋转 45° 后等于标准双曲抛物面、Hessian 矩阵特征值一正一负。四条证据指向同一个答案,而且每一条都能亲手验证。这也是我推荐所有学习这块内容的人不要只记结论的原因——自己切几刀、旋转一下坐标系、画一次图,“为什么是马鞍面”就再也不是一个需要死记硬背的问题了。