如何在Julia的Plots.jl中高亮线性优化问题的可行域?
线性规划可行域可视化方案
方法一:Python + Matplotlib 代码实现
先明确各约束对应的边界与区域:
-3x + 3y <= 5→ 直线y = (3x + 5)/3的下方区域2x + 3y >= 9→ 直线y = (9 - 2x)/3的上方区域x >= 0、y >= 0→ 第一象限区域
可行域是这四个区域的交集,先计算关键交点:
- 两条约束直线的交点:解方程组
-3x+3y=5和2x+3y=9,得x=0.8,y≈2.47 y=(9-2x)/3与y=0的交点:x=4.5,y=0
以下是完整代码实现:
import numpy as np import matplotlib.pyplot as plt # 生成覆盖可行域的x轴取值 x = np.linspace(0, 5, 100) # 计算各约束边界的y值 y1 = (3*x + 5)/3 # -3x+3y=5的直线 y2 = (9 - 2*x)/3 # 2x+3y=9的直线 # 创建画布 plt.figure(figsize=(8, 6)) # 绘制所有约束边界线 plt.plot(x, y1, label=r'$-3x + 3y = 5$', color='blue', linestyle='--') plt.plot(x, y2, label=r'$2x + 3y = 9$', color='red', linestyle='--') plt.axvline(x=0, color='gray', label=r'$x=0$') plt.axhline(y=0, color='gray', label=r'$y=0$') # 填充可行域:限定x的有效区间,取两条约束线的上下边界 x_fill = np.linspace(0.8, 4.5, 100) y_fill_low = (9 - 2*x_fill)/3 y_fill_high = (3*x_fill + 5)/3 plt.fill_between(x_fill, y_fill_low, y_fill_high, color='green', alpha=0.3, label='可行域') # 设置图表基础属性 plt.xlabel('x') plt.ylabel('y') plt.title('线性规划可行域可视化') plt.legend() plt.grid(True, alpha=0.2) plt.xlim(-0.5, 5) plt.ylim(-0.5, 4) plt.show()
代码细节说明:
fill_between专门用于填充两条曲线间的区域,这里指定了可行域的x区间与上下边界alpha参数控制填充透明度,避免遮挡边界线- 手动限制坐标轴范围,让可行域展示更清晰
方法二:无代码工具(GeoGebra)
如果不想编写代码,用GeoGebra操作更便捷:
- 打开GeoGebra(网页版或本地客户端均可)
- 在输入栏依次输入约束条件:
y <= (3x + 5)/3y >= (9 - 2x)/3x >= 0y >= 0
- 软件会自动渲染所有区域,找到它们的交集(可行域)后,右键点击该区域选择「着色」即可完成高亮
内容的提问来源于stack exchange,提问作者alex_nas
相关产品推荐
相关产品推荐

