2017-12-10 8 views
2

아래 코드에서 미분 방정식 시스템에 대한 해답을 찾았습니다. 이 코드 내에서 위상 공간 궤적을 플로팅하고 잘 작동합니다. 그러나 나는 줄거리를 반복하기를 원했지만 줄을 사용하여 줄거리가 무엇을 의미하는지 명확히 보여 주었다. 나는 유사한 질문이 묻는 것을 보았습니다 : Drawing phase space trajectories with arrows in matplotlib 그리고 따라서 아래의 코드에서 저는 제 상황을 위해 그것을 복제하려했습니다.파이썬 - 위상 공간 궤적 그리기 (떨림 함수)

분명히

Phase space trajectories

내가 잘못 이해 한 다음과 같이 내가 코드를 실행하면

, 내가 할 이미지가 있습니다 (그 스레드에서이 질문을 게시 것이지만, 나에게 허용하지 않습니다) 플롯이 동일하게 보일 것입니다 (두 번째 것은 화살표가 있어야합니다.) 이것은 분명히 사실이 아니며, 또한 내 linspace의 포인트 수를 변경하면 두 번째 플롯이 크게 바뀌는 것을 보았습니다. 내가 잘못 갈 곳 누구나 볼 수 있다면 난 그냥 궁금 해서요

# 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

같은 플롯을주는 떨림 기능으로 사용됩니다 pylab.quiver (X, Y, U, V) 그래서 어쩌면 당신의 라인을 교체 : ( pylab.quiver Y2의 [: 0] Y2 [:, 1], U, V) – Robbie

+0

나는 그걸 시도해 봤어. 음모의 이상한 버전을 만든다. (아직 화살표는 없다.) 원래의 포스트에 이미지를 편집했다. – George

+0

내게 대답은 당신을 위해 일합니다. –

답변

0

당신은 단지 당신의 음모에 화살을 오버레이에 y1y2를 사용하고자하는 경우 XY 위치 :

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

quiver

참고 : 당신이 실제로 가지고에 링크 된 포스트 화살표는 곡선 자체를 추적하지만, 여기 linspacemeshgrid을 사용하고 여기에 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],'->')에 플롯 명령을 변경할 수 있습니다 이전 플롯을 좋아하지 않는 경우에. 이 Arrows2