Scratch & Math: 不能說的祕密(一)

Peter Wei
8 min readMay 6, 2017

--

古希臘數學家畢達哥拉斯和他的學生奉行數字至上的信念,混合了敬神儀式和數學教義,成為一個神祕的學派。這個學派對數字的痴迷發展出一個奇異的宇宙論,認為整數是構成宇宙萬物的最基本單元,研究整數的比值和平方等算術是探究真理的唯一途徑。在這一章裡我們追隨畢達哥拉斯的腳步,用Scratch寫程式來認識三角平方數。

數學關鍵字: 有形數、三角數、平方數、三角平方數。

數學家: 畢達哥拉斯。

Scratch程式:https://scratch.mit.edu/projects/159322828/

擺置小卵石

畢達哥拉斯是西元前六世紀的希臘數學家和哲學家,他和孔子、釋迦牟尼生在同一個時代。畢達哥拉斯相信數字是一切事物的源頭,在遊歷過巴比倫和埃及後,他在義大利南部招收學生,創立學派。

畢達哥拉斯,西元前六世紀的古希臘數學家,發現並證明著名的畢氏定理。(取自維基百科 Pythagoras CC BY-SA 3.0

畢達哥拉斯學派具有相當的神祕色彩,把崇拜建立在以數為主體的思想上,並且混合了種種敬神儀式和禁忌學說。學派裡的三百名學生都必須發誓保密,嚴禁洩露任何導師的神聖教誨。

畢達哥拉斯和學生在地上擺置小卵石進行對數字的研究,事實上現在英文裡「算」(calculate)這個字就源自於希臘文裡的「擺置小卵石」(psěphoi)。畢達哥拉斯學派認為數並不僅僅具備計量的功能,數本身更是實際存在的事物。數與數之間存在許多規律性,可以用來解釋大自然裡的現像。

舉例來說,在地上擺置10顆小卵石,可以排成下圖左邊的三角形,也可以排成下圖右邊的矩形,因此可以稱數字10為三角形數或矩形數。

如果是9顆小卵石,可以排列成3x3的正方形,卻無法排成一個三角形,數字9可以稱為正方形數卻不是一個三角形數。

由這些觀察,畢達哥拉斯學派認為數與形是一體的兩面,萬物的基礎都來自於整數,而每個整數都有相對應的形狀。

小卵石排列出形狀的概念逐漸發展出有形數(figurate number)的計算。在下圖裡每一層的三角形數排列具有規律性:第一層有一顆,第二層有兩顆,到第n層會有n顆小卵石。

(取自維基百科 Polygonal number CC BY-SA 3.0

用這種規律性可以推導出三角形數的計算公式。對於一個n層的三角形數來說:

平方數則是指一個可排成正方形的整數,下圖表示了平方數逐層增加的規律:第一層有一顆,第二層增加三顆,第三層增加五顆,第n層增加(2n-1)顆。有趣的是每一層加上的數都是奇數,這也告訴我們從1開始的奇數數列相加必定是平方數。

(取自維基百科 Polygonal number CC BY-SA 3.0

對一個n層的平方數可以列出算式如下,

平方數還有一個和三角數相關的特性。觀察下圖左邊的平方數16,可以分為兩個三角數6+10。再看看下圖右邊的平方數25,同樣可分為兩個三角數10+15。

6+10=16 (取自維基百科 Triangular number CC BY-SA 3.0
10+15=25(取自維基百科 Triangular number CC BY-SA 3.0

也就是說一個n層的三角數加上(n-1)層的三角數會等於n層的平方數。從小卵石的排列也一樣可以觀察出這種特性。

除了三角形數和平方數,有形數也有五邊形數、六邊形數以及更多的多邊形數。

五邊形數,第n個五邊形數可以用下面的公式計算:

(取自維基百科 Polygonal number CC BY-SA 3.0

六邊形數,第n個六邊形數可用公式n(2n-1)計算:

(取自維基百科 Polygonal number CC BY-SA 3.0

動手做3–1 三角平方數

[程式設計需求規格]

有一些數同時是三角數又是平方數,這種數被稱做三角平方數,比如說36,可以視為一個8層的三角數,也可以視為一個6層的平方數。

用Scratch程式找出10個三角平方數。

[程式設計角色和舞台]

在這個程式裡不須要任何角色或舞台設計,直接在舞台顯示三角平方數的計算清單。

[程式設計解決方案]

假設三角數排列是t層小卵石,

平方數排列是s層小卵石,

當三角數等於平方數時,這個數就是我們要找的三角平方,

我們可以從1開始掃描t的值,逐一計算s的值,因為s代表的是平方數排列的層數,一定是一個正整數。所以當我們用下面開根號的式子計算出s的值是正整數的話,就代表找到了一個三角平方數。

舉例來說,如果t=8,可以計算得到s=6是一個正整數,所以s^2=36是一個三角平方數。

如果t=9,計算得到s=6.708,不是一個正整數,s^2=45不是一個三角平方數。

[程式檢視]

程式[三角平方數3–1.1]的迴圈負責從1開始掃描三角數層數t,然後用下面的式子推導出平方數層數s:

轉化成scratch的指令就變成:

我們在這裡運用到運算類指令裡的sqrt指令,這是英文square root的縮寫,代表開平方根的意思。

事實上這個指令同時提供了其他各種有用的數學運算,點選指令的下拉選單,可以看見指令還支援三角函數、指數和對數的運算。

求得s的值後,我們用了一個技巧來驗證s是不是整數:

就在運算sqrt指令的下拉選單裡,選取不同的選項floor,代表著無條件捨去一個數字的小數點後的值。

如果t=8,會計算出s=6。由於6沒有任何小數點的位數,無條件捨去小數點後的數字完全沒有影響,仍然是6。

如果t=9,計算出s=6.708。如果對s小數點後的值做無條件捨去,s的值就會變成6。

這個時候無條件捨去小數點後的值是6,不等於原來的值6.708。間接驗證了原來的s=6.708不是整數。

按下shift+小綠旗進入turbo模式計算會比較快,計算完成後舞台會顯示三角平方數、三角數層數和平方數層數的清單。

有一個特別的現象是,如果計算三角數層數除以平方數層數,兩數的比值會漸漸趨近一個定值1.414213。這是一個特別的數,我們在後面的章節會做更詳細的討論。

三角平方數計算(取自維基百科Square_triangular_number

延伸閱讀:

Scratch & Math: 天花板上的蜘蛛(一) Scratch & Math: 天花板上的蜘蛛(二)

Scratch & Math: 直線裡的宇宙觀(一) Scratch & Math: 直線裡的宇宙觀(二)

Scratch & Math: 不能說的祕密(一) Scratch & Math: 不能說的祕密(二)

--

--

Peter Wei

DIY, Scratch, Math, Essay, Book, Travel, Movie, Music