如何使用matplotlib的fill_between填充线性规划最大外侧可行域
线性规划外侧可行域填充实现方案
实现思路:
- 当前约束均为≥类型,可行域的y值下限为所有约束线对应y值的最大值,上限取y轴设置的最大值10即可
- 调用matplotlib的
fill_between方法填充下限到上限之间的区域即可得到目标效果
修改后的完整代码如下:
import numpy as np import matplotlib.pyplot as plt %matplotlib inline x = np.linspace(0, 10, 2000) # 三个约束对应的y值 y1 = (-2 * x) + 6 y2 = 5 - x y3 = (20 - 2 * x) / 10 # 绘制约束线 plt.plot(x, y1, label = r'$2x_1+x_2\geq6$') plt.plot(x, y2, label = r'$x+y\geq5$') plt.plot(x, y3, label = r'$2x+10y\geq20$') # 计算可行域y的下限:所有约束线y值取最大,同时满足y≥0的边界要求 y_lower = np.maximum.reduce([y1, y2, y3, np.zeros_like(x)]) # 填充可行区域 plt.fill_between(x, y_lower, 10, where=(y_lower <= 10), color='#8ecae6', alpha=0.4) plt.xlim((0, 10)) plt.ylim((0, 10)) plt.xlabel(r'$x$') plt.ylabel(r'$y$') plt.legend() plt.show()
代码说明:
np.maximum.reduce可以批量计算每个x坐标下多个数组的最大值,加入np.zeros_like(x)是为了适配y≥0的边界约束,避免x值较小时约束线y为负导致填充出错fill_between的where参数用于过滤下限超过上限的无效区间,避免绘图警告,color和alpha参数可自行调整填充的颜色和透明度
内容的提问来源于stack exchange,提问作者marcel porteus
相关产品推荐
相关产品推荐

