为什么我没有得到旋转编号的楼梯?

计算科学 Python 迭代法 麻木的
2021-12-04 05:26:52

我试图了解楼梯地图。看看这张从圆圈到自身的地图:

xF[ω+x+ϵ2πsin(2πx)](mod1)

当应用欧拉方法求解微分方程时,就会出现这样的映射。然后通过多次迭代函数的旋转数:ωF

ρ(ω,ϵ)=limnFn(ω,ϵ,x0)n

所以我试图在教科书(Dynamics and bifurcations, Hale & Koçak, 1991)中提供的实例中找到旋转数,代码很简单:

import numpy as np
import matplotlib.pyplot as plt

w = np.arange(0,1,0.01)
x0  = 0
x   = 0*w + x0
eps = 0.5

for n in 1+np.arange(100):
    x = (w + x + (eps/2/np.pi)*np.sin(2*np.pi*x))%1

plt.plot(w,x/n)

事实上,我根本没有楼梯。我编码正确吗?

在此处输入图像描述

1个回答

问题是您明确地将的结果取模 1。这会弄乱绕组数的计算。简单地移除将产生正确的绕组数。要了解为什么您希望能够超过 1,请检查绕组数的定义 因为参数化了单位圆,所以 置换的单位圆周围的距离,并且次应用引起的平均位移F%1 F

ρ(ω,ϵ)=limnFn(x0;ω,ϵ)x0n
x[0,1]F(x0)x0Fx0(Fn(x0)x0)/nnF. 的无限多次应用范围内的平均位移但是如果的结果总是取模 1,那么越来越大的值将导致越来越小的绕组数,最终变为,无论的值如何。这显然没有捕捉到绕组数的预期含义。FFn0ωϵ