2013-08-06 19 views
6

Sono nuovo di Python a parte la conoscenza di base di matplotlib.pyplot. La mia domanda è come tracciare alcuni polinomi di grado superiore? Un metodo che ho visto era esprimere y in termini di x e quindi tracciare i valori. Ma ho 2 difficoltà:Tracciare un polinomio in Python

  1. ye x non possono essere separati.
  2. mi aspetto una curva chiusa (in realtà una curva complicata)

Il polinomio che sto cercando di trama è:

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 

Tutti i coefficienti c0-c27 sono noti. Come si traccia questa curva?

Inoltre, potresti suggerirmi delle risorse da dove posso imparare a disegnare e visualizzare in Python?

Precisazione: Scusate tutti per non averlo chiarito abbastanza. Non è un'equazione di una superficie (che coinvolge 3 variabili: x, y e z). Avrei dovuto mettere uno zero alla fine: 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

Se vi aspettate una curva, forse vuoi il tuo polinomio = 0 e vederlo come un'equazione implicita? Se vuoi solo "tracciare il tuo polinomio", poiché è una funzione di due variabili, il risultato è una superficie, non una curva piana. –

+0

sì, ha modificato la mia domanda. scusa per la confusione – Ally

+1

Si può dare un'occhiata a [questo] (http://stackoverflow.com/questions/2484527/is-it-possible-to-plot-implicit-equations-using-matplotlib) QUINTA domanda, e il * funzione plot_implicit * in [sympy] (http://docs.sympy.org/dev/modules/plotting.html). –

risposta

5

non sono sicuro pienamente capito la tua domanda, ma penso che si desidera un 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() 

e per le risorse: official documentation e pyvideos

+1

Forse un po '* plt.show() * manca alla fine? :-) –

+0

Sì :), sto usando 'ipython notebook --pylab = inline' quindi lo mostra immediatamente. Ma se stai scrivendo uno script ne hai bisogno. Risolto il problema, grazie :) –

2

l'equazione rappresenta una superficie 3D, che è possibile tracciare la creazione prima di una griglia a rete di x e y valori, raggiunto facilmente utilizzando NumPy:

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

X e Y sono entrambi array 2D contenenti le coordinate X e Y, rispettivamente.

Quindi è possibile calcolare z valori per ogni punto in questa rete, utilizzando i coefficienti noti:

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 

Dopo di che si può tracciare utilizzando 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()