2017-12-10 11 views
2

以下のコードでは、微分方程式系の解を見つけました。私はこのコード内の位相空間の軌跡をプロットし、それは正常に動作します。しかし、私はプロットを繰り返すことを望んでいましたが、プロットが何を意味するのかを明確に示すのに役立つ矢印を使用しました。 私は、同様の質問が尋ねられたことを知りました。 Drawing phase space trajectories with arrows in matplotlib したがって、以下のコードで私の状況に合わせて複製しようとしました。Python-位相空間軌道をプロットする(震動関数)

明らか

Phase space trajectories

を私が誤解している:私は、コードを実行すると、以下のように、私が手の画像がある

を(私はそのスレッド上で、この質問を投稿するだろうが、それは私がすることはできません)プロットが同じに見えるように(ちょうど2番目のものが矢印を持っているはずです)、これは明らかにそうではありません。また、私の隙間の点の数を変えると、2番目のプロットが大幅に変化します。私が間違っているところ誰もが見ることができれば私は思っていた

# Import the required modules 
import numpy as np 
from run_kut4 import * 
from printSoln import * 
import pylab 

def G2(x,y): 
    G2=np.zeros(2) 
    G2[0]=y[1] 
    G2[1]=-np.sin(y[0])+0.02*np.cos(y[0])*np.sin(x) 
    return G2 
x2=0.0 
xstop2=40.0 
y2=np.array([0.0,0.0]) 
h2=0.005#step size 
#freq=1 

X2,Y2=integrate(G2,x2,y2,xstop2,h2) 

pylab.plot(Y2[:,0],Y2[:,1]) 
pylab.xlabel('θ') 
pylab.ylabel('dθ/dx') 
pylab.title('Phase space trajectory (resonant case)') 
pylab.show() 

y1=np.linspace(-0.4,0.4,100) 
y2=np.linspace(-0.4,0.4,100) 
U,V=np.meshgrid(y1,y2) 

pylab.quiver(U,V,Y2[:,0],Y2[:,1]) 
pylab.xlabel('θ') 
pylab.ylabel('dθ/dx') 
pylab.title('Phase space trajectory (resonant case)') 
pylab.show() 

、任意のヘルプは高く評価され、次のよう

私のコードです。感謝:)

私は構文が示唆されているようにUとVを切り替えるしようとしましたが、この得ている:あなたは自分のプロットに矢筒をオーバーレイするために探しているなら Phase space traj 2

+0

のようなプロットを与えますY2 [:、1]、U、V) – Robbie

+0

私はこれを試しましたが、それはちょうど奇妙なバージョンのプロット(まだ矢印はありません)...元の投稿に画像を編集しました – George

+0

私に教えてください答えはあなたのために働く。 –

答えて

0

は、中y1y2を使用しますXY位置:

plt.quiver(y1, y2, U, V, alpha=.3) 

quiver

注:あなたが実際に持っているにリンクされ、ポスト矢印は曲線そのものを追跡していますが、ここでlinspaceを超えるmeshgridを使用しています。UVの場合は、この矢印のグリッドが必要と仮定しています。

+0

矢印は線の方向を指すことを意味するので、本質的に地図であり、軌道(この場合は振り子)に従うことができます。 – George

1

"Drawing phase space trajectories in Matplotlib with arrows"で指定されたコードは、ステップサイズを小さくする場合にも役立ちますh=0.1次の図を生成することができます。 Arrows

# Import the required modules 
import numpy as np 
from run_kut4 import * 
import pylab 

def G2(x,y): 
    G2=np.zeros(2) 
    G2[0]=y[1] 
    G2[1]=-np.sin(y[0])+0.02*np.cos(y[0])*np.sin(x) 
    return G2 
x2=0.0 
xstop2=40.0 
y2=np.array([0.0,0.0]) 
h2=0.1#step size 
#freq=1 

X2,Y2=integrate(G2,x2,y2,xstop2,h2) 

#pylab.plot(Y2[:,0],Y2[:,1]) 
pylab.xlabel('θ') 
pylab.ylabel('dθ/dx') 
pylab.title('Phase space trajectory (resonant case)') 
pylab.show() 

pylab.quiver(Y2[:-1,0], Y2[:-1,1], Y2[1:,0]-Y2[:-1,0], Y2[1:,1]-Y2[:-1, 1]) 
pylab.xlabel('θ') 
pylab.ylabel('dθ/dx') 
pylab.title('Phase space trajectory (resonant case)') 
pylab.show() 

あなたは完全にquiverプロットをスキップし、単にpylab.plot(Y2[:,0],Y2[:,1],'->')にplotコマンドを変更することができ、前のプロットを好きではない場合。そのため、おそらくを使用して行を置き換える pylab.quiver(X、Y、U、V) : pylab.quiver(Y2の[:0]、これは矢筒機能は以下のように使用されている Arrows2

関連する問題