在下面的代码中,我找到了微分方程组的解决方案。我已在此代码中绘制了相空间轨迹,并且工作正常。但是,我想重复一下情节,但用箭头帮我清楚地表明情节意味着什么。 我看到有人问过类似的问题: Drawing phase space trajectories with arrows in matplotlib 因此,在下面的代码中,我试图根据我的情况复制它。 (我会在这个帖子上发布这个问题,但它不允许我这样做)
当我运行代码时,我得到的图像如下:
显然我在某些时候误解了箭袋功能(因为情节应该看起来相同(只是第二个应该有箭头)这显然不是这样,我也看到改变了我的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()
我只是想知道是否有人能看到我出错的地方,任何帮助都表示赞赏。谢谢:))
答案 0 :(得分:1)
如果您缩小步长h=0.1
,"Drawing phase space trajectories in Matplotlib with 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],'->')
即可。这给出了一个类似的情节
答案 1 :(得分:0)