Υπολογισμο του π με τη μέθοδο Monte Carlo Αθανάσιος Σταυρακούδης http://stavrakoudis.econ.uoi.gr Άνοιξη 2013 1 / 22
Επισκόπηση 1 Η βελόνα του Buffon 2 Εκτίμηση του π με τη μέθοδο Monte Carlo 3 Το π ως γεννήτρια τυχαίων αριθμών 2 / 22
Georges-Louis Leclerc, Comte de Buffon Georges-Louis Leclerc, Comte de Buffon 1707 1788 Γάλλος φυσιοδίφης και μαθηματικός Διευθυντής του βοτανικού κήπου Jardin des Plantes Wikipedia: http://bit.ly/1efsmct 3 / 22
Georges-Louis Leclerc, Comte de Buffon Essai d Arithmetique Morale, 1777 Αγγλική μετάφραση: http://eprints.luiss.it/769 4 / 22
Georges-Louis Leclerc, Comte de Buffon Τομή βελόνας με κάποια γραμμή Αν L είναι το μήκος της βελόνας, x η απόσταση του κέντρου της από τη γραμμή και φ η γωνία που σχηματίζει η βελόνα με τη γραμμή, τότε βελόνα και γραμμή τέμνονται αν: Πιθανότητες Ποια είναι η πιθανότητα; x < 1 2 L sin φ P(x < 1 L sin φ) 2 5 / 22
Συνάρτηση κατανομής πιθανότητας Τομή βελόνας με κάποια γραμμή Αν L είναι το μήκος της βελόνας, x η απόσταση του κέντρου της από τη γραμμή και φ η γωνία που σχηματίζει η βελόνα με τη γραμμή, τότε βελόνα και γραμμή τέμνονται αν: Πιθανότητες Ποια είναι η πιθανότητα; x < 1 2 L sin φ P(x < 1 L sin φ) 2 6 / 22
Υπολογισμός του π L: μήκος βελόνας P = d: απόσταση γραμμών 1 L π 2 0 sin φ dφ πd/2 π = 2L dp = 2L πd d: γωνία μεταξύ βελόνας και γραμμής ( [0, π]) P: πιθανότητα τομής Buffon needle animation 7 / 22
Επισκόπηση 1 Η βελόνα του Buffon 2 Εκτίμηση του π με τη μέθοδο Monte Carlo 3 Το π ως γεννήτρια τυχαίων αριθμών 8 / 22
π και τυχαία σημεία στο επίπεδο 9 / 22
Υπολογισμός σε λογιστικό φύλλο 10 / 22
Κώδικας C/C++ i n t N = 5000; i n t i ; i n t k = 0 ; double r = 1. 0 ; double x, y, d ; double p i ; s r a n d ( time (NULL) ) ; f o r ( i =0; i < N; i ++) { x = ( double ) rand ( ) / RAND_MAX; y = ( double ) rand ( ) / RAND_MAX; d = s q r t ( x x + y y ) ; i f ( d <= r ) ++k ; } p i = 4. 0 ( double ) k/n; 11 / 22
Κώδικας Octave 1 clear; 2 3 N = 50000; 4 5 x = unifrnd(0, 1, N, 1); 6 y = unifrnd(0, 1, N, 1); 7 r = sqrt(x.*x + y.*y); 8 N1 = sum((r<1.0)); 9 10 mcpi = 4*N1/N 12 / 22
Κώδικας R 1 N <- 5000 2 x <- runif(n) 3 y <- runif(n) 4 r <- sqrt(x^2 + y^2) 5 N1 <- sum(r<1) 6 mcpi <- 4*N1/N 7 8 mcpi 13 / 22
Επισκόπηση 1 Η βελόνα του Buffon 2 Εκτίμηση του π με τη μέθοδο Monte Carlo 3 Το π ως γεννήτρια τυχαίων αριθμών 14 / 22
1000 ψηφία του π 3.1415926535897932384626433832795028841971693993751058209749445 230781640628620899862803482534211706798214808651328230664709384 609550582231725359408128481117450284102701938521105559644622948 549303819644288109756659334461284756482337867831652712019091456 856692346034861045432664821339360726024914127372458700660631558 174881520920962829254091715364367892590360011330530548820466521 841469519415116094330572703657595919530921861173819326117931051 854807446237996274956735188575272489122793818301194912983367336 440656643086021394946395224737190702179860943702770539217176293 767523846748184676694051320005681271452635608277857713427577896 917363717872146844090122495343014654958537105079227968925892354 019956112129021960864034418159813629774771309960518707211349999 983729780499510597317328160963185950244594553469083026425223082 334468503526193118817101000313783875288658753320838142061717766 147303598253490428755468731159562863882353787593751957781857780 32171226806613001927876611195909216420198 15 / 22
Είναι τυχαίοι αριθμοί τα ψηφία του π; Μονοψήφιοι ακέραιοι Πάρτε το σύνολο {3, 1, 4, 1, 5, 9, 2, 6,...}. 1 Είναι τυχαίοι ακέραιοι αριθμοί που προέρχονται από ομοιόμορφη κατανομή [0, 9]; 2 Είναι η κατανομή τους ομοιόμορφη; 3 Υπάρχει τρόπος να προβλεφθεί η σειρά εμφάνισής τους; Διψήφιοι ακέραιοι Πάρτε το σύνολο {31, 41, 59, 26,...}. 1 Είναι τυχαίοι ακέραιοι αριθμοί που προέρχονται από ομοιόμορφη κατανομή [0, 99]; 2 Είναι η κατανομή τους ομοιόμορφη; 3 Υπάρχει τρόπος να προβλεφθεί η σειρά εμφάνισής τους; 16 / 22
Μια σχετική δημοσίευση doi:10.1142/s0129183105007091 Δείτε επίσης: R.K. Parthia, Mathematics of Computation, 1962, 16:188 197 17 / 22
Για την τυχαιότητα των ψηφίων του π Άλυτο επιστημονικό πρόβλημα. Υπάρχουν πολλές ενδείξεις πως τα ψηφία του είναι τυχαίοι αριθμοί. Δεν υπάρχει απόδειξη πως είναι. Τυχαίος περίπατος με το π: 18 / 22
Αναπαράγει ο αριθμός π τον εαυτό του; Ερώτημα Μπορούν να χρησιμοποιηθούν τα ψηφία του π ως γεννήτρια τυχαίων αριθμών για τον υπολογισμό του π με τη μέθοδο Μοντε ἃρλο; Προσέγγιση 1 Λάβε το αριθμό π με 100 ψηφία 2 Σχημάτισε δεκαδικούς αριθμούς στο διάστημα (0, 0.99999) σχηματίζοντας πενταψήφιους αριθμούς από πέντε διαδοχικά ψηφία, πχ 0.31415. 3 Χρησιμοποίησε ζεύγη τέτοιων αριθμών ως συντεταγμένες σημείων στο καρτεσιανό επίπεδο. 4 Υπολόγισε τον αριθμό π με βάση τη μέθοδο Monte Carlo. 19 / 22
Το πρόγραμμα pi pi Απλό πρόγραμμα που λαμβάνει ως είσοδο ακέραιο αριθμό Ν και επιστρέφει τα Ν πρώτα ψηφία του π: a s t a v r a k @ a p o l l o n i a :~ $ p i 15 3.14159265358979 1000000 ψηφία του π a s t a v r a k @ a p o l l o n i a :~ $ p i 1000000 t r d. > p i. 20 / 22
Υπολογισμός με Octave 1 f = fopen("pi.txt"); 2 digits = fgetl(f); 3 fclose (f); 4 N = 10000; 5 d = 5; 6 base = 10**d; 7 x = y = zeros(n,1); 8 9 for ( k = 1:N ) 10 i1 = (k-1)*d*2 + 1; 11 i2 = i1 + d - 1; 12 x(k) = str2num ( digits(i1:i2) ) / base; 13 i1 += d; 14 i2 += d; 15 y(k) = str2num ( digits(i1:i2) ) / base; 16 end 17 r = sqrt (x.*x + y.*y); 18 n1 = sum (r<1); 19 pie = 4*n1/N; 20 printf ("%.5f\n", pie) 21 printf ("%.5f\n", pi) 21 / 22
Επεκτάσεις Τροποποίηση με βελτίωση του υπολογισμού 1 Περισσότερα ψηφία, πχ 8 ή 15. 2 Επανάληψη των υπολογισμών για Ν φορές και λήψη μέσης τιμής. Μεγάλη πολυπλοκότητα 1 Είναι τα ψηφία του π που προκύπτει από υπολογισμό Monte Carlo τυχαίοι αριθμοί; 2 Μπορεί να γίνει επανάληψη της μεθόδου με το νέο αριθμό π; 22 / 22