2016-02-14 13 views
9

Sympy方程式を作成する最良の方法は何ですか?微分を取ってその等式の結果をプロットするのはどうですか?シンプロ方程式をプロットに使用する

私の象徴的な式はありますが、プロットの値の配列を作成する方法を理解できません。ここに私のコードは次のとおりです。

私の場合は
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

あなたがとlambdify()(下記のコードでx_vals)x軸の値を作成するnumpy.linspace()を使用することができます。

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

asmeurerMaxNoeによって提案された改善)また

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'を使用することをお勧めします私たちよりもsympy表現の親しみやすい表現e subs。 – asmeurer

+1

'lambdify(t、x、modules = ['numpy'])'と 'y_vals = lam_x(x_vals)'を実行するとさらに高速になります。 – MaxNoe

+0

@asmeurer実際、リストの理解が効率的ではなく 'lambdify 'subs()'を使うと、4倍の速さになります。 –

関連する問題