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

これを最後に付けます。これは速度v(t)に対して時間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を使用して、関数subsを使って関数を評価するよりもnumpy関数を作成する方が良いです。 – asmeurer

4

の抗力係数のために、このようなプロットを取得したい場合は、おそらくより便利であるSympyのplot、 "迅速かつ汚れた"プロット。

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

enter image description here