我最近看了这个关于Tper自我参照配方的博客。这个公式很有趣。它的图形包含适合17*106网格区域的所有可能的位图。因此,在众多位图中有一个包含公式本身的有意义的表示也就不足为奇了。实际上,在17*106网格中拟合公式的方式有多种,因此该公式在图形中有多次出现。但也有其他所有的公式都符合。这并不是真正的自参考,因为您需要查找正确视口的数字N没有包含在其中(请参阅底部的更新,Jeff Tper已经生成了其他真正自参考的公式,但这个著名的公式不是)。您不能将表示为数字的位图放入同一位图中,因为您将用于基数为10的数字的字体每个数字至少需要4*3&34;像素,而该数字仅包含log210位。还有比这更好的办法吗?某种形式的压缩可能会奏效。
所以我想我该如何设计一个真正自我参照的公式。由于以下几个原因,此设计过程更像是编程:
以下是最终形式的公式(如果有足够的兴趣,我可能会在后续文章中描述我如何达到这种形式的步骤)。最初,我在设计过程中使用了Haskell。为了验证最终的形式,我不得不创建C程序(使用GMP大数库),因为Haskell太慢了。这使我可以再次验证公式是否与程序匹配。这是用LyX表示的公式:
这个数字省略了N的值。N是一个非常大的数字,它包含12876位数字。您可以在下面的函数图中看到N。此外,您还可以复制并粘贴下面的C源程序中的N。下面是它自己绘制图形时的函数(黄色边框内):
你可以在这里找到我用来绘制它的程序的源代码(它需要GMP大数库来编译和运行)。在程序的顶部有一些常量,可以用来定义你想要的视区。它被设置为一些有趣的区域,包括N的一部分,但如果您有耐心,可以将其设置为整个区域。输出图形打印在终端上,';#';表示真值,';##39;表示假值。如果设置的X轴比终端大,则可以重定向到文件,并使用等宽字体在非自动换行编辑器中打开。我已经将这样的文件转换成PBM ASCII格式,并使用GIMP获得上面的图像。
注意C程序非常慢。在我的电脑上,它运行了大约30个小时。我可以对其进行优化,但我希望C中的函数与公式中的函数紧密对应。虽然程序使用整数值进行x和y计算,但是您也可以用实数值x和y来表示它。如果您不想以这种方式看到N的所有数字,则可以大大加快速度。替换:
在本例中,您将只看到N的最后60位(并且它们将被转移到不同的位置)。
2017年12月29日-我注意到杰夫·塔珀(Jeff Tper)创造了更多真正自我参照的公式,它们就在这里。文件有2007年,所以它们早于我2011年的公式。