发现分数的形状

的可视化数据驱动的探索小数分数的扩张形式1 / n

分数的形式的集合的可视化效果1 / n。作者形象。

数学家模式必须是美丽的…

g·h·哈迪

看着另一位伟大的Numberphile上周的视频。在这布雷迪采访了马特·亨德森他更多的迷人的可视化效果。在这个特殊的马特谈到如何想象的无限数字非理性的数字,如πφ(黄金比例),使用龟图和一个很酷的笔式绘图机。

它让我思考一些数学的th我的女儿最近做的分数和小数的扩张,和马特的一些想法是否会帮助她得到更好的感觉是怎么回事?至少我希望更多的视觉讨论数字可能会引发更深层次的欣赏美丽的数学模式,巩固…嘿,一位父亲可以梦想…

无论如何,在这篇文章中我将描述我如何应用马特的一些想法开始我自己的探索视觉景观的数字。我决定专注于简单的分数的形式1 / n在这里我将看到的值n从1到100。我的目标是描述我使用的方法和结果可视化,与他们的一些最有趣的方面,但是大多数情况下我将让可视化效果不言自明。

T他使用可视化的方法,马特是一个简单的一个,我有一个代码片段在本文的最后一个基本的Python实现。的方法是这样的:

  • 想象我们控制一个小机器人(龟图中的“海龟”),能画它遵循的路径。
  • 为简单起见,这个机器人总是往前移动一个单位距离和数量我们要想象的数字确定方向移动。
  • 因为可能有10位数字(0,1,2,…,9)有10个可能的方向和数字d转换成一个角度d * 360/10度。因此,数字1将在36度旋转机器人从当前标题,数字2将产生一个72度旋转,等等。
  • 以这种方式任意数量得以成像通过定向指令编码的位数。数字也可以用来分配一个颜色每个线段的路径产生;10位数有10个可能的颜色。

下面的动画展示了我们可以使用这种方法来想象第一个64位小数部分的分数1/14 (.0714285…)。小数点的扩张是无限的——它被称为1/14重复的部分循环小数——永远位数714285重复,但不会作为我们会看到部分是重复的。每一个数字对应于一个新颜色线段。在这种情况下,前两个数字(00)导致两个水平(蓝色)线段因为;转角是0。这是紧随其后的是一把锋利的252度的数字7 (7 x 36 = 252),然后一个更温和的36度的1,等等。

可视化的一个动画制作中的第一个64位小数扩张的1/14;每个数字定义了转角和被分配一个预定义的颜色。作者形象。

便于读者更悠闲的分析,下面的序列显示了单个帧的动画。在每一帧过程由标记和表示端点的空标记。每一帧也贴上相应的数字。

动画帧的第一个64位小数部分的1/14。The start-point is indicated by the filled marker and the end-point by the unfilled marker. Line segments are colour-coded according to their corresponding digit in the decimal expansion. Image by author.

现在我们已经处理的可视化过程中,让我们看一看的结果应用到一些熟悉的分数。

下面是一个网格的所有分数的形式1 / n的值n从1到100。每个情节展现的第一个1000位小数扩张,如果它们存在;简单的无重复这样的分数1/2,1/4等等,没有无限小数部分,所以只提供少量的数字可视化。如上所述,线段的颜色反映了数字和相应的角度,所以每个可视化的形状和颜色告诉我们关于小数位数的扩展。

产生的可视化效果的第一1000位小数分数的扩张形式1 / n n的值从1到100。每个可视化贴上分数和小数部分的扩张。作者形象。

当我第一次看到这些给我留下了深刻的印象如何可视化效果在视觉上有趣和引人注目的。我没想到一个简单的分数1/7生产这样一个对称的“推进器”,只看复杂的可视化的性质为1/83或1/98,这看起来像精致的花花环。

想象第一个100位小数部分的1/27。作者形象。

说句题外话,值得强调的是,所有这些数据可视化已经按比例缩小的易读性,通过确保他们最大化填充可用的框架,但这掩盖了1/27结构的可视化,,从表面上看,看起来像一个简单的直线,表明非重复性的分数。在现实中这部分有一个更复杂的stair-like可视化,如上所示,当我们放大的前100位小数扩张。

Obviously明显的复杂的结构和旋转对称的可视化这些是因为周期性的自然十进制扩张。他们反复出现的数字合起来创建可视化的重复结构。在数学的语言,这些无限重复序列的数字被称为重复的语句reptends和reptend称为它的长度

可视化四强调第一次出现的每个部分的重复序列的数字。每个可视化标记的分数,小数扩张的一部分,其重复序列的长度(reptend时期),在括号中。作者形象。

上面的四个数据可视化显示的第一个1000位小数分数1/3的扩张,1/14,1/85,1/97,在某种程度上强调了可视化的一部分对应于第一次出现的每个部分的重复数字。

这些分数都是选择,因为他们有不同的reptend时期。1/3的循环节是单一数字“3”(一段1)这意味着它的可视化是由重复的一个线段(红色)在当前航向108度角,如图所示。

