Python-绘制相空间轨迹(颤振函数) - python

在下面的代码中,我找到了微分方程组的解决方案。我已经在此代码中绘制了相空间轨迹,并且工作正常。但是,我希望重复绘制该图,但要使用箭头帮助我清楚地显示该图的含义。
我看到有人问过类似的问题:
Drawing phase space trajectories with arrows in matplotlib
因此,在下面的代码中,我尝试根据情况复制它。 (我会将这个问题发布到该线程上,但不允许我这样做)

当我运行代码时,得到的图像如下:

Python-绘制相空间轨迹(颤振函数) - python

显然,我在某个点上误解了quiver函数(因为曲线图应该看起来相同(只是第二个曲线图应该有箭头),但事实并非如此,我也看到改变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,并得到以下信息:
Python-绘制相空间轨迹(颤振函数) - python

使用的Runge Kutta代码:

  ## module run_kut4
  ''' X,Y = integrate(F,x,y,xStop,h).
  4th-order Runge-Kutta method for solving the
  initial value problem {y}' = {F(x,{y})}, where
  {y} = {y[0],y[1],...y[n-1]}.
  x,y   = initial conditions
  xStop = terminal value of x
  h     = increment of x used in integration
  F     = user-supplied function that returns the
  array F(x,y) = {y'[0],y'[1],...,y'[n-1]}.
  '''
import numpy as np
def integrate(F,x,y,xStop,h):

def run_kut4(F,x,y,h):
    K0 = h*F(x,y)
    K1 = h*F(x + h/2.0, y + K0/2.0)
    K2 = h*F(x + h/2.0, y + K1/2.0)
    K3 = h*F(x + h, y + K2)
    return (K0 + 2.0*K1 + 2.0*K2 + K3)/6.0    

X = []
Y = []
X.append(x)
Y.append(y)
while x < xStop:
    h = min(h,xStop - x)
    y = y + run_kut4(F,x,y,h)
    x = x + h
    X.append(x)
    Y.append(y)
return np.array(X),np.array(Y)

参考方案

如果减小步长h=0.1,则"Drawing phase space trajectories in Matplotlib with arrows"中给出的代码也适用于您的情况。我们可以生成下图。
Python-绘制相空间轨迹(颤振函数) - python

# 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绘图,只需将plot命令更改为pylab.plot(Y2[:,0],Y2[:,1],'->')。这给出了一个像
Python-绘制相空间轨迹(颤振函数) - python

在返回'Response'(Python)中传递多个参数 - python

我在Angular工作,正在使用Http请求和响应。是否可以在“响应”中发送多个参数。角度文件:this.http.get("api/agent/applicationaware").subscribe((data:any)... python文件:def get(request): ... return Response(seriali…

Python exchangelib在子文件夹中读取邮件 - python

我想从Outlook邮箱的子文件夹中读取邮件。Inbox ├──myfolder 我可以使用account.inbox.all()阅读收件箱,但我想阅读myfolder中的邮件我尝试了此页面folder部分中的内容,但无法正确完成https://pypi.python.org/pypi/exchangelib/ 参考方案 您需要首先掌握Folder的myfo…

如何修复AttributeError:模块'numpy'没有属性'square' - python

Improve this question 我已经将numpy更新为1.14.0。我使用Windows10。我尝试运行我的代码,但出现此错误: AttributeError:模块“ numpy”没有属性“ square”这是我的进口商品:%matplotlib inline import matplotlib.pyplot as plt import ten…

R'relaimpo'软件包的Python端口 - python

我需要计算Lindeman-Merenda-Gold(LMG)分数,以进行回归分析。我发现R语言的relaimpo包下有该文件。不幸的是,我对R没有任何经验。我检查了互联网,但找不到。这个程序包有python端口吗?如果不存在,是否可以通过python使用该包? python参考方案 最近,我遇到了pingouin库。

AttributeError:'AnonymousUserMixin'对象没有属性'can' - python

烧瓶学习问题为了定制对匿名用户的要求,我在模型中设置了一个类: class MyAnonymousUser(AnonymousUserMixin): def can(self, permissions): return False def is_administrator(self): return False login_manager.anonymous…