在Julia中绘制线性方程/不等式图形

4

假设我们有一些线性不等式,如2x-5y<=6x+y>=0,我们该如何绘制这两个不等式?如果有多个这样的不等式,我们该如何尝试用图形解决它们呢?

4个回答

5
您可以尝试使用ImplicitEquations工具解决问题:
using ImplicitEquations, Plots
f(x,y) = 2x - 5y - 6
g(x,y) = x + y - 0
plot((f < 0) & (g > 0))

导致在默认矩形[-5,5],[-5,5]区域内产生以下结果:

渲染图像


1
我遇到了MethodError: no method matching isless(::typeof(f), ::Int64)的问题。 - jawad mansoor
1
为了避免类型盗版,操作符 >< 已被 Unicode 符号 \gg[tab]\ll[tab](或 Lt(f, 0) & Gt(g, 0))所取代。 - jverzani
抱歉,我不了解您的意思。 - jawad mansoor

3

将y隔离出来,我们可以看到两个不等式都是形如y>=ax+b的。这意味着我们可以使用绘图、相应等式的函数以及函数在区间上取得的最大值来绘制这些不等式。

using Plots
f(x) = (2/5)x-6/5
g(x) = -x
X = -10:10
the_max = max(f(X[end]), g(X[1]))

plot(X, f, fill = (the_max, 0.5, :auto))
plot!(X, g, fill = (the_max, 0.5, :auto))

这给了我们enter image description here

如果第二个方程的不等式被反转,我们会得到

using Plots
f(x) = (2/5)x-6/5
g(x) = -x
X = -10:10
the_max = max(f(X[end]), g(X[1]))
the_min = min(f(X[1]), g(X[end]))
plot(X, f, fill = (the_max, 0.5, :auto))
plot!(X, g, fill = (the_min, 0.5, :auto))

显然,如果有许多这样的不等式需要绘制,您将希望自动化查找最小值和最大值的过程。此外,这种重写取决于线性,但是您的问题特别提到它们是线性的。 enter image description here

2
您可以在要绘制的区间上创建一个由xy组成的矩阵(使用meshgrid的版本),然后让u=(2x-5y.<=6)v=(x+y.>=0)。当方程被满足时,u将为1,v也是如此。您可以使用Plots.jl中的热图、等高线图或散点图来绘制(x,y,u)(x,y,v)(通过绘图的粗细程度可以看出是否选择了足够精细的网格)。对于重叠部分,您可以绘制z=(u.==v)

1
请查看IntervalConstraintProgramming.jl(仍在积极开发中...)

那个包看起来很棒。 - jverzani
亲爱的 @David,我们可以使用 "IntervalConstraintProgramming.jl" 来绘制 3D 图吗?如果可以,你能否分享一个 3D 图的例子? - Kanishk Sharma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接