动态系统中的橡皮鸭
这一次,我确信我找到了一些完全新颖且以前未知的发现。
引言
大约五年前,我在 Code Project 的版面上公布了我发现的 “糟糕的分形集”。然而,事实证明其他人也犯了和我同样的错误,甚至将“糟糕的分形集”命名为 Tricorn 或 Mandelbar 集。这一次,我确信我找到了一些完全新颖且以前未知的东西。
如果您能引用任何先前已发表的文章或参考资料来反驳我的原创性主张,我们(我?)希望看到它们。但请仅引用我们可以免费公开访问的材料。付费期刊和评论固然很好,但它们并不符合 Code Project “信息应自由共享”的明显原则。
我需要提醒您,这里的 Python 脚本需要一定的速度。我在树莓派 4 上测试过它们,对于许多这些演示来说,这似乎是获得愉悦性能的最低配置。
但在那之前,先来点基础背景知识
最有用的最简单的动态系统是近似圆的那个。对于二维平面上除了原点之外的任何点,如果您在一个与从原点到该点的径向矢量成直角的某个方向上稍微移动该点,顺时针(CW)或逆时针(CCW)方向,您将开始绘制一个圆。这个移动是您正在逼近的圆的切线。您所要做的就是重新评估该点移动后切线的值。此图显示了第一象限中的一个点 (x, y),但数学原理适用于任何象限和其中的任何角度。

假设我们将顺时针切线的 5% 添加到点 (x, y) 中。给出新 x 和 y 的方程是
x += .05 * y
y -= .05 * x
不那么明显的是,第一个方程需要使用新的 x 值来求值,然后第二个方程才能使用这个新的 x 值来求值。我称这个动态系统“有序”的属性或特征。对于“有序动态系统”有其他含义,但在本文中,有序意味着动态系统的“映射”(为新点求值的维度方程集)是逐维度方程求值的。另一种是“离散”。对于具有离散求值的圆近似动态系统,该映射将如下所示:
temp = x
x += .05 * y
y -= .05 * temp
“离散”一词的使用方式如此处所示。完整的映射求值发生在离散的时间点,使用当前点的副本。在映射求值期间,不能使用中间的新维度值来计算其他新维度值。
为什么圆的动态系统需要有序?这张图有助于说明离散求值会显著错过圆的曲率,而从稍大一点的新 x 中求值有序的新 y 会让我们更接近圆。这个误差在有序圆的另一侧被抵消,而离散圆则过度偏离以至于无法保持在轨道上。

