附錄一 蒲豐投針實驗與蒙特卡洛算法的相關代碼
1.%這裡a為0.003 2.line = 0.6; %針長度 3.width = 1; %線的間距 4.num = 3000; %投針次數 5.n = 1000;%重複實驗次數 6.is = 1; %1表示繪製1-n的圖,0表示繪製0-500的圖 7.mypi_n = zeros(1,n); %儲存每次結果 8.for i = 1:n 9. [mypi_n(1,i)] = mybufeng(line,width,num); 10.end 11.[myanov,myerr] = data_processing(n,mypi_n); 12.%以P開頭為畫圖程序,具體詳見附錄 13.Pmyanov(n,myanov,is); 14.Pmyerr(n,myerr,is); 15.Prep(mypi_n); 16.is = 0; 17.Pmyanov(n,myanov,is); 18.Pmyerr(n,myerr,is); ……附錄二 蒙特卡洛模擬結果方差分析的相關代碼匯總
1.function [myanov,myerr] = data_processing(n,mypi_n) 2.%得到誤差,方差和pi的估計值 3. mystd = zeros(1,n); %記錄標準差 4. myanov = zeros(1,n); %記錄方差 ……1.function [] = Pmyanov(n,myanov,is) 2.%繪製實驗所得方差的圖像 3. figure('name','myanov'); 4. down = [1:n]; 5. plot(down,myanov); 6. xlabel("實驗次數"); 7. ylabel("方差"); 8. legend("anov"); 9. if is == 1 10. title("myanov"); ……1.function [] = Pmyerr(n,myerr,is) 2.%繪製實驗所得誤差的圖像 3. figure('name','myerr'); 4. down = [1:n]; 5. plot(down,myerr); 6. xlabel("實驗次數"); 7. ylabel("誤差"); 8. legend("err"); ……1.function [] = Prep(mypi_n) 2.%繪製100次重複的圖 3. figure('name','100次實驗的頻數直方圖'); 4. X = [2.95:0.02:3.39]; 5. histogram(mypi_n,X); 6. set(gca,'xticklabel',{2.94:0.05:3.39}); ……附錄三 蒙特卡洛模擬算法Python代碼:
1.def MTKL(t,r,q,sigma,S,K,kind): 2. miu=r-q 3. ans_ST=[] 4. ans_ST.append(S) 5. ans_EU=[] 6. for i in range(1000): 7. epsilon = np.random.normal(0, 1) ……