2013-08-06 20 views
6

Jestem nowy w pisaniu Pythona poza pewną podstawową wiedzą o matplotlib.pyplot. Moje pytanie brzmi: jak wykreślić wielomiany wyższego stopnia? Jedną z metod, którą zobaczyłem, było wyrażenie y w kategoriach x, a następnie narysowanie wartości. Ale mam 2 trudności:Wykreślanie wielomianu w Pythonie

  1. yi x nie mogą być rozdzielone.
  2. Oczekuję zamkniętą krzywą (rzeczywiście skomplikowana krzywą)

Wielomian Próbuję działki to:

c0 + c1*x + c2*y +c3*x*x + c4*x*y + c5*y*y + c6*x**3 + c7*x**2*y + ..... c26*x*y**5 + c27*y**6 

Wszystkie współczynniki c0 do c27 są znane. Jak wykreślić tę krzywą?

Czy mógłbyś też zasugerować mi zasoby, z których mogę się nauczyć kreślenia i wizualizacji w Pythonie?

Wyjaśnienie: Przepraszamy wszystkich za niewystarczające wyjaśnienie. Nie jest to równanie powierzchni (które obejmuje 3 zmienne: x, y i z). Powinienem był umieścić zero na końcu: c0 + c1 * x + c2 * y + c3 * x * x + c4 * x * y + c5 * y * y + c6 * x ** 3 + c7 * x ** 2 * y + ..... C26 * x * y ** 5 + c27 * y ** 6 = 0

+1

Jeśli oczekujesz krzywą, może chcesz wielomian = 0 i postrzegasz go jako niejawne równanie? Jeśli chcesz tylko "wykreślić wielomian", ponieważ jest to funkcja dwóch zmiennych, wynikiem jest powierzchnia, a nie krzywa. –

+0

tak, zredagowałem moje pytanie. przepraszam za zamieszanie – Ally

+1

Możesz rzucić okiem na [to] (http://stackoverflow.com/questions/2484527/is-it-possible-to-plot-implicit-equations-using-matplotlib) Pytanie SO, a * funkcja plot_implicit * w [sympy] (http://docs.sympy.org/dev/modules/plotting.html). –

Odpowiedz

5

nie jestem pewien, czy w pełni zrozumiałe pytanie, ale myślę, że chcesz surface plot

import numpy as np 
import matplotlib.pyplot as plt 
from mpl_toolkits.mplot3d import Axes3D 

x = np.arange(-5, 5, 0.25) 
y = np.arange(-5, 5, 0.25) 
X, Y = np.meshgrid(x, y) 
F = 3 + 2*X + 4*X*Y + 5*X*X 

fig = plt.figure() 
ax = fig.add_subplot(111, projection='3d') 
ax.plot_surface(X, Y, F) 
plt.show() 

i dla zasobów: official documentation i pyvideos

+1

Może trochę * plt.show() * brakuje w końcu? :-) –

+0

Tak :), używam 'ipython notebook --pylab = inline', więc pokazuje to od razu. Ale jeśli piszesz skrypt, potrzebujesz go. Naprawiono to, dziękuję :) –

2

równanie reprezentuje powierzchni 3D, które można wykreślić tworząc pierwszą siatkę oczek x i y wartości, łatwo osiągnąć za pomocą numpy:

X,Y = np.meshgrid(np.linspace(xmin, xmax, 100), np.linspace(ymin, ymax, 200)) 

X i Y są zarówno tablicami 2D zawierającymi współrzędne X i Y, odpowiednio.

Następnie można obliczyć z wartości dla każdego punktu w tej siatki, wykorzystując znane współczynniki:

Z = c0 + c1*X + c2*Y +c3*X*X + c4*X*Y + c5*Y*Y + c6*X**3 + c7*X**2*Y + ..... c26*X*Y**5 + c27*Y**6 

Po tym można wykreślić ją za pomocą matplotlib:

from mpl_toolkits.mplot3d import Axes3D 
import matplotlib.pyplot as plt 
ax = plt.subplot(111, projection='3d') 
ax.plot_surface(X, Y, Z) 
plt.show()