2017-12-10 3 views
2

Im folgenden Code habe ich die Lösung für ein System von Differentialgleichungen gefunden. Ich habe die Phasenraumtrajektorie innerhalb dieses Codes gezeichnet und es funktioniert gut. Ich habe jedoch versucht, die Handlung zu wiederholen, aber mit Pfeilen, die mir helfen, deutlich zu zeigen, was die Handlung bedeutet. Ich habe gesehen, dass eine ähnliche Frage gestellt wurde: und daher in dem Code unten habe ich versucht, es für meine Situation zu replizieren. (Ich würde schreiben, diese Frage in diesem Thread, aber es wird mir erlauben, nicht zu)Python-Plotten von Phasenraum-Trajektorien (Köcherfunktion)

Wenn ich den Code ausführen, werden die Bilder, die ich bekommen sind wie folgt:

Phase space trajectories

Offensichtlich ich falsch verstanden die Köcherfunktion an einem Punkt (da die Plots gleich aussehen sollten (nur die zweite sollte Pfeile haben), ist dies eindeutig nicht der Fall, auch habe ich gesehen, dass die Änderung der Anzahl der Punkte in meinem inneren Raum die zweite Plot drastisch ändert).

Mein Code ist wie folgt:

# 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() 

ich gerade gefragt, ob jemand sehen konnte, wo ich falsch gegangen sind, wird jede Hilfe dankbar. Thanks :)

Ich habe versucht, U und V zu schalten, wie die Syntax vorgeschlagen, und bekam diese: Phase space traj 2

+0

Der Köcher Funktion wird verwendet als: pylab.quiver (X, Y, U, V) Also vielleicht Ihre Linie ersetzen mit: pylab.quiver (Y2 [: 0], Y2 [:, 1], U, V) – Robbie

+0

Ich habe es vorher versucht, Es macht nur eine komische Version der Handlung (noch keine Pfeile) ... Ich habe das Bild in den ursprünglichen Beitrag bearbeitet – George

+0

Bitte lassen Sie mich wissen, wenn meine Antwort funktioniert für Sie. –

Antwort

0

Wenn Sie gerade suchen die Köcher auf Ihrem Grundstück zu überlagern, verwenden y1 und y2 in dem X und Y Positionen:

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

quiver

Hinweis: Der Beitrag, den Sie tatsächlich verknüpft hat Pfeile verfolgen die Kurven selbst, aber Sie verwenden ein meshgrid über linspace für U und V hier, also nehme ich an, Sie wollen nur dieses Raster von Pfeilen.

+0

Die Pfeile sollen in Richtung der Linien zeigen, also ist es im Wesentlichen eine Karte und man kann der Flugbahn folgen (in diesem Fall ein Pendel) – George

1

Der Code in "Drawing phase space trajectories in Matplotlib with arrows" funktioniert auch für Ihren Fall, wenn Sie die Schrittgröße h=0.1 reduzieren. Wir können die folgende Zahl erzeugen. 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() 

Wenn Sie nicht die vorherige Grundstück gefällt Ihnen die quiver Grundstück ganz überspringen und einfach die Plotbefehl zu pylab.plot(Y2[:,0],Y2[:,1],'->') ändern. Daraus ergibt sich eine Handlung wie Arrows2