2016-02-14 20 views
9

Jaki jest najlepszy sposób tworzenia równania Sympy, zrobić coś takiego, jak wziąć pochodną, ​​a następnie narysować wyniki tego równania?Używanie równań sympatycznych do drukowania

Mam swoje równanie symboliczne, ale nie mogę wymyślić, jak utworzyć tablicę wartości do kreślenia. Oto mój kod:

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() 

W moim przypadku właśnie oblicza pochodną tego równania, a teraz chcę wykreślić prędkość x, więc jest to dość uproszczony.

Odpowiedz

11

Możesz użyć numpy.linspace(), aby utworzyć wartości osi x (x_vals w kodzie poniżej) i 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() 

(udoskonalenia proponowane przez asmeurer i MaxNoe)

enter image description here

Alternatywnie, można użyć sympy na 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

Lepiej użyć 'lambdify' stworzyć zdumiewający przyjazny wyraz z ekspresji sympy niż dla nas e subs. – asmeurer

+1

Będzie jeszcze szybciej, jeśli użyjesz 'lambdify (t, x, modules = ['numpy'])' i 'y_vals = lam_x (x_vals)' – MaxNoe

+0

@memeurer Rzeczywiście, 'lambdify()' zamiast mojego nieefektywnego rozumienia listy z 'subs()', robi to 4 razy szybciej. –