如何在Matplotlib 3D图中绘制xy平面约束等高线及对应f(x,y)点
拉格朗日乘数法可视化优化
要实现只保留xy平面内的约束等高线,并标记约束线上方的曲面点,可按以下方式修改代码:
修改后的代码
import matplotlib.pyplot as plt from matplotlib import cm import numpy as np fig, ax = plt.subplots(subplot_kw={"projection": "3d"}) X = np.arange(-5,5,0.5) Y = X X, Y = np.meshgrid(X, Y) Z = 50 - X**2 - Y**2 surf = ax.plot_surface(X, Y, Z, cmap=cm.coolwarm, alpha=0.7) ax.set_zlim(0, 50) # 定义约束条件g(x,y)=c,这里取c=16作为示例 c = 16 g = X**2 + Y**2 # 绘制xy平面(z=0)上的单一约束等高线 ax.contour(X, Y, g, levels=[c], colors='k', zdir='z', offset=0) # 提取约束线上的点并计算对应Z值 mask = np.isclose(g, c, atol=0.1) # 允许微小误差匹配约束条件 x_constraint = X[mask] y_constraint = Y[mask] z_constraint = Z[mask] # 标记约束线上方的曲面点 ax.plot3D(x_constraint, y_constraint, z_constraint, 'ro', markersize=4) plt.show()
关键修改说明
- 单一约束等高线:通过
levels=[c]指定只绘制约束值为c的等高线,zdir='z'和offset=0确保等高线落在xy平面(z=0)上,colors='k'设置为黑色便于区分。 - 标记曲面对应点:用
np.isclose筛选出近似满足约束条件的点,计算这些点在曲面Z=f(x,y)上的对应值,再用plot3D以红色圆点标记。
内容的提问来源于stack exchange,提问作者abstract_je
相关产品推荐
相关产品推荐

