首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在绘制具有给定约束的函数时,不会出现任何曲面。

在绘制具有给定约束的函数时,不会出现任何曲面。
EN

Stack Overflow用户
提问于 2022-01-22 08:14:55
回答 1查看 52关注 0票数 1
代码语言:javascript
复制
import matplotlib.pyplot as plt
from matplotlib import cm
from numpy import nan, linspace, meshgrid
x1=linspace(0,2,50)
x2=linspace(0,2,50)
x1, x2 = meshgrid(x1, x2)
f=((x1+1.5)**2+5*(x2-1.7)**2)*((x1-1.4)**2+0.6*(x2-0.5)**2)
f[-x1<=0] = nan
f[-x2<=0] = nan
f[3*x1-x1*x2+4*x2-7<=0] = nan
f[2*x1+x2-3<=0] = nan
f[3*x1-4*x2**2-4*x2<=0] = nan
fig, ax = plt.subplots(subplot_kw={"projection": "3d"})
ax.plot_surface(x1, x2, f, cmap=cm.jet,linewidth=0, antialiased=False,label="Kurva $f(x_1,x_2)$",alpha=1)
ax.set_xlabel('$x_1$')
ax.set_ylabel('$x_2$')
ax.set_zlabel('$f(x_1,x_2)$')
plt.show()

我想用给定的5个约束来绘制f=((x1+1.5)**2+5*(x2-1.7)**2)*((x1-1.4)**2+0.6*(x2-0.5)**2)

  • -x1<=0
  • -x2<=0
  • 3*x1-x1*x2+4*x2-7<=0
  • 2*x1+x2-3<=0
  • 3*x1-4*x2**2-4*x2<=0

当我运行上面的代码时,图中没有显示任何内容。我犯了什么错?怎么修呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-22 12:45:46

您将x1x2定义为:

代码语言:javascript
复制
x1=linspace(0,2,50)
x2=linspace(0,2,50)

因此,它们的每个值都在02之间。然后用以下内容编辑它们:

代码语言:javascript
复制
x1, x2 = meshgrid(x1, x2)

此时,x1x2不再是数组,而是矩阵。无论如何,和以前一样,它们中的每个元素仍然在02之间。

如果应用此筛选器:

代码语言:javascript
复制
f[-x1<=0] = nan

然后f的每个元素都变成nan,因为x1的所有元素都是正的,所以表达式-x1<=0x1的每个元素计算为False。同样的逻辑也适用于过滤器:

代码语言:javascript
复制
f[-x2<=0] = nan

因此,实际上,f的每个元素都是nan,而图是空的。

如果尝试移除上述两个筛选器,则会得到:

代码语言:javascript
复制
f[3*x1-x1*x2+4*x2-7<=0] = nan
f[2*x1+x2-3<=0] = nan
f[3*x1-4*x2**2-4*x2<=0] = nan

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70811099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档