如何用R實現朱熹《周易本義》中的算籌卜卦方法
算籌卜卦總共需卜六爻,每一爻需要三變,每一變中的隨機性來源於算籌分半的過程。每一變中,首先取一個算籌分半的隨機數,再此本人採用T分布取隨機數,自由度設為每一變中的算籌總數。左邊一半先取一個算籌,拿剩餘的左邊算籌除4取余加1,如果4可整除,則返回5,拿出這一部分。再者,右邊一半直接除4取余加1,就是右邊的總量,同理如果4可整除,則返回4。混合左右邊取出的數籌,放在一邊,再用剩餘的算籌做第二變,同理進行第三變。三變做完,取剩餘的算籌,除4,便是第一爻的數,值的範圍在6:9之間。
一共六爻之後便可得出卜卦結果,逢6逢9的都要考慮爻變即可。6 太陰,7少陽,8少陰,9太陽爻變可參考:
1.六爻皆不變,以本卦卦辭斷吉凶。 2.有一爻變,以本卦爻變之爻辭斷吉凶。 3.有二爻變,以本卦爻變之上爻爻辭為主,斷吉凶。 4.有三爻變,以本卦及之卦卦辭合斷之。5.有四爻變,用之卦中不變之二爻辭,且以下爻辭為主斷吉凶。
6.有五爻變,用之卦中不變之一爻辭,斷吉凶。 7.六爻皆變,乾坤兩卦各用本卦「用九、用六」之用辭占之,其餘各卦則用之卦卦辭斷之。如想增添或減少分左右邊算籌的隨機性,則可通過調節T分布中的統計參數即可。代碼如下:
get_number = function(i = 1:49){ #每一變 mean = mean(i) sd = sd(i) p = sapply(i, FUN = function(x) dt(sqrt(2)*(x-mean)/sd, length(i))) #plot(p, type = l, # xlab = number of sticks in the left portion, # ylab = probability distribution) left = sample(i, 1, prob = p) leftout = function(x){ if((x-1)%%4==0) return(1+4) else return(1+(left-1)%%4) } right = max(i)-left rightout = function(x) if((x)%%4==0) return(4) else return((x)%%4) return(rightout(right)+leftout(left))}get_change = function(){ #每一爻 shang1 = get_number() shang2 = get_number(1:(49-shang1)) shang3 = get_number(1:(49-shang1-shang2)) return((49-shang1-shang2-shang3)/4)}get_change()result =list()for(i in 1:6) result[i]=get_change()result = unlist(result);result
從下到上的順序是:少陰,少陰,少陰(火),少陽,少陰,老陽(地)。本卦為火地晉卦,之卦為雷地豫卦,爻變為一爻變。
只是舉個例子,沒什麼想算的,因此就不解卦了。最後跑了10000個循環統計了一下6789的分布:由此可見,6+8:7+9 基本相等,陰爻陽爻的概率大致一樣,但其中陰爻爻變的概率低於陽爻爻變的概率,少陰的概率高於少陽的概率。如有巧合,純屬偶然END推薦閱讀:
※百腳山上養千隻大雄公雞散放,《西遊記》里這個除妖方法最自然
※易經智慧:從善如登,從惡如崩!如何擇善而從?
※厚德載物,盡顯人格魅力
※昨日富貴女命感情細節丨案例37八字命理14
※易經全文及白話翻譯(完整版)