如何使用Matplotlib与Numpy绘制3D不等式(曲面图形式)
使用Matplotlib与Numpy绘制3D不等式组的曲面图
首先需要明确:你的不等式组存在有效区域约束条件,先推导变量的有效范围:
- 由
y > 1/4和y < 2x - 1可得2x - 1 > 1/4→x > 5/8 - 由
z > 1/3和z < x + y - 1可得x + y - 1 > 1/3→y > 4/3 - x,结合y < 2x -1可得4/3 - x < 2x -1→x > 7/9 - 最终x的有效范围是
(7/9, 1),y的范围是(max(1/4, 4/3 -x), 2x -1),z的范围是(1/3, x+y-1)
实现代码(曲面图形式)
import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D # 创建画布和3D坐标轴 fig = plt.figure(figsize=(10,8)) ax = fig.add_subplot(111, projection='3d') # 生成x的有效区间采样点 x = np.linspace(7/9, 1, 100) # 计算y的上下边界 y_lower = np.maximum(1/4, 4/3 - x) y_upper = 2 * x - 1 # 绘制y的上下边界曲面(沿z轴拉伸) x_grid, z_grid = np.meshgrid(x, np.linspace(1/3, 1, 100)) y_lower_surf = np.tile(y_lower, (100, 1)) y_upper_surf = np.tile(y_upper, (100, 1)) ax.plot_surface(x_grid, y_lower_surf, z_grid, alpha=0.3, color='blue') ax.plot_surface(x_grid, y_upper_surf, z_grid, alpha=0.3, color='blue') # 绘制z的上下边界曲面 x_grid, y_grid = np.meshgrid(x, np.linspace(y_lower.min(), y_upper.max(), 100)) # 筛选符合y范围的网格点 mask = (y_grid > np.maximum(1/4, 4/3 - x_grid)) & (y_grid < 2 * x_grid - 1) z_lower = np.full_like(x_grid, 1/3) z_upper = x_grid + y_grid - 1 # 仅绘制有效区域内的z曲面 ax.plot_surface(x_grid[mask], y_grid[mask], z_lower[mask], alpha=0.3, color='green') ax.plot_surface(x_grid[mask], y_grid[mask], z_upper[mask], alpha=0.3, color='green') # 绘制x的边界平面 y_grid_z, z_grid_z = np.meshgrid(np.linspace(y_lower.min(), y_upper.max(), 100), np.linspace(1/3, 1, 100)) ax.plot_surface(np.full_like(y_grid_z, 7/9), y_grid_z, z_grid_z, alpha=0.3, color='red') ax.plot_surface(np.full_like(y_grid_z, 1), y_grid_z, z_grid_z, alpha=0.3, color='red') # 设置坐标轴标签 ax.set_xlabel('X') ax.set_ylabel('Y') ax.set_zlabel('Z') # 显示图形 plt.show()
代码说明
- 先通过数学推导锁定变量有效范围,避免绘制无意义区域
- 使用
plot_surface绘制每个不等式对应的边界曲面,通过alpha参数设置透明度,清晰展示曲面围成的空间区域 - 用
mask筛选符合条件的网格点,仅保留有效区域内的曲面绘制
内容的提问来源于stack exchange,提问作者user23021439
相关产品推荐
相关产品推荐

