2016-02-14 3 views
9

Каков наилучший способ создания уравнения Симпи, сделать что-то вроде принятия производной, а затем построить результаты этого уравнения?Использование уравнений Симпипа для построения диаграмм

У меня есть мое символическое уравнение, но не могу понять, как создать массив значений для построения. Вот мой код:

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

В моем случае я просто вычислил производную этого уравнения, и теперь я хочу, чтобы построить скорость x, так что это довольно упрощенная.

ответ

11

Вы можете использовать numpy.linspace() для создания значений оси x (x_vals в приведенном ниже коде) и 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() 

(улучшения, предложенные asmeurer и MaxNoe)

enter image description here

В качестве альтернативы, вы можете использовать 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

Это лучше использовать 'lambdify' создать numpy дружественное выражение от выражения sympy, чем нам e subs. – asmeurer

+1

Это будет еще быстрее, если вы выполните lambdify (t, x, modules = ['numpy']) 'и' y_vals = lam_x (x_vals) ' – MaxNoe

+0

@asmeurer Действительно,' lambdify() 'вместо моего неэффективного понимания списка с 'subs()', делает его в 4 раза быстрее. –