我尝试使用Python的matplotlib来纠正可行区域的填充
这些是不平等:
x = np.linspace(0, 2000, 1000)
y1 = (3600 - 3*x) / 5
y2 = (1600 - x) / 2
y3 = (48000 - 50*x) / 20
字符串
我只关心可行域,但我不能得到正确的约束
fig, ax = plt.subplots()
ax.plot(x, y1, label='3x+5y<=3600')
ax.plot(x, y2, label='x+2y<=1600')
ax.plot(x, y3, label='50x+20y<=48000')
ax.fill_between(x, 0, y3, where=(y1<= (3600-3*x)/5) & (y2<= (1600-x)/2) & (y3<= (48000-50*x)/20), alpha=0.2)
# plot the vertices
for vertex in vertices:
ax.plot(vertex[0], vertex[1], 'ro')
plt.xlim(xmin=0)
plt.ylim(ymin=0)
plt.xlabel('x')
plt.ylabel('y')
plt.title('Feasible Region')
plt.legend()
plt.show()
型
的数据
正如你所注意到的,可行域没有被正确填充,尽管逻辑对我来说似乎很好。
如何修复fill_between参数,使其正确填充?
2条答案
按热度按时间zd287kbt1#
首先,让我解释一下为什么你的代码不起作用。如果仔细阅读
fill_between
文档,您会发现where
参数用于限制填充区间的左右范围。所以,如果你做了where=(x<=500)
,这条线会停在x=500
。在这种情况下,因为所有的线都是可行域顶部的边界,所以可以使用
np.minimum.reduce
来获得所有线的元素最小值,从而获得可行域的顶部。然后,您可以使用where
参数将区域限制为所有线都在0以上的区域(如果没有它,阴影将进一步向下延伸到右侧,尽管您不会看到指定的限制)。字符串
的数据
bsxbgnwa2#
不使用
fill_between
方法,而是使用fill
方法来正确填充可行域。字符串
的数据