2016-08-16 169 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