Scratch & Math: 兔子繁殖是一個好問題 (二)

Peter Wei
9 min readJul 1, 2017

--

十七世紀傑出的德國數學和天文學家克卜勒曾經說過:「幾何學裡有兩樣偉大的寶藏,一樣是畢氏定理,另一樣是黃金分割。」克卜勒觀察到連續兩項費氏數比值會收斂到黃金比例1.618。在這一章裡我們就要基於克卜勒的發現,實際計算費氏數列和黃金比例的公式解。

數學關鍵字: 費氏數列、黃金比例。

數學家:克卜勒。

Scratch程式:

費氏數列和黃金比例的關係

黃金比例(golden ratio)是一個特別的比值。當有兩個數a和b滿足下面的式子時,a 和b的比值稱做黃金比例。

這個式子表達的是兩數和(a+b)與較大數a的比值,會等於a與b的比值。古希臘人將這個比值命名為φ,由黃金比例的定義化簡可以得到φ的值,

黃金比例φ是一個無理數,擁有不會循環的無窮多位小數。由於這是兩個數的比值,我們可以將這種比例應用在一個線段,

(取自維基百科Golden_ratio

在第六章我們介紹過黃金角度,圓周a和圓周b對應的圓心角比值為φ時,圓周b對應的圓心角約為137.5⁰,

(取自維基百科Golden_angle

在數學裡有所謂的黃金矩形,指的是像下圖長與寬比值為φ的矩形,

(取自維基百科Golden_ratio

黃金矩形還有一個有趣的特性,如果重複將較小的矩形以黃金比例繼續分割,會出現一個有自我重複性的矩形分割圖形。將這些小矩形的對角用弧線相連,就會得到一個等角螺線(logarithmic spiral),

(取自維基百科 等角螺线

這個螺線的圖形看起來似乎有點眼熟。比如說鸚鵡螺的貝殼就是這種形狀,

(取自維基百科Logarithmic_spiral, CC BY-SA 4.0

或者是衛星雲圖裡出現的氣旋,

(取自維基百科Logarithmic_spiral

甚至是宇宙中遙遠的星系,也會呈現等角螺線的分佈,

(取自維基百科Logarithmic_spiral

等角螺線有一個顯著的特徵叫做自我相似性。所謂的自我相似特性就是說物體本身和它的一部分完全或是幾乎相似。我們可以放大對角螺線,然後觀察到它的曲線保持著相似性。這種自我相似性有大自然中隨處可見,像是鸚鵡螺貝殼,或是前一章介紹過的向日葵種子分佈,都可以發現圖形的自我相似性。

克卜勒,十七世紀德國數學家和天文學家,以推測行星運轉的克卜勒定律聞名於世,對啟發牛頓萬有引力定律有重要的影響。(取自維基百科Johannes_Kepler

十七世紀傑出的德國數學和天文學家克卜勒曾經說過:「幾何學裡有兩樣偉大的寶藏,一樣是畢氏定理,另一樣是黃金分割。」克卜勒觀察到連續兩項費氏數比值會收斂到黃金比例1.618,我們列出費氏數列然後實際計算看看。

第20項費氏數和第19項費氏數的比值已經和黃金比例(1.61803398)在小數點後八位完全相同。

將費氏數轉換為一系列的矩形邊長,排列如下圖的形狀,再將矩形對角用弧線連接起來可以畫出費氏螺線,形狀和對角螺線非常近似。

(取自維基百科Fibonacci_number, CC0

克卜勒發現相鄰的兩個費氏數相除近似黃金比例,用數學式表示成下面的式子,

有了這樣的關係式再加以推導,我們可以用一道公式表示出任何一項費氏列數字Fn的值,

在上面式子裡,

動手做3–2 費氏數列的公式解

[程式設計需求規格]

在動手做3–2裡我們要用Scratch來實做下面的演算法,也就是要把這道看似複雜的方程式轉換為Scratch的程式。

[費氏數列演算法2]費氏數列任一項數Fn可以表示成下面的式子,

[程式設計角色和舞台]

由於舞台只會顯示變數和清單,可由範例庫任意選取一個角色造形後隱藏。舞台維持空白即可。

[程式設計解決方案]

寫程式前我們觀察一下Fn的方程式(1),發現可以利用分配率做進一步的簡化得到方程式(2)。這樣的簡化可以讓程式指令更簡潔。

[程式檢視]

程式[Cat 7–2.2]和[Cat 7–2.3]都是方程式(2)的實做。但是Scratch裡並沒有冪次方的指令直接做出方程式(2)的n次方,所以必須用其他的指令做出冪次方的計算。程式[Cat 7–2.2]和[Cat 7–2.3]的差別就在於用不同的方法計算方程式裡的冪次方。

程式[Cat 7–2.2]用重複乘法計算次方

由於Scratch裡並沒有直接計算「次方」的指令,我們可以自己將一個數重複乘n次,來得到相同的計算結果。因此程式中兩個新的變數lamda1和lamda2是用來計算Fn公式的主體,而變數「費氏數第n項」表示方程式裡的次方,是用來控制乘法迴圈的計數器。

方程式(2)可以轉換為下面這段程式指令。

最後一個運算指令是將(lamda1-lamda2)除以根號5,我們預期這會是一個在整數值附近的小數,但由於費氏數是整數,所以做四捨五入的動作來得到整數。

程式[Cat 7–2.2]用對數法計算次方

運用Scratch指數和對數的運算可以計算冪次方 ,在這裡m為基底,n為次方,

面的計算式說明了如何利用指數和對數的特性化簡得到冪次方,

在這裡的一個重點是對數基底必須是大於零的數,因為像log(0)或是log(-1)都實數系的數學裡是未被定義的值。

我們仔細看一下方程式(2)裡的後半段,

這是一個負數,因此要做特殊的處理。

在上面這段對數法求方程式(2)的程式裡我們先設定,

如此一來我們就可以正確地利用對數法求解。但是要再考慮到次方的問題,

因此我們要再對「費氏數第n項」做判別,然後設定正確的計算式。

由於費氏數是整數,所以最後仍然選擇用四捨五入的動作來得到整數。

[執行結果]

「費氏數公式」清單是由重複乘法計算次方的結果,「費氏數公式2」清單是用對數法計算次方的結果,我們可以看到前50項的計算結果是相同而正確的。

「時間記錄」清單的前48項記錄的是「費氏數公式」的計算時間,由第48項看到共花費時間0.163秒。

「時間記錄」清單的末48項記錄的是「費氏數公式2」的計算時間,由第96項看到以對數法計算次方的時間極短,只花了0.001秒。

延伸閱讀:

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

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

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

Scratch & Math: 無理的道理(一) Scratch & Math: 無理的道理(二) Scratch & Math: 無理的道理(三)

Scratch & Math: 歡樂派(一) Scratch & Math: 歡樂派(二)

Scratch & Math: 歡樂派(三) Scratch & Math: 歡樂派(四)

Scratch & Math: 隱藏在花朶裡的祕密(一) Scratch & Math: 隱藏在花朶裡的祕密(二)

--

--

Peter Wei

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