级联加倍


12

首先,简短的数学插曲值得您注意:

如果为0 < a < 4,则逻辑函数 f(x) = ax(1-x)将在其内部映射间隔[0,1]。这意味着可以玩迭代游戏;例如,如果a = 2,则初始值0.3变为0.42,然后为0.4872,依此类推。

随着参数的a增加,二次函数f在以下意义上变得更加复杂:

  • 0 < a < 1 所有初始值都向0迭代。
  • 1 < a < 3 0变成排斥,但是有一个新的不动点(a-1)/ a吸引了所有迭代。
  • 3 < a < 1+sqrt(6) 新的固定点变得令人反感,但出现了两个吸引点的循环。
  • 3.44949... < a < 3.54409... 2个周期变得令人排斥,但出现了4个吸引点的周期。
  • 等等

费根鲍姆注意到,这些参数区间的长度在那越来越接近的速度下降4.6692...时,费根鲍姆常数。奇妙的发现是,此2期分叉序列是任何函数(如二次抛物线)先增大后减小的普遍现象。这是有关混沌普遍性的第一批报告之一

现在迎接挑战!编写最短的代码来计算 Feigenbaum常数,以达到您选择的精度。这里的重点不是通过编码您搜索过的数字来欺骗系统,而是实际上让计算机找到该值。作为参考,这是30位数的常数:

4.669201609102102990671853203821578


5
令我们惊讶的是,我们还没有一个挑战来计算这个常数,这是我们错过的一个好主意。最近似乎是在绘制后勤吸引子。我建议让代码采用最大误差或位数,并在该精度范围内产生常数(忽略超过某一点的机器限制)。或者可能会计算出第i个和第(i + 1)个加倍间隔之间的比率,这会收敛到常数。选择准确性的高尔夫球手过于模糊,并且无法进行硬编码。
xnor

我努力思考如何表达挑战。问题在于,要精确计算这是一件非常困难的事情,因此我认为人们将更加专注于实现滑动方法,而不是通过蛮力获得更多的数字。如果人们有不同的看法,我将更改规则。
罗德里戈·佩雷斯

1
您在寻找一种光滑的方法还是避免蛮力?请注意,默认情况下,对于代码高尔夫,我们不需要运行时间或空间上的任何限制,因此,针对简短内容进行优化时,答案往往效率很低。也许您正在寻找做出最快的代码或对复杂性进行限制的挑战?
xnor

Answers:


3

的Javascript,141个 138 135 131字节,8位数字

我猜是这样 它应该可以改进很多。如果有人需要开始:如何计算Feigenbaum。而且,如果您想知道如何以代码方式进行操作,请查看this

复制将以下代码粘贴到您的控制台中。计算4.6692016 68823243(所以不是很精确)。

b=1;c=0;e=3.2;for(i=2;i<13;i++){z=b-c;a=b+z/e;j=4;while(j--){x=y=0;k=2**i;while(k--){y=1-2*y*x;x=a-x*x;}a-=x/y}e=z/(a-b);c=b;b=a;e}

b=1;c=0;e=3.2;for(i=2;i<13;i++){z=b-c;a=b+z/e;j=4;while(j--){x=y=0;k=2**i;while(k--){y=1-2*y*x;x=a-x*x;}a-=x/y}e=z/(a-b);c=b;b=a;e}
console.log(e)


2

Python,127个字节

c,b,e=0,1,2
for i in range(2,13):a=b+(b-c)/e;exec(("x=y=0;"+"y,x=1-2*y*x,a-x*x;"*2**i+"a=a-x/y;")*17);d,c,b=(b-c)/(a-b),b,a;e=d

用他的JavaScript答案感谢@ThomasW。

添加print(d)到输出4.669201673141983。由于执行前会计算长字符串,因此需要花费几秒钟的时间。


1

木炭,84字节

A¹βA⁰εA³·²δF…²¦¹³«A⁺β∕⁻βεδαFχ«A⁰ξA⁰ψFX²ι«A⁻¹××ψ²ξψA⁻α×ξξξ»A⁻α∕ξψα»A∕⁻βε⁻αβδAβεAαβ»Iδ

在线尝试!链接到详细代码以进行解释。

这里开始使用算法。

打印4.66920 0975097843(6位数字)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.