2016-02-14 23 views
9

Bir Sympy denklemi oluşturmanın en iyi yolu nedir, türevi almak gibi bir şey yapın ve sonra bu denklemin sonuçlarını çizin?Çizim için Sympy Denklemlerini Kullanma

Sembolik eşitliğim var, ancak çizim için bir dizi değer nasıl oluşturulacağını anlayamıyorum. İşte benim kod:

Sadece bu denklemin türevi hesaplanır ve şimdi hızını x çizmek istiyorum, bu yüzden bu oldukça basitleştirilmiş olan Benim durumumda
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() 

.

cevap

11

numpy.linspace(), x ekseninin (x_vals koduna) ve lambdify() değerlerini oluşturmak için kullanabilirsiniz.

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

(asmeurer ve MaxNoe önerdiği iyileştirmeler)

Alternatif

enter image description here

, sen sympy en plot() kullanabilirsiniz:

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

Kullanımı daha iyidir 'lambdify' bir oluşturmak için bize ifade ifadesinden uyuşuk dostça ifade e subs. – asmeurer

+1

Eğer lamdify (t, x, modules = ['numpy']) 've' y_vals = lam_x (x_vals) ' – MaxNoe

+0

@asmeurer Gerçekten, 'verimsiz liste kavrayışım yerine lambdify()' yaparsanız daha hızlı olacaktır. subs() 'ile, 4 kat daha hızlı yapar. –