2016-08-16 73 views
4

到目前爲止,我已經設法找到針對任何給定質量和阻力系數的該方程的特定解。然而,我還沒有找到一種方法來繪製解決方案,甚至可以針對某個特定點評估解決方案。我真的想找到一種方法來繪製解決方案。將Sympy結果繪製爲微分方程的特殊解法

from sympy import * 

m = float(raw_input('Mass:\n> ')) 
g = 9.8 
k = float(raw_input('Drag Coefficient:\n> ')) 
f = Function('f') 
f1 = g * m 
t = Symbol('t') 
v = Function('v') 
equation = dsolve(f1 - k * v(t) - m * Derivative(v(t)), 0) 
C1 = Symbol('C1') 
C1_ic = solve(equation.rhs.subs({t:0}),C1)[0] 
equation = equation.subs({C1:C1_ic}) 
+0

你能幫我明白你想要做什麼樣的陰謀?你的x軸和y軸變量是什麼? – benten

+0

我想繪製速度(v)與時間(t)的關係 – Kklj8

回答

3

導入這些庫(seaborn只是使情節漂亮)。

from matplotlib import pyplot as plt 
import seaborn as sns 
import numpy as np 

然後將此粘貼到底。這將繪製時間t與速度v(t)的關係曲線。

# make a numpy-ready function from the sympy results 
func = lambdify(t, equation.rhs,'numpy') 
xvals = np.arange(0,10,.1) 
yvals = func(xvals) 

# make figure 
fig, ax = plt.subplots(1,1,subplot_kw=dict(aspect='equal'))  
ax.plot(xvals, yvals) 
ax.set_xlabel('t') 
ax.set_ylabel('v(t)') 
plt.show() 

我得到這樣一個情節爲2的質量和2 enter image description here

+0

btw,[這個問題](http://stackoverflow.com/questions/10678843/evaluate-sympy-expression-from-an-array-of-values)是一個有用的參考 – benten

+0

這工作真的很好,真的很快,謝謝! – Kklj8

0

如果我理解正確的話,你要代表你的解決方案的右手邊,這裏的的多種方法可以做到這一個:

from sympy import * 
import numpy as np 
import matplotlib.pyplot as plt 

m = float(raw_input('Mass:\n> ')) 
g = 9.8 
k = float(raw_input('Drag Coefficient:\n> ')) 
f = Function('f') 
f1 = g * m 
t = Symbol('t') 
v = Function('v') 
equation = dsolve(f1 - k * v(t) - m * Derivative(v(t)), 0) 
C1 = Symbol('C1') 
C1_ic = solve(equation.rhs.subs({t: 0}), C1)[0] 
equation = equation.subs({C1: C1_ic}) 

t1 = np.arange(0.0, 50.0, 0.1) 
y1 = [equation.subs({t: tt}).rhs for tt in t1] 

plt.figure(1) 
plt.plot(t1, y1) 
plt.show() 
+0

最好使用lambdify創建numpy函數,而不是使用subs和列表理解來評估函數。 – asmeurer

4

阻力系數爲了完整起見,你也可以使用Sympy的plot,如果你想這可能是更方便「快而骯髒」的情節。

plot(equation.rhs,(t,0,10)) 

enter image description here