2016-02-14 16 views
9

Qual è il modo migliore per creare un'equazione Sympy, fare qualcosa come prendere la derivata e quindi tracciare i risultati di tale equazione?Utilizzo di equazioni Sympy per il plotting

Ho la mia equazione simbolica, ma non riesco a capire come creare una matrice di valori per la stampa. Qui è il mio codice:

from sympy import symbols 
import matplotlib.pyplot as mpl 

t = symbols('t') 
x = 0.05*t + 0.2/((t - 5)**2 + 2) 

nums = [] 
for i in range(1000): 
    nums.append(t) 
    t += 0.02 

plotted = [x for t in nums] 

mpl.plot(plotted) 
mpl.ylabel("Speed") 
mpl.show() 

Nel mio caso ho appena calcolata la derivata di questa equazione, e ora voglio tracciare la velocità x, quindi questo è piuttosto semplificata.

risposta

11

È possibile utilizzare numpy.linspace() per creare i valori dell'asse x (x_vals nel codice di seguito) e lambdify().

from sympy import symbols 
from numpy import linspace 
from sympy import lambdify 
import matplotlib.pyplot as mpl 

t = symbols('t') 
x = 0.05*t + 0.2/((t - 5)**2 + 2) 
lam_x = lambdify(t, x, modules=['numpy']) 

x_vals = linspace(0, 10, 100) 
y_vals = lam_x(x_vals) 

mpl.plot(x_vals, y_vals) 
mpl.ylabel("Speed") 
mpl.show() 

(miglioramenti suggeriti dai asmeurer e MaxNoe)

enter image description here

In alternativa, è possibile utilizzare di sympy plot():

from sympy import symbols 
from sympy import plot 

t = symbols('t') 
x = 0.05*t + 0.2/((t - 5)**2 + 2) 

plot(x, (t, 0, 10), ylabel='Speed') 
+1

E 'meglio usare 'lambdify' per creare una espressione amichevole numpy dall'espressione sympy che a noi e sottotitoli. – asmeurer

+1

Sarà ancora più veloce se esegui 'lambdify (t, x, modules = ['numpy'])' e 'y_vals = lam_x (x_vals)' – MaxNoe

+0

@asmeurer Infatti, 'lambdify()' invece della mia inefficiente lista di comprensione con 'subs()', lo rende 4 volte più veloce. –