挑战的目的是大约绘制吸引所述的逻辑映射作为其参数的函数[R (也称为分支图),或它的一个子区。在Wikipedia的以下图像中可以看到该图形的外观:
背景
该逻辑映射是一个数学函数,其采用输入X ķ并将其映射到输出X K + 1定义为
x k + 1 = r x k(1− x k)
其中r是映射的参数,假定位于区间[0,4]中。
给定[0,4]中的r以及间隔[0,1]中的初始值x 0,有趣的是将函数重复应用大量N次迭代,从而产生最终值x N。请注意,x N也必将位于[0,1]中。
例如,假设r = 3.2,N =1000。初始值x 0 = 0.01得出x 1000 = 0.5130。对于x 0 = 0.02,结果为x 0 = 0.7995。对于任何其他初始值x 0,最终值x 1000都非常接近0.5130或0.7995。在图中将其视为水平位置r = 3.2 处的两条线的高度。
这并不意味着对- [R = 3.2的每个序列收敛于这两个值中的一个。实际上,对于上面考虑的两个初始值,序列为(请注意振荡行为):
x 0 = 0.01,...,x 1000 = 0.5130,x 1001 = 0.7995,x 1002 = 0.5130,...
x 0 = 0.02,...,x 1000 = 0.7995,x 1001 = 0.5130,x 1002 = 0.7995 ,...
什么是真实的是,对于足够大的Ñ,以及对于几乎所有的初始值X 0,术语X Ñ将接近集合{0.5130,0.7995}中的元素中的一个。这个集合叫做该特定r吸引子。
对于参数r的其他值的活检集或其元素的大小将改变。该图绘制了每个r在吸引子中的元素。
特定r的吸引子可以是估计由
- 测试各种初始值x 0 ;
- 让为大量的系统演变Ñ迭代; 和
- 注意到最终值的X Ñ获得这一点。
挑战
输入项
N:迭代次数。
r 1, r 2和 s。这些定义了 r值的集合 R,即 R = { r 1, r 1 + s, r 1 + 2 s,..., r 2 }。
程序
初始值x 0的集合X是固定的:X = {0.01,0.02,...,0,99}。可选地,X中还可以包含0和1 。
对于每个ř在ř并且每个X 0在X,迭代的逻辑映射Ñ次以产生X Ñ。记录获得的元组(r,x N)。
输出量
绘制每个元组( r,x N)为平面中的一个点,其中r为水平轴,x N为垂直轴。输出应该是图形的(不是ASCII艺术)。
附加规则
- 指示的过程定义了所需的结果,但未执行。可以使用其他任何处理相同(r,x N)元组的过程。
- 输入像往常一样灵活。
- 浮点错误不会对答题器造成影响。
- 需要以任何可接受的格式进行图形输出。特别地,输出可以显示在屏幕上,或者可以产生图形文件,或者可以输出RGB值的阵列。如果输出文件或数组,请张贴一个显示时的示例。
- 图形可以是矢量或栅格。对于光栅图形,图像的大小至少应为400×400像素。
- 每个点应显示为单个像素,或者显示为一个像素大小的标记(否则,图形会很快变得混乱)。
- r(水平轴)的轴范围应为[0,4 ],x轴的范围应为[0,1] N(垂直轴)的;或者它可以更小,只要它包括所有获得的点。
- 轴刻度是任意的。特别是,两个轴的比例尺不必相同。
- 可以接受网格线,轴标签,颜色和类似元素,但不是必需的。
- 以字节为单位的最短代码获胜。
测试用例
单击每个图像以获取高分辨率版本。
N = 1000; r1 = 2.4; r2 = 4; s = 0.001;
N = 2000; r1 = 3.4; r2 = 3.8; s = 0.0002;
N = 10000; r1 = 3.56; r2 = 3.59; s = 0.00002;
致谢
感谢@FryAmTheEggman和@AndrasDeak在沙箱中遇到挑战时提供了有益的意见。