不用花钱也玩高尔顿钉板
高尔顿钉板问题是由英国生物统计学家高尔顿提出来的,这个问题的模型如图1所示,小球从最上方被扔下,每经过一个钉子,都有一半的可能从左边走,一半的可能从右边走,当有很多个小球从上往下随机掉落时,落在下面的格子里的小球数量分布上会呈现一定的统计规律,这个模型可以用来直观地认识中心极限定理——概率论中讨论随机变量序列部分和分布渐近于正态分布的一类定理。这样一块高尔顿钉板淘宝上要卖上百元,我们用编程也能观察到这种概率现象。
说到概率就很容易想到游戏用的骰(tóu)子,它可以产生随机数1到6。当我们掷下一颗骰子时,每种点数出现的概率都是1/6;当我们掷下两颗骰子时,一共有6×6=36种情况。两颗骰子点数的和最小是2最大是12。
点数和为2,可能性只有(1,1)一种,概率为1/36。
点数和为3,可能性有(1,2),(2,1)两种,概率为2/36=1/18。
点数和为4,可能性有(1,3)(2,2)(3,1)三种,概率为3/36=1/12。点数和为5的概率为5/36;点数和为6的概率为6/36=1/12;当点数和为7的概率和点数和为9的概率为4/36=1/9……当大家对所有的点数的概率分析完成后可以进行加和,验证最终是否等于概率1。
频率和概率一样都是统计系统各元件发生的可能性大小的概念。不过概率是一个稳定的数值,也就是某件事发生或不发生的概率是多少。频率是在一定数量的某件事情上面,发生的数与总数的比值。假设事件A在100次测试中发生了28次,那么它的频率是28/100=0.28,频率是有限次数的试验所得的结果,可能当测试无限次时A事件的概率为0.3。我们说骰子的每个数字出现的概率是1/6,仅仅几次试验是不具备统计规律的,只有投掷一定的数量,最终的频率才会接近1/6。
我们用Scratch模拟投掷两枚骰子的点数和,验证一下高尔顿板的概率。角色使用圆球,先创建一个初始化积木,创建列表Results用1-12项来存放出现对应数字和的次数(投掷两枚骰子不会出现点数和为1的结果)。变量total用来统计投掷的次数。变量roll记录单次投掷两颗骰子的点数和。一次roll,将total加1,roll设为2个1到6的随机数之和,根据和将列表中的对应项记录加1。
下面将列表中的读数作成柱状图,横轴为投掷的点数和1到12,纵轴为出现的次数,最大值为500。每次投掷后在(X=-100+roll×25),(Y=-100+Results的第roll项/2)画下一个图章。为了使得柱状图更加好看,这里我们可以采用改变颜色特效的方法,将颜色特效设定为Results的第roll项/6,这样数量约接近500就越红。
当使用自定义函数后,主程序变得更加简洁了。当投掷骰子点数和的概率某一项大于500时,停止投掷,显示出的柱状图就是概率分布图。通过多次测试可以看出来结果频数最高在7,且呈现正态分布,是不是和高尔顿板展现出的效果一致。
通过学习Scratch编程,我们可以融入课堂学习的数学知识和生活中的小技巧。并且形象生动的展示数学带给我们的魅力,扩展自己的思维,活学活用。
、算法练习——画黄金螺旋线
斐波那契数列又称黄金分割数列,而斐波那契螺旋线是在斐波那契数列为边长的一些列正方形中绘制一个90度的弧线,将这些弧线连接起来组成的一条漂亮的螺旋线,又称为“黄金螺旋”。自然界中存在许多“黄金螺旋”的图案,不得不感叹大自然的鬼斧神工(图1)。
先思考斐波那契螺旋线的绘制算法,需要产生符合斐波那契数列的数字(0,1,1,2,3,5,8,13……),这个数列可以用递归的方法定义F0=0,F1=1,Fn=F(n-1)+F(n-2)。接着按这个数列绘制出对应边长的正方形并拼接在一起,然后绘制出对应的弧度进行组合完成“黄金螺旋”。
接下来思考用Scratch完成这个算法需要将绘制过程分为几个步骤。对应分成三个步骤:1.绘制正方形;2.计算斐波那契数列;3.绘制弧线(图2)。
开始编程,删除小猫角色,新增铅笔角色用于绘制正方形,在绘制前先在造型中将笔尖的位置调整到中心。初始化画笔的粗细、角色大小、抬笔状态。接下来考虑需要使用的变量,变量有三个:“正方形的边长”,从图中观察到初始值是1;为了用递归产生斐波那契数列的数字,还需变量F1初始值0和F2初始值1。图中有六个正方形,所以可以定义循环重复执行6次(也可以手动输入其他循环次数)。增加两个自制积木:“绘制正方形”和“计算斐波那契数列”;正方形的绘制比较简单,就不细说了,用(“正方形的边长”×30)让方形大小更好看。需要注意一个细节,画完一个正方形后下一个方形的起点不是在上一个正方形的终点,图2中绿色箭头标注的就是前三个正方形的起点,仔细分析知道画完后还要移动两次。绘制完一个方形后用自制积木“计算斐波那契数列”计算出下一个正方形的边长。到这一步结束后,我们已经完成了所有正方形框的绘制。接下来是对弧线进行绘制了(图3)。
正方形用蓝色绘制,螺旋用红色绘制,所以需要创建一个新的空白角色用于绘制螺旋线。初始化笔画粗细、起始位置、抬笔状态。弧线角度为90度,重复执行10次,每次右旋转9度。确定旋转时移动的步数要稍微难一些。直接告诉你答案,这里用(正方形的边长×0.154)。为什么是0.154倍呢?本来移动步长应该为以正方形边长为半径的弧线长的十分之一(πr/2÷10=0.157r),不过考虑到画笔还有3的粗细,所以经过调整为0.154倍边长。
“黄金螺旋”只是数学中的六大经典螺旋之一,还有“费马螺旋、阿基米德螺旋、双曲螺旋”都是非常有意思的图形,大家也可以去尝试挑战一下自己哦。