Сюжет неполиномиального многомерного неявного уравнения - PullRequest
2 голосов
/ 07 февраля 2020

В настоящее время я пытаюсь построить следующее уравнение с помощью matplotlib:

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

Я не хочу решать это ужасное уравнение, чтобы построить его, просто назначив x = np.linspace(-5,5) и затем поместив его в мой уравнение.

Мне интересно, если можно построить решение напрямую с matplotlib.pyplot? Я могу хорошо и быстро построить функцию с помощью геогебры, поэтому я полагаю, что это также возможно с помощью python. Однако я не нашел других вопросов по этому поводу. У кого-нибудь есть идеи?

1 Ответ

4 голосов
/ 07 февраля 2020

Один из способов сделать это - использовать функцию 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)

Выход:

enter image description here

Под капотом используется сетка me sh, чтобы решить, следует ли строить функцию в каждой точке графика. , Это то, что 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()

Вывод:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...