分数1/14有6位reptend(“714285”),转化为个体的叶片可视化的结果10-blade,螺旋桨风格。请注意,只有5线段为1/14的6位reptend可见。这是因为它的最终数字“5”导致可视化回头本身(180度)掩盖了先前的线段为“8”。

事情变得更加复杂reptends更长。1/85的16位重复对应的一边是五角可视化的96 -位reptend 1/97创建它的一个5角块。

F罗可视化的角度,reptend的长度是一个有用的测量的复杂性,因为不再重复序列的分数往往产生丰富的可视化效果比用较短的重复序列。看到这,下图的降序排列的长度reptends。此外,他们强调的部分对应的可视化reptend的第一次出现。这有助于澄清每个可视化是如何由其重复部件的集合。

可视化的第1000位小数扩张的重复(reptend期> 1)分数1 / n n的值从1到100。过程的可视化表示的标记和端点的空标记。每个可视化凸显了其第一个重复序列和每个可视化显示的标题部分本身,重复的前10位,和重复序列的长度数字(reptend期)。每个线段颜色根据相应reptend数字正如前面。作者形象。

经常一块reptend有助于直观的可视化。例如,在分数1/71/14它对应于一个主要的叶片的,同样的喜欢1/19,它对应于一个单一的手臂的可视化。然而,等分数1/94,1/711/62重复结构明显少得多,实际上是通过可视化编织以更复杂的方式。

也注意到如何最好的分数(倒数的质数)- - -1 / p, p是一个典型——与p > 5与更长的reptends和可视化的复杂性比非优质分数。我相信这是众所周知的理论家,如数量。对于任何' p除了2和5,1 / p的小数部分重复将p - 1的一段时间,但有趣的是看到它反映在可视化效果,值得进一步探索。

T他这篇文章的目的是开始视觉探索简单的分数的形式1 / n,通过使用他们的十进制扩张组定向指令指导可视化过程。我发现结果既引人注目又邀请的丰富性和规律的结构。

我已经集中在可视化之间的关系和循环小数的性质扩展。分数与不再重复序列与更复杂的数据可视化,但到目前为止我只触及表面,和有很多值得进一步研究:

  • 为什么大部分的可视化展示5倍10倍旋转对称吗?可能相关的事实是我用10为底?这持续的较大值吗n或的倍数1 / n吗?基地可视化如何改变其他号码?对称性可以从十进制扩张本身决定的,这是没有生成可视化?
  • 清晰牢固的关系之间存在一些分数。例如,分数基于3的倍数,6和7是类似的,当然10的倍数(1 / n、1/10n 1/100n等等)将产生相同的数据可视化,除了平移变化由于任何额外的0小数点后。可以学到什么从这些关系和他们如何影响可视化?
  • 如果我们结合-加/减,多个/分裂-分数?他们还以一种可预见的方式改变?
  • 显然有不同类型的可视化效果,例如,明星、螺旋桨、五角大楼和十边形,楼梯等。这是全部还是有额外的类的可视化效果,简单的分数吗?

当我最初的目标是帮助我的女儿开发更大的升值的模式存在于我们周围的数字…这是如何工作的?假设一项正在进行中的工作。但光明的一面,至少受到可视化效果。现在在我们家我们都有我们最喜欢的分数和被奖励见她兴趣发展为她试图发现中的重复结构的数据可视化和匹配他们的数字十进制扩张。

附录

下面的Python片段包含通用的代码可视化对于一个给定的数字。在这工作我使用Matplotlib产生的数据可视化Mpmath所需的浮点精度;Python的默认的精度是不够的。

def draw_number (ax, n):
”“n”画一个简单图形。

参数:
ax:轴(Matplotlib)用于可视化。
护士:想象。
”“”
# n转换成一串数字;删除小数点。
数字= tr (n) .replace ('。“,”)
坐标=[(0,0)]#原点/ coord开始。
标题= 0 #一个“东风”标题。
#遍历每个数字…
数字的位数:
#数字转换成int在所需的基础。
n = int(数字)
#用数量来选择一个转角;假设以10为底。
度= n * 360/10

#更新当前新的转角。
标题+ =度
#当前的x, y坐标。
current_x current_y =坐标[1]

#计算x和y抵消基于新标题。
x_offset = math.cos (math.pi *标题/ 180)
y_offset = sin (math.pi *标题/ 180)

#新x和y坐标。
new_x new_y = current_x + x_offset current_y + y_offset

#地块新行从当前新xy
ax.plot ([current_x, new_x], [current_y, new_y])
#添加新的xy coord列表。
坐标。追加((new_x new_y))

#标志着开始点和结束点
ax.plot (
(坐标[0][0])* 2(坐标[0][1]]* 2,
标志= ' o ' markersize = 8, markeredgecolor =“k”,颜色=“k”
)
ax.plot (
(坐标[1][0])* 2(坐标[1][1]]* 2,
标志= ' o ' markersize = 8, markeredgecolor =“k”,颜色= ' w '
)
#返回比已经绘制坐标。
返回坐标

都柏林大学的计算机科学教授。关注AI /毫升和推荐系统,应用于电子商务、媒体、和健康。

Baidu
map