如果可以用一種簡單的方式來理解世界,我想這種方式就是“數學”!
“宇宙之大,粒子之微,火箭之速,化工之巧,地球之變,生物之謎,日用之繁,無處不用數學”。
看起來像是魔法,理解之后就是數學,那啥叫數學呢?數學就是數字的系統化科學,本篇先從數字入個門吧。
1. 數字是什么?
2. 計數系統
3. 數字美學
一、數字是什么?
1. 直覺在前,數字在后
要知道數字是什么?起源于什么?先來兩個例子“一望冰山”吧:
1> 對早期依賴戶外生存能力的原始部落來說,當不同部落之間發生沖突,大家互相揮舞著長矛,需要立刻決定的問題是:打?還是跑?需要領導者快速判斷雙方人數差異,對方人少就打,對方人多咱就跑。
2> 路邊看到兩棵果樹,去采摘哪一棵果樹呢?就需要立刻判斷出哪棵樹上的果實更多。
這兩個例子都是沒有必要一一數出每一個人數、每一顆果子,最關鍵的是快速估計出相對數量,而這種估計就是人類對于數量的直覺,即對比關系。
在現代數據分析方法ABtest中,最關鍵的就是對事物提出對比假設,再進行數字化驗證,假設很大程度依賴直覺,而數字是對直覺的確認,那么直覺與數字的關系是什么樣的呢?接著往下看。
2. 實驗:數學教育對直覺的影響
2004年卡內基-梅隆大學的羅伯特·西格勒(Robert Siegler)和朱莉·布思(Julie Booth)對幼兒園學生(平均年齡為5.8歲)、一年級學生(6.9歲)和二年級的學生(7.8歲)做了數軸實驗:一條線,左右兩邊隨機展示一些點,中間有光標,學生來指出這組點應該在什么位置,通過重復點擊來測試不同程度的數學教育會如何分配從1-100之間的數字。
結果顯示(如圖),隨著我們對數字越來越熟悉,我們的直覺也逐漸被固化。
1> 對于沒有受過正規的數學教育的幼兒園學生,他們會按曲線繪制出數字;
2> 小學一年級的學生們因為開始學習數字和符號,所以他們的曲線變直了一些;
3> 小學二年級的學生繪制出的數字終于沿著直線均勻分布了。
ps:這組數據沒有找到源數據,就從材料中拍圖截取吧,不要吐槽博主哈哈哈~
理論上實際值與估計值繪制出來應該是一條從0開始的45°斜直線,而實際結果是數字越大線條越平緩,斜率越小,也就是大數字間的距離比小數字間的距離在感覺上更近,如:80和100之間的距離20,比20和40之間的距離20,在感知上要小一些。
這個實驗說明:我們的直覺很多時候是與現實是不匹配的,可能會有感覺誤差,因此需要科學的方法來做決定,也就是現在企業追求的數據決策,做出更為靠譜可信賴的判斷。
3. 印度數學的發展
歷史上有過非常多的計數方式,革命性的計數系統是由印度人發明的阿拉伯數字系統,使用10個數字:0、1、2、3、4、5、6、7、8、9,接下來我們要聊的是基于阿拉伯數字系統的吠陀數學速算技巧。
20世紀初,印度哲人巴拉蒂·克里希納·第勒塔季在由梵文著成的古代《吠陀經》中發現了這套技巧,速算技巧基于16句格言,并不來自《吠陀經》中記錄的某一段文字,而只能根據“直覺啟示”感知到,并將感知到的方法統稱為“吠陀數學”,這相當于有人在金剛經中找到了解一元二次方程的解法,太太太哇塞了!
吠陀算法的主要特點是可以將復雜的問題分解為簡單的步驟,并使用特定的規則和技巧進行計算。
其中最著名的技巧是“補數法”,如:計算1000-456,前面所有數字從9開始減,最后一個數字從10減,拆分為9-4=5,9-5=4,10-6=4,結果是544。
16句格言講述了特定的規則:
1/2/3:比以前的1多了1、比以前的1少了1、全部從9開始&最后從10開始;
4/5/6/7/8:垂直和交叉、轉置和應用、通過加和減、和的乘積、所有乘數;
9:如果《集論》是相同的,它是零;
10:如果一個是成比例的,另一個是零;
11/12/13/14:完成或末完成、通過虧空、具體和普遍、微分學;
15/16:最后一位的余數、最后一個和兩次倒數第二。
是不是有點迷糊啦?別著急,舉個簡單的例子理解一下(如圖):用吠陀算法、長乘法兩種算法計算888*997=?
1> 吠陀算法:先做減法、再做對角線加法、然后右側數字乘法,最后拼起來;
2> 長乘法:逐個位置數字相乘,再累加。(小學數學學的就是長乘法)
那么再復雜一些的數字如何計算呢?感興趣的朋友可以自己研究哦~
二、計數系統
1. 啥是計數系統?
假設沒有數字,失眠的時候,怎么數羊嘞???
Action:羊、羊羊、羊羊羊、羊羊羊羊、羊羊羊羊羊、羊羊羊羊羊羊...(已經聽到你在念啦!)
是不是很著急,可能直接放棄羊羊了,有數字之后,就可以1只羊、2只羊、慢悠悠數過來,有沒有感受到計數系統的強大?!
在人類歷史發展過程中,生活在不同地區的人發明了不同的計數系統和方法,如:以α/β/γ...等27個字母為基礎的希臘計數法、以I/X/C/M/V/L/D為基礎的羅馬計數法,以及用手指關節計數的方法。
一個好的計數系統要滿足哪些條件呢?
1> 基數必須足夠大,但也不能太大,這樣在表達100這樣的數字時,才不會喘不過氣,也不需要記憶太多的東西;
2> 符合人的行為習慣,歷史上常見的基數是:5、10、20,很大程度的原因是這些數字來自人體,5個手指、10個手指、再加上10個腳趾。
印度人發明的阿拉伯數字系統恰好、或者說完美地滿足了所有要求,使用10個數字:0、1、2、3、4、5、6、7、8、9,且基數為10。
2. 常見的進制有哪些?
二進制(Decimal system)
用數字0、1表示,基數為2,滿2進1位,最常見的是二進制使用場景是計算機控制系統。
為什么二進制適用于計算機控制系統呢?
最主要原因是二進制數只有0和1兩種狀態,與計算機內部的邏輯電路的開關狀態非常相似,運算規則要比其他進制的數簡單得多,這有利于提高計算機的運算速度,每個數字稱為一個比特,相比之下,其他進制的數表示方式需要更為復雜的電路和算法才能實現。
十進制(Decimal system)
用數字0、1、2、3、4、5、6、7、8、9表示,基數為10,滿10進1位,是人們日常生活中最常使用的一種進制。
為什么十進制適用于人類呢?
可能是因為人類的大腦在進行計數時,習慣于將數量轉化為手指的數量或者位置,而我們的手指有10個,這使得我們的大腦更容易接受十進制的計數方式。
十二進制(Duodecimal system)
通常用數字0~9以及字母A、B來表示,其中,A代表10,B代表11,以12為基數,滿12進1位,常見的十二進制使用場景如:一打(12)、一羅(144=12^2)。
十二進制的整除屬性比十進制要好一些,如:12可以被2、3、4、6整除,而10只能被2、5整除,在日常生活中,更有可能把一個數除以3或者4,而不是除以5。
下圖是十二進制的乘法表,幫助理解十二進制的具體數字展示。
(十進制轉十二進制數值的方法:十進制數除以12得到倍數的整數部分用十二進制表示,拼接余數部分的十二進制表示。)
六十進制(Sexagesimal system)
使用0-59來表示,以60為基數,滿60進一位,常見使用場景如:秒、分鐘,以及中國的六十甲子。
據記載1793年法國試圖將時間轉變為十進制,也就是每天有10小時、每小時有100分鐘、每分鐘有100秒,一天變成了100000秒,而不是原來的86400(24*60*60)秒,時間十進制的秒比原來的秒會短一些,導致時間感知暈頭轉向,短短6個月改革就被放棄了,十進制在時間上的失敗是十二進制、六十進制取得的小小勝利~
三、數字美學
1. 數學中最迷人的曲線之一“對數螺線”
先了解一下啥是黃金比例,即一條線段被切分成兩段,原線段與較長部分的的比例=較長部分與較短部分的比例,這個比例約為1.618,也就是黃金比例,堪稱自然界最美的結構比例。
對數螺線就是基于黃金矩形繪制出的一條曲線:
1> 把一個長寬比例為1.618的黃金矩形,切分出一個正方形,剩余部分仍然是一個黃金矩形;
2> 以正方形的一個角為圓心,畫1/4圓;
3> 重復切分出正方形+畫圓弧線,就得到一條對數螺線(如下圖所示)。
對數螺線的基本性質是:不會隨著圖形的發展而改變,即螺線本身具有相似性,任何一個較小部份與較大部份相似。
它最有魅力的一點是:永恒!
2. 隨機模擬為什么賭博會輸?
對于這個問題,接下來會用隨機數模擬賭博結果,來說明為什么賭博會輸,在模擬數據之前,先說明三個基本點:
1> 對經濟利益的渴望,更具體點就是“博彩業”,讓人們開始研究獲勝的可能性,概率就是可能性的數字化表達,將不可預測性變得可預測;
2> 賭博的前提是隨機事件,即隨機事件與你的想法無關;
3> 賭徒破產原則,指一個賭徒在賭博中,無論他贏得多少,只要他繼續賭博,最終他就會破產。
用R語言模擬拋硬幣實驗:
假設有6個人,分別拋100次硬幣,正面朝上記為1,反面朝上記為-1,將每次結果累加,繪制6個人拋硬幣結果的隨機游走曲線,如下圖所示。
從這個圖可以發現隨著拋出次數的增多,曲線波動越來越大,假設拋硬幣游戲變成了賭博,唯一讓它停止賭博的方式就是錢=0;
同時這個現象說明賭博對富人有利,因為富人不僅需要更長的時間才會破產,而且還有更多的機會讓隨機游走向上延伸。
附:隨機游走曲線的Rcode
library(reshape2)
library(ggplot2)
# 定義N個人參與賭博、n次賭博
N<-6
n<-100
data_sample<-as.data.frame(matrix(0,n,N)) # 創建矩陣
data_sample$label_x<-1:nrow(data_sample) # 生成拋硬幣的次數列
for (j in 1:N) {
?data_sample[,j]<-as.data.frame(sample(c(-1,1), # 隨機生成的值序列,1代表正面、-1代表反面
?n,
?replace = TRUE,
?prob = c(0.5,0.5))) # 概率
?}
# 將每次拋硬幣結果逐個值累加
for (j in 1:N) {
?for (i in 1:n) {
?if (i==1){
?data_sample[i,j+N+1]<- data_sample[i,j]
?} else {
?data_sample[i,j+N+1]<-data_sample[i,j]+data_sample[i-1,j+N+1]
?}
?}
?}
data_sample<-subset(data_sample,select = c((N+1):(N*2+1)))
data_sample<-melt(data_sample,id.vars = c('label_x'),variable.name = 'v1') # 繪制曲線
ggplot(data_sample,aes(x=label_x,y=value,group=v1,color=v1))+
?geom_line()+
?labs(title="拋硬幣隨機游走曲線")+theme(legend.position="none") # 隱藏圖例
文末:博主超級喜歡對數螺線,因為它“任爾變換,不忘初心”。