【问题标题】:Plot non-polynomial multivariate implicit equation绘制非多项式多元隐式方程
【发布时间】:2020-05-23 12:01:16
【问题描述】:

我目前正在尝试使用 matplotlib 绘制以下方程:

-4xy + x² - y² + 4(x³y - xy³) = 0

我不想通过简单地分配x = np.linspace(-5,5) 然后将其放入我的等式来解决这个糟糕的等式。

我想知道是否可以直接用matplotlib.pyplot 绘制解决方案?我能够使用 Geogebra 快速快速地绘制函数,所以我想这也应该可以使用 python。但是,我还没有发现任何其他问题。有人有什么想法吗?

【问题讨论】:

  • “Geogebra 正在这样做”是什么意思?它究竟是做什么的?通常,如果一个程序绘制一个函数,则无法针对所有值 x 和 y 评估该函数以绘制曲面。
  • 如果您在 Geogebra 输入中写入“4x³ y + x² - 4x y³ - 4x y - y² = 0”,它将绘制相应的解决方案线。
  • 我明白了。在引擎盖下,它肯定会评估值然后绘图。您可以尝试做的是创建一个函数,该函数接受函数的定义,然后立即为您绘制它,但您不会绕过评估函数。计算机应该怎么知道在哪里绘制东西?

标签: python matplotlib math plot graph


【解决方案1】:

一种方法是使用 Sympy 的 plot_implicit 函数。

代码:

from sympy import plot_implicit, symbols, Eq

x, y = symbols('x y')

plot_implicit(Eq(-4*x*y+x**2-y**2+4*(x**3-x*y**3), 0),
              adaptive=False,
              points=1000)

输出:

在底层,它使用网格来决定是否在图表上的每个点绘制函数。这也是 Geogebra 将在幕后做的事情。要在 vanilla matplotlib 中应用这种方法,我们可以使用等高线图:

代码:

import numpy as np
import matplotlib.pyplot as plt

# Plot axes in middle
fig, ax = plt.subplots()
ax.spines['left'].set_position('center')
ax.spines['bottom'].set_position('center')
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')

# Set up mesh grid
x = y = np.linspace(-1.0, 1.0, 100)
X, Y = np.meshgrid(x,y)

# Plot contour
ax.contour(X, Y, -4*X*Y+X**2-Y**2+4*(X**3-x*Y**3), [0])
plt.show()

输出:

【讨论】:

    猜你喜欢
    • 2011-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-17
    • 1970-01-01
    相关资源
    最近更新 更多