此外,如果我们使用更小的 delta(例如 1% 而不是 5%),误差的摆动会减小。在极限情况下,delta 趋近于零,这些差分方程就变成了微分方程,误差的摆动也趋近于零。
复数平面怎么样?是否存在近似圆的动态系统,它是“有序”还是“离散”的?请尝试下载中的两个脚本:circOrbit.py 和 circOrbitComplex.py 来找出答案。
除了趋向极限,也许我们可以通过稍微改变映射的处理方式来解决“有序”和“离散”圆动态系统之间的差异。如果我们不是在 delta(0.05)处求值下一步,而是在 half of delta 处求值映射,然后使用这个中间中点的数值来执行完整的 delta 步?也就是说,对于有序映射,而不是,
x = x + delta * y
y = y - delta * x
我们这样做
x2 = x + .5*delta * y
y2 = y - .5*delta * x2
然后这样做
x = x + delta * y2
y = y - delta * x2
有一个类似的离散映射使用了中点。中点法非常有帮助。有序映射的圆没有明显的摆动,而离散映射的圆则非常缓慢地螺旋向外。您可以运行 circOrbitMidpoint.py 来查看。单击“使用全步长。”切换到“使用中点。”,然后单击“开始”或“新起点”。看看漂亮的圆。
现在点击“使用有序映射”,这样就会选中“使用离散映射”。使用 sleep
延迟是为了让动画足够慢,以便能看清圆的生成过程。点击“加速”按钮可以消除延迟(图示中的“慢速前进”)。您会看到圆快速扩展。当新点达到离原点的最大距离时,它会停止。
所以我们解决了一个映射中的摆动问题,并改进了另一个。我们能做得更好吗?也许我们只需要更精确的估计。我们不必只使用一个中点,而是可以使用一个半步估计,以及基于第一个半步值和第二个半步值的一个全步估计的另一个半步估计。然后,我们可以按 1/6、2/6、2/6 和 1/6 的权重对当前点、两个半步估计和全步进行加权,以得到一个非常好、非常好的下一个点。请查看 circOrbitRK4.py 中的 step()
函数,以查看此映射的详细信息。
这一次,我们改进了两个映射,但现在加速“使用有序映射”,“使用中点。”动态系统会显示一个缓慢收缩的圆,而“使用离散映射”,“使用中点。”的圆似乎是稳定的(实际上,它也会收缩,非常缓慢——尝试将 Tk 窗口最小化几秒钟,当‘delta 是 0.2’时,或者几分钟,当‘delta 是 0.1’时)。你无法在额外的精度上取胜。您可能想检查 circOrbitIntegrate.py。它允许使用类似 RK3 的估计器和三分之一步的积分器来执行步长。根据控件的组合,您会发现扩展的动态系统或向内螺旋的动态系统。
我想要说明的是,研究“有序”(我的意思)动态系统和研究经典的“离散”动态系统一样有价值。唯一完全稳定的近似器是原始的有序映射及其经过中点处理、消除摆动的改进版本。坦白说,对我来说,只有原始的映射在数学上具有自然、简单的美感。
不仅仅是一个圆
超越一个圆,我们真正需要的是能够以一种奇怪但稳定的方式呼啸而过、急转直下的东西。请尝试 SA2dDuffing.py 脚本。这个吸引子依赖于一个“双势阱”来吸引点到两个不同的最小值(就像我们上面圆的单一最小值切线力点一样),再加上一个驱动力来产生一些奇怪的行为,因为我们的点试图围绕其中一个或另一个最小值进行轨道运动。
我发现的关于 Duffing 方程 最易于处理的描述是来自 UCSC 的 A. Peter Young 博士。他用 Mathematica(据我所见,仍然不是免费的)来讲解他的课堂示例,但描述和解释都非常好。Young 博士选择使用 1.4*t
的余弦值,而 SA2dDuffing.py 使用 1*t
。无论哪种情况,Duffing 方程中使用的力定义都显得尤为重要。
您可以设置一个值 a
作为驱动器的阻尼系数,以及 b
作为驱动器的振幅。负的阻尼系数会变成放大器,导致轨道爆炸性增长。振幅太小不足以让驱动器有足够的“动力”(用科学术语来说)将点从一个势阱发送到另一个势阱。当阻尼系数为 0.2
时,临界振幅约为 0.27
。
如果没有足够的动力,轨道最终会围绕一个最小值收敛到一个极限环。即使有足够的驱动,轨道也可以围绕两个最小值收敛到一个极限环。当“使用加号映射”或“使用减号映射”以及“使用有序映射”时,尝试将 a == .3
和 b == .365
设置好。轨道将收敛到如下所示。您能分辨出这是“+”映射还是“-”映射吗?
对于这个吸引子,使用“有序”映射或“离散”映射似乎没有太大区别。“离散”映射的控制点 (.3, .385) 与“有序”映射 (.3, .365) 类似,但只有一个最小值是双重循环的。“新点”似乎对双重循环的最小值的影响与使用 + 或 - 映射一样大。
好吧,二维的奇异吸引子和极限环都很棒,但三维呢?
现在来点全新的、以前未公开的
我在 90 年代发现了 LCbball.py 和 LCtumble.py 中的极限环。LCbball.py 的名字是因为它的轨迹让我想起了棒球的缝线。LCtumble.py 的名字是因为我想象一个布娃娃头部先沿着这条轨迹运动——它会翻滚。
想象一个倾斜的地球仪。LCtumble.py 在赤道上划出一条轨迹,向东移动 90 度,然后向上到达北极,向右转 90 度,然后回到赤道,然后向西移动 90 度,直到几乎到达第一次移动后的位置,然后向下到达南极,向左转 90 度,然后回到赤道,然后重复最后六次移动,只交换极点。这是我在自己的聚变反应堆中使用的磁性隧道极限环。这两个脚本都有“<-”和“->”按钮来左右旋转极限环以方便观察。点击“清除视图”以查看重画的极限环。LCtumbleMinus.py 是另一个不太有趣的极限环。所有三个都使用“有序”映射。
将 LCs 应用于 3D 世界
为什么用 Python 和 TkInter 来实现所有这些东西?因为任何人都可以轻松获取 Python,它通常包含 tkinter 库(macOS 除外,有特殊规定)。为什么使用非 JIT 运行时环境?因为我们并不真正需要速度,而我们需要速度的地方,我已尽力提供解决方法。顺便说一下,我也试图兼容 Python 2。但那样的话,为什么不使用 pyopengltk 或其他 OpenGL 框架呢?这你就问到我了。我想揭示 OpenGL 的工作原理。我开发了 knownWorld.py 来看看我是否能理解并使用众所周知的数学原理制作自己的世界查看器。
我们将极限环或奇异吸引子设置在世界的原点进行观察。我们有一个总是“看向”原点的相机。然后我们移动相机来观察我们的物体。我们还进行了所观察物体的透视投影以增强真实感。
如果我们使用一个简单的二维圆轨道器,或者 bball LC,或者 tumble LC 来自动移动相机以从不同角度观察物体呢?wellKnown3dAttractors.py 就是这样做的。这些吸引子中的许多都是从这个页面和这里的参数修改而来。
一切都很好,但这个“橡皮鸭”是怎么回事?
现在来点完全新颖、前所未见的
我今年发现了 Barnes 吸引子。(“Barnes 吸引子”?嘿,我已经老了。我得趁着还能抓紧名利。)是的,所以您可能会注意到许多下载文件名中都出现了“barnes”。让我们来看看 barnes3dCubic.py。这个吸引子偶尔会形成橡皮鸭的投影轮廓,就像本文开头看到的那个。这是该脚本的另一张屏幕截图,嵌入了一只鸭子。
惊喜的是,这个吸引子需要一个“有序”映射。“开始”这个吸引子。一旦它运行了几秒钟,试试点击“有序映射”按钮来使用“离散映射”。轨迹会继续一段时间,但迟早会爆炸。
这个吸引子有七个排斥性的不动点。如果您查看 barnes3dCubic.py 中的 step()
函数,您几乎可以猜到它们的位置。首先,原点本身就是一个不动点。如果所有三个维度值都为零,则映射方程中的每个 delta 值都将为零。
p.x += .05*(p.z + p.y * p.x * p.x - p.z * p.z * p.z)
p.y += .05*(p.x + p.z * p.y * p.y - p.x * p.x * p.x)
p.z += .05*(p.y + p.x * p.z * p.z - p.y * p.y * p.y)
现在想象只有一个维度是 +1.0 或 -1.0,而另外两个是零。由于每个映射方程都包含 dimension - dimension^^3
项(听起来熟悉吗?),那么 +1.0 或 -1.0 的维度将为 delta 值贡献零,而另一项是零的乘积。另外两个映射方程将全部为零项,因此这些点保持固定。它们形成了一个真正的排斥笼。那么为什么任何点会逗留呢?哪里有吸引力,奇异的还是其他的?
诀窍在于 +1.0 / -1.0 的不动点是非常扭曲的。如果您运行 barnes3dCubicAttractorField.py 并点击“显示”,将显示吸引子场的一个圆形区域。请注意 (0,-1,0) 和 (0,+1,0) 处的小漩涡。不,坐标轴和坐标没有标记,但您应该能辨认出这些坐标的位置。您必须将“x==0 刻度盘”向右旋转到大约 -30 度的纵向视角,才能清楚地看到 (0,0,-1) 和 (0,0,+1) 的漩涡。还有其他可以显示的“刻度盘”。出于性能考虑,该脚本将显示限制为最多三个刻度盘。另外,如果您有 sortedcontainers
模块,还有一个“进行排序”开关,在显示两个或三个刻度盘时(已勾选)会很有帮助。
吸引子太混沌了,很难对其整体形状有一个好的认识。吸引子场脚本显示了吸引子场的圆形刻度盘,但不是实际的吸引子。让我们看一下 barnes3dCubicBasin.py。它以蓝色显示了这个吸引子的盆地。盆地是一个类似外壳的封闭区域。选择在这个盆地内部作为初始点的轨迹将收敛到吸引子外壳的范围内。如果您有 sortedcontainers
,吸引子外壳的极大值将以不同的颜色显示。由于盆地和外壳相距甚远,这个吸引子非常稳定。
这是红喉蜂鸟还是一个奇怪的、扭曲的小鸭子?即使连续选择单个随机映射方程而不连续重复,DuckyOnCrack.py,或者 delta 在每次完整映射中在 '+' 和 '-' 之间随机切换,FickleDuck.py,这个吸引子在相当长的时间内仍然是混沌的,即使不是确定的。
好的、坏的、丑的
除了稳定性,Barnes 3D Cubic 吸引子的优点是什么?实际上是两点。首先,delta 可以 被一致地加或总是减。再次运行 barnes3dCubic.py 脚本并点击“开始”。现在尝试点击“+= δ Map”按钮,使其变为“-= δ Map”。您会看到点的轨迹反转,尽管不完全一样。这是同一个吸引子,但可能是“反”版本。
其次,映射本身可以按六种顺序之一进行:xyz、yzx、zxy、xzy、zyx 或 yxz。3! 种顺序对应 3 个维度。从视觉上看,这六种顺序都无法区分。
而坏的部分呢?坏的是这个吸引子有点丑陋(考虑到它来自哪里,这很令人惊讶)。在运行 barnes3dCubic.py 时,点击“显示终点”按钮,并不断点击“更多线条”,直到您的手指疲劳。在显示的终点中看不到任何模式。这是因为 Barnes 3D Cubic 吸引子不形成一个流形,或者我们敢说膜吗?或者它只是一个非常狭窄、纠缠不清的,就像一些礼品上的紧卷丝带。一些优雅的、众所周知的 3D 吸引子,如 wellKnown3dAttractors.py 中的吸引子,形成大型的、宽大的流形,就像其他礼品上的宽大蝴蝶结。这篇关于混沌拓扑学的文章讨论了“弱耗散 3D 系统”。我相信“耗散”是衡量一个混沌动态系统在多快时间内收敛到一个(可能是多分支的)流形。就像 1984 年的 Lorenz 3D 弱耗散系统一样,Barnes 3D Cubic 吸引子并没有进行任何耗散。
流形的一个显著特性是它可以将包含它的更高维空间分成两部分,即:流形有侧面。
对于两个不指向同一方向的向量,您可以取它们的叉积,得到一个与两者都成直角的向量。我们可以对吸引子轨迹中的两个连续线段执行此操作,并根据叉积为前导线段着色。对于流形吸引子带中的一小段弧,附近的弧应该具有相似的曲率(叉积指向同一方向,颜色相同)。附近弧也不应扭斜(叉积不同,颜色不同),除非发生分支或折叠。否则,不应出现非本色、干涉性的弧。如果 Barnes 3D Cubic 吸引子形成一个流形,那它必然是一个非常狭窄且无限纠缠的。请尝试 rosslerBarnesManifolding.py。Rossler 一侧看起来不丑陋,而 Barnes 一侧则色彩丰富。
当 sortedcontainers
可用时,您可以“排序”显示(选择时)或将“视图未排序”更改为“排序新视图”以在移动相机或缩放比例时进行排序。这是唯一一个 JIT 编译、硬件辅助、OpenGL 着色器会有帮助的演示。在直线 Tk 显示中,每个新线段的深度排序太慢了。
作为改进,我们 Code Project 的同事 Samuel Teixeira 在 2016 年提供了 5 星好评的 《Python OpenGL 与 TKinter》。也许 Jon Wright 的 2018 年作品 pyopengltk 部分基于此。还有其他平台,如 three.js 和 OpenTK,它们适合 JavaScript 和 C# 的爱好者。
我希望将来能用更好的图像更新,但现在,我附上这张从 wellKnown3dAttractors.py 中截取的图像,选择了“Barnes”吸引子,使用了高线计数并从高极角进行观察。请注意,在 +1.0/-1.0 的不动点附近,有占主导地位的红色、绿色和蓝色漩涡。而且它们在原点的两侧以相同的方向(曲率)旋转。
将所有东西都扔给整个系统
当它响起并报告不当行为时
关于 Barnes 3D Cubic 吸引子,还有几点我想指出。如果您有一个至少是高清(1920 x 1080)的显示器,您可以尝试运行相当大的 barnes3dCubic3pts12ways.py。
精度
我有点惊讶这个吸引子在只有 3 位数字的精度下仍然是混沌的。在“开始”之前,如果您点击“有效数字:”微调器上的“▲”,吸引子将使用三位小数的有效数字。微调器从最大值 50 包装回 3。当您点击“开始”时,您应该看到三个轨迹点从同一位置开始:第一个是黑色,第二个是红色,第三个是春绿色。它们会像往常一样分开,因为,是的,因为它们是奇怪的。当您“暂停”运行时,轨迹点的结束值将显示为三位有效数字。
请注意“Sep▼”下面的输入框。当最大分离超过 0.25 单位时,它会显示三个轨迹点之间的最后一个最大分离。由于它们共享同一个原点,因此点只能相距一定距离。另请注意后面将讨论的“启用暂停”按钮。
确定性轨迹
这实际上是所有“可解”动态系统的属性。这意味着从相同的初始点开始系统将始终从头到尾重复完全相同的轨迹,或者直到系统变得“不可解”。对于数字动态系统,无论使用多少位有效数字的算术,这都是成立的。
试试这个:“暂停”系统(如果已启动),或者退出并重新启动脚本。选择您希望系统使用的有效数字位数。默认情况下,黑色轨迹使用“+xyz”映射。您可以使用“新起点”右侧的选项菜单选择此轨迹点使用的映射。还有另外两个选项菜单可选择第 2 和第 3 个轨迹点的映射。默认情况下,第二个点使用“+yzx”映射。将其更改为与第一个轨迹点相同的“+xyz”映射。点击“新起点”选择一个新的起始点。
点击“隐藏第 3 个”,这样我们就不会有烦人的绿色轨迹来分散我们的注意力。找到“保存第 2 个”和“更新第 2 个”按钮,在点击“开始”后使用它们。当点击“开始”时,两条轨迹将重叠,因为它们是确定性地移动的。您可以点击“保存第 2 个”,然后在短时间后点击“更新第 2 个”。红色轨迹会滞后,但会精确地遵循黑色轨迹,延迟数步。这表明轨迹中的每个点都唯一地决定了后面的点。
对初始条件的敏感性
这实际上是所有混沌系统的属性。我们可以通过从确定性轨迹中留下的设置开始来显示这种敏感性。“暂停”系统。点击“显示第 3 个”将绿色轨迹重新带回。选择第 3 个轨迹的“+xyz”映射,这样所有三个轨迹都使用相同的映射。
点击“新起点”,然后点击“开始”。现在找到并点击“微调第 3 个点。”,这应该会改变第 3 个轨迹点的 x 分量的最不显著位(或几个位),使其成为一个最小差异的十进制值。无论选择了多少位有效数字,当您点击“暂停”时,第 3 个 x 结束值= 应该与其他两个结束值不同。如果不同,请再次点击“微调第 3 个点。”,然后点击“1 步”。
当它不同时,点击“开始”。如果您选择使用 50 位有效数字,那将需要等待一段时间。您可以偶尔点击“暂停”和“开始”来观察差异越来越大。当差异达到千分之几单位时,在点击下一个“开始”后不久,绿色轨迹就会与其他两个轨迹分离。
风味
在六种可能的映射顺序中,有两组遵循相同的循环序列:(xyz, yzx, zxy)
和 (xzy, zyx, yxz)
。如果我们考虑带有“+
”delta 和“-
”delta(如夸克/反夸克颜色或轻子/反轻子电荷)的十二种映射,我们可以数出四组。
(+xyz, +yzx, +zxy)
、(+xzy, +zyx, +yxz)
、(-xyz, -yzx, zxy)
和 (-xzy, -zyx, -yxz)
这让我想起了维基百科文章《标准模型数学公式》中描述的夸克或轻子及其反粒子的“风味”。注意伴随图中的高能量(未破缺对称)/低能量(破缺对称)曲线。顺便说一句,这里有一篇关于标准模型三维模型的文章。
在初次执行 barnes3dCubic3pts12ways.py 脚本时,每个轨迹在第一组中使用不同的映射。这就是每个点想要走自己的路的原因。有十二种不同的映射,但每种映射的轨迹都具有相同的视觉形状和特征。那么风味有什么用呢?它会带来什么?
纠缠
当我们启动 Barnes 3D Cubic 吸引子时,我们可以使用位于其空间轴上或附近的“特殊”起始点。吸引子的不动点都位于轴的一个或三个轴上。让我们使用 barnes3dCubic3pts12ways.py 重新启动时设置的默认映射和有效数字。将起始“x=
”、“y=
”、“z=
”输入值设置为 1、4e-49、0,然后点击“设置”。然后点击“开始”。使用 50 位有效数字需要一段时间,但一旦轨迹移动超过一个像素,您就可以使用“<
”和“>
”来帮助观察所有三个轨迹偶尔发散然后又重新重叠。在我看来,这些物体是纠缠的。否则为什么它们不会永久地远离彼此呢?
这里还有两个 50 位有效数字的纠缠起始点
0, | 0, | .0002 | - | 尝试使用任一“+”组 |
1e-51, | 1e-98, | 0 | - | 使用任一“-”组。只有第一和第二个纠缠。 |
大约在 12000 步时发散。 |
当您设置一个纠缠点时,您可以在点击“开始”之前“启用暂停”。这将暂停主循环中的步进,只要轨迹点超过 0.5 单位的距离,就可以让您旋转视图,并在纠缠点广泛分离时进行单步操作。
这是一个 3 位有效数字的纠缠起始点:2.50, 0, .001。
部分映射
当从一个纠缠的起始点开始时,到底发生了什么?为什么点 1.0, 1.0, 1.0 不会纠缠?为什么特殊点是特殊的?我不知道。好吧。
不,我们需要查看映射步骤中的每个方程求值。我们能看出是什么让一个特殊点保持特殊吗?如果我们设置一个纠缠的起始点并点击“1/3 步”几次,应该会开始清楚我们实际上是在处理同一个点,只是处于不同的相位。如果您查看这个页面上的图,但想象相位为 0、π/3 和 2π/3,您应该会说(至少我自己是这样说的):“啊哈。”
当我们对 1.0, 1.0, 1.0 进行三分之一步时,很容易看出这个点不像特殊点那样“相位移动”。三个非特殊点碰巧会命中相同的坐标,因为我们迫使它们在开始时这样做。我认为问题变成了,在所有点中,什么会选择三个碰巧是特殊的点?它们可以从轴附近开始,但在一百万步之后,您如何挑选出它们?您可以扩大一个已经太大的脚本,以允许单独的起始点,并选择“双等号”坐标,但这是否总能做到?并且在轴以外是否存在任何特殊相同坐标、不同顺序的点?我不知道。真的不知道。
到目前为止,一切都很好,尽管每个人和他们的祖母都制作了一个三维吸引子。四维怎么样?
现在来点有点新颖,也许出乎意料的
如果我们只是将一个额外的维度嵌入到 Barnes 3D Cubic 吸引子映射中,我们会得到另一个吸引子吗?请尝试 barnes4dCubic.py 来找出答案。当然,我们只能选择四个维度中的三个来观看,而且遗憾的是,看起来鸭子们飞走了;但可能是更长的准周期性时段出现了——尝试 -1, -.5, .2, -.05。
是的,是的,但为什么停在那里?N 维怎么样?
现在来点真正……哦,你明白了
如果我们使用九个不同的“滑块”来显示 Barnes 9D Cubic 吸引子的所有维度,而不是试图在我们的 3D 查看器中仅在空间上显示 3 个维度。请尝试 barnes9dCubic.py。
您可以点击“设置,零”将除第一个维度外的所有维度归零。在点击“开始”之前,第一个维度 r
的值可以在其输入框中更改。像 .0001
这样的值将使用一个非常接近原点不动点的初始点。让显示屏运行一段时间,以便红色的小轨迹球远离原点。delay
是一个动画延迟。如果主循环正在运行,请点击“暂停”/“开始”以更新新的延迟值。
那么,Barnes MxN Cubic 吸引子怎么样?
受启发而发生
同样,sortedcontainers
可以改进这个 30 维 barnesMxNCubic.py 吸引子的显示。难道我们不应该现在就给 Jenks 先生两便士吗?(我给了。)
所有这些都引导我……
Barnes 猜想
任何“体面”启动的 Barnes 吸引子都保持混沌。
我需要定义其中的术语。“体面启动”意味着初始点选择在吸引子盆地内,而不是在不动点上,并且离原点处的特殊不动点不太近。
“保持混沌”意味着轨迹不会爆炸,也不会收敛到不动点或极限环。
“Barnes 吸引子”的表述要难一些。它是一个吸引子,就像这里介绍的那样,每个维度都有一个有序的映射方程。有 M x N x O ... 个映射方程,其中 M、N、O... 都是大于 2 的整数。还有另一个我将很快提到的要求。
丑小鸭
我讨厌放弃一个维度,即使它只是第二个维度。如果我们试试 barnesian2dCubic.py 呢?不。它很糟糕。它只是一系列有限兴趣的极限环。当然,你从中得不到什么。
但如果我们把丑小鸭丑化呢?不行。两个糟糕的组合不等于一个好。 barnesian2x2dCubic.py 只是无休止的、退化的、沉没的不动点。也许我太严厉了。
丑化双鸭怎么样?是的,三个坏的组合可以得到一个好的。 barnes2x2x2dCubic.py 是一个很好的老式吸引子,有很多扭曲和转弯。有这么多维度,你怎么会出错呢?
但我怎么知道我没有试图把一个 barnes3x2dCubic.py 或 barnes2x3dCubic.py 吸引子推销给你?请注意:这两个脚本的 step()
函数实际上是算术等效的。它们各有有一个小的不同之处。
您可以看到 barnes2x2x2dCubic.py 中每个映射方程都有一个三个独立的二维因子的和。
p.x1 += delta*(p.y1 + p.y1 *p.x1 *p.x1 - p.y1 *p.y1 *p.y1 +
p.x2 + p.x2 *p.x1 *p.x1 - p.x2 *p.x2 *p.x2 +
p.x3 + p.x3 *p.x1 *p.x1 - p.x3 *p.x3 *p.x3)
对于 barnes3x2dCubic.py 和 barnes2x3dCubic.py,每个映射方程只有一个两个独立维度空间的和。
p.x += delta*(p.x2 + p.x2 *p.x1 *p.x1 - p.x2 *p.x2 *p.x2 +
p.z1 + p.y1 *p.x1 *p.x1 - p.z1 *p.z1 *p.z1)
p.x += delta*(p.z1 + p.y1 *p.x1 *p.x1 - p.z1 *p.z1 *p.z1 +
p.x2 + p.x2 *p.x1 *p.x1 - p.x2 *p.x2 *p.x2)
立方,立方,立方。难道没有其他幂次能解 N - N 的 N 次幂等于 [-1, 0, +1] 吗?
是的,Janinia,有一个 Barnes 五次吸引子
好的。这有点牵强。但对于 Barnes 五次吸引子,我有一些新的内容想讲。任何一个 5 次幂项在映射方程中,超过 1.0 就会变得很大,您不觉得吗?我们应该使用一个除数来防止 5 次幂项失控。还有一个偶然的旁观问题——是否存在任何物理定律或常数使用了五次幂项?确实存在普朗克时间和普朗克温度基本单位,它们使用了光速的五次方。我只是随便说说。
如果您尝试 barnes3dQuinticDiv.py,在“div=
”输入框中输入值 2.2,然后点击“设置除数”,您应该会得到一个稳定的混沌吸引子。点击“开始”。事实上,点击“新点”几次。它们都应该是稳定的混沌轨迹。
现在尝试更大的除数。您应该会看到类似三次-五次的生物(SA3dCubicQuinticDiv.py)的出现,然后轨迹会爆炸。
点击“暂停”,然后为点 -1.668440298, -1.124798991, 1.65511603
和除数 2.42
设置输入框。点击“设置点。”、“设置除数”和“开始”。我们可以一直等待,或者点击“隐藏步数”。注意右下角的步数计数器。当它接近 506000
时,点击“显示步数”(以前是隐藏按钮)。您会看到一个极限环开始形成。
在 .37, .32, .96 和 div= 2.05 时,您会看到这个,它让我想起了成群的鸭嘴。(当然,它会。)
或者在这个 .7, 0, 0, 和 div= 1.23 时。(我能说什么呢?)
在以下位置存在漂亮的周期加倍极限环:
div=1.89(尝试从 .5, -1.6, .2 开始)
div=1.99(尝试从 .5, -.4, 1.6 开始)
在除数小于 1.2 时,Barnes 五次动态系统变得不稳定。如果您“隐藏步数”来查看爆炸的轨迹,barnes3dQuinticDiv.py 脚本将暂停并显示结束轨迹和步数。点击“新点”或设置一个新的“设置点。”并点击“开始”以重新启用“隐藏步数”。
多一点或少一点立方
我小心地避免了更改立方映射的 delta。现在我想指出:对于形式为N维或MxN维的 Barnes 立方吸引子,0.05 的 delta 使它们稳定混沌。对于 MxNxO 等类,需要 0.042 或 0.041 的 delta。我毫不怀疑 MxNxOxP 或 MxNxOxPxQ 或更高类的稳定混沌 delta 范围会进一步缩小。
与五次映射一样,不同的 delta 或除数范围会导致不同的不稳定、极限环和稳定混沌系统。这是 Barnes 猜想的另一个要求——delta 或除数(它们几乎都是 delta 参数)必须从稳定区域中选择。
您已经看到了稳定的混沌 Barnes 3D Cubic 吸引子。您可以尝试 barnes3dCubicDelta.py。在 .5, -1, 1.5(使用“设置”来设置当前点)和 delta 为 .1(使用“更新 δ”来更新 delta)时,您将开始看到一个非混沌的极限环。点击“开始”,然后点击“隐藏”以加快步数。当步数计数器接近 195000 时,再次点击“显示”/“隐藏”。点击“放大”两三次以放大显示的极限环。轨迹上略有变化的线段可能会使极限环呈现出磨损的外观,但请尝试点击“显示终点”。
就像蚂蚁排着单队行进一样,极限环遵循着一条非常精确的曲线。将 delta 更新为 .18
。极限环应该变得混沌,但根据您运气的好坏,可能会收敛到两种周期加倍形式中的一种。如果轨迹确实变得不稳定,只需再次点击“设置”和“开始”以查看第二种形式。如果您将 delta 更新为 .25
,您将看到一种我称之为“极限环的极限环”的形式。我告诉过您它很稳定。如果您将 delta 更新为 .259
,极限环将尝试维持,但最终会变得不稳定并爆炸。至少它试图保持稳定,勇敢的鸭子。
值得一提的
- LCbballPolar.py - 显示极限环的侧视图,这样 '<'、'>' 就可以进行极坐标轨道
- barnes3dCubicStereo.py - 吸引子立体镜。“a”、“d”和“空格键”补充了 '<'、'>' 以及“开始”/“暂停”按钮的点击。按住一个键应该会重复
- alternateBarnes9dCubic.py - 显示 Barnes 9D Cubic 吸引子的早期想法
- barnes3dCubicMidpoint.py - 显示 3D 吸引子中点法的变体
- barnes3dCubicIntegrate.py - 积分和中点。设置“使用中点。”
然后尝试“+δ Map”/“-δ Map”。使用中点法时,请勿尝试“严格有序方程。”
并且不要更改求值顺序,从“xyz”开始。当然,不要测试离散中点法的稳定性。 - honestBarnes2x2x2dCubic.py - 仔细查看 barnes2x2x2dCubic.py 中的
step()
函数,我意识到它只有 2+2+2 个方程,而不是 2x2x2 个。
我想 Barnes 吸引子的形式比我最初在猜想中描述的要多。但如上所述的猜想保持不变。 - barnes3dQuinticBasin.py - 盆地更接近外壳。
- barnes3dQuinticAttractorField.py - 12 行编辑。您可以看到盆地边缘。
- ransqrd.py - 帮助我可视化形状随机分布的工具。
- testIntercept.py - 用于验证 MxN 链接数学的工具
跳入深水区
他们说我们可能生活在一个巨大的计算机模拟中。为什么会有一个超宇宙计算机,如果它不是模拟呢?在小尺度上,就像粒子不是一个点一样,现在也不是一个瞬间。现在以有序的方式通过几个小维度进行交换,先在这里发生,然后是那里。现在不是离散的。
跳入另一个深水区
规范玻色子,如光子,是穿越大空间的小空间被激发的粒子。它们可以成纠缠的对或 n-元组(小 n)产生,并在大空间中物理分离,但它们仍然共享它们的小空间。一点也不诡异。
一些跳跃问题
为什么时元不能是一个十足的玻色子?
如果宇宙大爆炸如此密集和巨大,为什么它没有变成一个黑洞?
如果弦理论需要微小的振动弦,为什么不使用一个足够维度的 Barnes 吸引子或极限环来随着时间颤动呢?不需要愚蠢的卡拉比-丘流形。为什么“开放”弦会“锚定”在膜上?Barnesian 空间中的居民可以自由地走多远,就看他们的小步伐能带多远。长正合序列?(版权所有 2010)真的吗??!又来了,试图关联上同调……
……我确实很抱歉。我想我绊倒了一个讲台。(另请参阅《引力子、超空间、膜和头脑风暴的乐趣》,版权所有 2000。更容易阅读。)
数学上来说,时间仅仅是虚数吗?完了。
我向未来道歉,可能存在的链接损坏。最后,我想把这篇文章献给我的哥哥,他的绰号长期以来一直是“Quacker”。