Μέθοδοι Monte Carlo Οι µέθοδοι Monte Carlo είναι µια κλάση από υπολογιστικούς αλγόριθµους που βασίζονται στην επαναλαµβανόµενη τυχαία δειγµατοληψία για τον υπολογισµό αποτελεσµάτων. Συχνά χρησιµοποιούντα στην προσοµοίωση φυσικών και µαθηµατικών συστηµάτων και προβληµάτων. Επειδή τέτοιοι αλγόριθµοι εξαρτώνται από την χρήση τυχαίων ή ψευδοτυχαίων αριθµών, οι αλγόριθµοι Monte Carlo ονοµάζονται και στοχαστικοί αλγόριθµοι και πρακτικά χρησιµοποιούνται στην περίπτωση που το µοντέλο µας για κάποιο σύστηµα είναι τόσο πολύπλοκο που η παραγωγή αναλυτικών λύσεων, είτε η χρήση αιτιοκρατικών (deterministic) αλγορίθµων είναι αδύνατη. Στην ουσία µε την χρήση στοχαστικών αλγορίθµων θέλουµε να αναπαραστήσουµε ένα στοχαστικό φαινόµενο στον υπολογιστή όσο πολύπλοκο και αν είναι κάνοντας τον µικρότερο δυνατό αριθµό απλουστεύσεων, δηµιουργώντας έτσι ρεαλιστικά µοντέλα. Εάν καταφέρουµε να δηµιουργήσουµε ένα υπολογιστικό µοντέλο που είναι πολύ κοντά στο αντίστοιχο φυσικό σύστηµα, δεν χρειάζεται να περιµένουµε το φαινόµενο να πραγµατοποιηθεί µε φυσικό τρόπο είτε γιατί χρειάζεται µεγάλο χρονικό διάστηµα για την επανάληψη του, είτε λόγω κόστους δεν µπορούµε να έχουµε µεγάλο αριθµό από πραγµατικές εργαστηριακές πραγµατοποιήσεις. Για παράδειγµα έστω ότι σε κάθε ανεξάρτητη πραγµατοποίηση X j, j =, K, n του υπολογιστικού µοντέλου ενδιαφερόµαστε για την πραγµατοποίηση ενδεχοµένου A. Τότε ο νόµος των µεγάλων αριθµών µας εξασφαλίζει ότι ( X j A) E ( X A) = P{ X A, n n j= n Παρατηρώντας λοιπόν χιλιάδες είτε ακόµα και εκατοµµύρια πραγµατοποιήσεις της στοχαστικής προσοµοίωσης µπορούµε να εξάγουµε συµπεράσµατα για το πραγµατικό σύστηµα. Παραγωγή (ψευδο)τυχαίων αριθµών Σπύρος Ι. Χατζησπύρος Σηµειώσεις στην Υπολογιστική Στατιστική µέρος Α
iid Έστω ότι Ui ~ U (,) τότε µια πεπερασµένη πραγµατοποίηση της ακολουθίας { U K U είναι µια ακολουθία τυχαίων αριθµών.,, n Στην πραγµατικότητα όµως µόνο να προσοµοιώσουµε µια τέτοια ακολουθία µπορούµε µέσα σε ένα υπολογιστή για αυτό και λέµε ότι µε έναν υπολογιστή µπορούµε να παράγουµε ακολουθία ψευδοτυχαίων αριθµών που όµως έχουν κοινά χαρακτηριστικά µε ακολουθίες πραγµατικά τυχαίων αριθµών. Ψευδοτυχαίες ακολουθίες { U j συνήθως παράγονται µε την χρήση linear congruencies, δηλαδή µη στοχαστικών, γραµµικών αναδροµικών σχέσεων της µορφής (linear congruencies) ( ) ( ) Xi = C Xi = axi + b mod m, i, για δοθέν X (seed), θέτουµε τότε Ui Xi / m Η τριάδα ( abm,, ) ζητάµε να είναι τέτοια ώστε: = όπου x mod m= m( x/ m x/ m ). { () i Η περίοδος του X να είναι µεγάλη δηλαδή το min i: C ( X) = X να είναι της τάξης του m. Η ψευδοτυχαία ακολουθία να περνάει αρκετούς από τους γνωστούς ελέγχους τυχαιότητας (tests for randomness). Για παράδειγµα το information entropy test, autocorrelation test, Kolmogorov Smirnov test κλπ. Παρατήρηση Η χρησιµοποιεί τον αλγόριθµο Mersenne Twister για δειγµατοληψία από την U (,). Η µέθοδος Mersenne Twister βασίζεται σε matrix linear congruence σχέσεις και Mersenne πρώτους. Για παράδειγµα εάν θέλουµε να θέσουµε νέο seed στην > set.seed() Για να πάρουµε δείγµα από την U (,) > runif() Σπύρος Ι. Χατζησπύρος Σηµειώσεις στην Υπολογιστική Στατιστική µέρος Α 2
[].265587 Εάν στην συνέχεια θέσουµε και πάλι το ίδιο seed η ακολουθία των δειγµάτων από την οµοιόµορφη επαναλαµβάνεται > set.seed() > runif() [].265587 ## script για τη δηµιουργία ψευδοτυχαίας ακολουθίας αριθµών ## στο (,), για δοθείσα τριάδα ( abm,, ) και αρχική συνθήκη X. myrng<-function(xseed=42, SS=4, a=5, b=7, m=2){ x<-xseed v<-ull for(i in :SS){ x<- (a*x+b) %% m v<-append(v, x/m) return(v) Ας δούµε µια περίπτωση που η περίοδος είναι µικρή για ( abm,, ) = ( 5,7,2) και x = 42 v<-myrng( ); v [].85.46.335.7.585.96.835.2 [9].85.46.335.7.585.96.835.2 [7].85.46.335.7.585.96.835.2 [25].85.46.335.7.585.96.835.2 [33].85.46.335.7.585.96.835.2 hist(v, breaks=2,main="a=5, b=7, m=2", col="black") Σπύρος Ι. Χατζησπύρος Σηµειώσεις στην Υπολογιστική Στατιστική µέρος Α 3
(ADU) Το linear congruence ( abm,, ) = ( 2 6 + 3,,2 3 ) χρησιµοποιήθηκε από την IBM στις αρχές τι δεκαετίας του 7. Το 963 όµως ανακαλύφθηκε ότι ισχύει η σχέση xn+ 2 6xn+ + 9xn = κ όπου κ { 5, 4, K,9. Αυτό σηµαίνει ότι συνεχόµενες τριάδες ( un, un+, un+ 2) µε ui = xi / m βρίσκονται αποκλειστικά σε 5 επίπεδα του µοναδιαίου κύβου (, ) 3. ηλαδή η συσχέτιση µεταξύ των ( un, un+, un+ 2) είναι πολύ µεγάλη και δεν µπορεί να χρησιµοποιηθεί για την παραγωγή ψευδοτυχαίων αριθµών. Χρήση της ADU για προσοµοίωση οδηγεί σε εσφαλµένα συµπεράσµατα. Σπύρος Ι. Χατζησπύρος Σηµειώσεις στην Υπολογιστική Στατιστική µέρος Α 4
Μια καλή επιλογή είναι η τριάδα ( abm,, ) = ( 7 5,,2 32 ) v<-myrng(3,, 7^5-,, 2^32-) hist(v, breaks=2,main="a=7^5-, b=, m=2^32-", col="black") # To variance της X ~ U ( ab, ) είναι ( b a) 2 /2 εδώ /2 =.8333 > var(v) [].83527 χρήση του random number generator της v<-runif(, min=, max=) hist(v, breaks=2,main=" Mersenne Twister ", col="black") > var(v) [].82668 Σπύρος Ι. Χατζησπύρος Σηµειώσεις στην Υπολογιστική Στατιστική µέρος Α 5
Άσκηση 6 3 Να δειχθεί ότι εάν (,, ) ( 2 3,,2 ) abm = + τότε un+ 2 6un+ + 9un = κ όπου κ Z 2 + 2 = ( + ) + = ( + ) = ( + + ) ( ) xn ( ) xn xn+ xn x 2 3 x mod2 2 3 x mod2 2 6 2 9 x mod2 6 3 6 3 32 6 3 n n n n ( ) ( ) = 6 2 + 9 mod 2 = 6 2 + 3 9 mod 2 = 6 9 mod 2 ή ότι 6 3 6 3 3 x 6x + 9x = κ 2 u 6u + 9u = κ 3 n+ 2 n+ n n+ 2 n+ n Άσκηση είξτε µε προσοµοίωση ότι το κ στην προηγούµενη σχέση µπορεί να πάρει µόνο τιµές στο σύνολο { 5, 4, K,9. Σπύρος Ι. Χατζησπύρος Σηµειώσεις στην Υπολογιστική Στατιστική µέρος Α 6
## THE ADU POBLEMATIC ACOM UMBE GEEATO randudecode<-function(v){ u<-ull for(i in :length(v)-2){ x<-v[i+2]-6*v[i+]+9*v[i] u<-append(u, x) return(u) getsampledistr<-function(sample){ D<- ULL P<- ULL L<-sample while(length(l)!=){ D<-append(D, L[]) L<-L[L!=L[]] for(i in :length(d)){ x<-d[i] counter<- for(j in :length(sample)) if(x==sample[j]) counter<-counter+ P<-append(P, counter/length(sample)) v<-c(d, P) return(v) > u<-myrng(3,, 2^6+3,, 2^3) > u [] 9.55693e-5 5.49329e-4 2.47962e-3 9.88788e-3 3.7792e-2 [6].334849e- 4.67967e- 6.858e- 4.6249e- 2.472e-2 [] 4.6739e- 6.22493e- 5.56245e- 5.535e- 4.2849e- [6] 9.668739e- 9.45635e- 9.79453e- 3.29567e-.782325e- [2].87852e- 4.8685e- 2.566444e- 2.42995e- 9.759979e- [26] 9.27298e- 7.797698e- 3.329923e- 9.8254e- 8.83229e- [3] 4.7929e- 9.25625e- 2.47968e-.2963e- 5.4566e- [36].88273e- 2.245785e- 6.5342e- 8.968783e- 5.449e- [4] 9.529468e-.844e- 5.5935e- 4.784e- 9.75727e- [46] 7.993796e- 5.38229e- 3.43298e-2 3.6282e- 8.6839e- [5] 9.4283e- 8.445747e- 5.82555e- 8.9768e-.65e- [56] 6.4426e- 8.4637e- 3.79423e- 2.3349e- 6.489e- Σπύρος Ι. Χατζησπύρος Σηµειώσεις στην Υπολογιστική Στατιστική µέρος Α 7
[6] 5.8969e- 4.4342e-2 9.576336e- 3.494939e- 4.78266e- [66] 7.249e- 4.3687e-2 7.2546e- 9.87525e- 3.988847e- [7] 5.55836e- 4.43539e-.9824e- 6.7442e- 4.5422e-2 [76] 2.6884e- 8.278294e-.289e- 2.22625e- 3.26952e- [8] 9.529865e- 7.83623e-.24953e- 6.84e- 9.958e- [86] 8.373498e- 6.92574e-2 8.7862e- 6.46854e- 9.787768e- [9] 5.423e-2 4.99487e- 5.3483e- 7.97522e- 4.5884e- [96] 3.7585e- 8.47784e- 2.25436e- 7.2786e- 3.382639e- > mysample<-randudecode(u) > mysample [] - 3 4-2 3 2 3-4 3 7 2-3 2-3 4 [26] 4 6-2 4 6-7 2-2 4-6 - 8-3 - 4 4 5 - - 3 [5] 4 5 8-2 6 2-2 6-5 7 7-3 7 2 4-3 6 [76] -3 7-2 4 7-2 4 8-4 5 9-2 2 4 3-2 7-2 > v<-getsampledistr(mysample) > v []. -.. 3. 4. -2. [7] 2. 7. -3. 6. 8. 5. [3] -5. -4. 9..2482.22449.2244898 [9].863265.326536.983673.863265.863265.48633 [25].622449.36224.36224.248.248.248 > D<-v[:(length(v)/2)] > D [] - 3 4-2 2 7-3 6 8 5-5 -4 9 > P<-v[(length(v)/2+):length(v)] > P [].2482.22449.2244898.863265.326536.983673.863265.863265.48633.622449 [].36224.36224.248.248.248 >plot(d, P, type="h", lwd=2, col="red", ylim=c(,.3)) >points(d, P, pch=6, cex=, col="black") Σπύρος Ι. Χατζησπύρος Σηµειώσεις στην Υπολογιστική Στατιστική µέρος Α 8
Ολοκλήρωση Monte Carlo Έστω ότι θέλουµε να υπολογίσουµε το ολοκλήρωµα I = g( x) dx. Συµβολίζουµε την χαρακτηριστική συνάρτηση του διαστήµατος (, ) ( a< x< b) που είναι όταν x ( ab, ) και όταν x ( ab, ). Τότε το ολοκλήρωµα I µπορεί να γραφεί ε τον εξής τρόπο ab µε I = g( x) ( < x< ) dx= g( x) U( x, ) dx= E g( u), u ~ U (,). iid Από τον ισχυρό νόµο των µεγάλων αριθµών έχουµε ότι εάν ui ~ U (,) και E g( u i ) <, τότε ( ) = E ( ) = ( ) n lim i n i= n g u g u g x dx Μια εκτίµηση του I θα είναι Iˆ = g( ui), iid u ~ (, ) i U για µεγάλο, επειδή ( Iˆ ) i= var g( u) = όταν var b Εάν έχουµε να υπολογίσουµε ολοκληρώµατα της µορφής g ( x ) dx είτε a ( ) g x dx b a ( ) ( ) ( ) ( ) gy % ( ) ( ) g x dx= b a g a+ b a y dy, x= a+ b a y 44 4244443 2 ( ) ( ) 442443 gy % ( ) g x dx= y g / y dy, x= / y ( ) ( ) ( ) ( ) gy % ( ) ( ) 2 a g x dx= a y g a y dy, x= a y 4444244443 Για πολλαπλά ολοκληρώµατα της µορφής = ( ) έχουµε k E g( u, K, u ) = L g( x, K, x ) U ( x,) dx L dx k k k i= i k I L g x, K, xk dx L dxk θα Σπύρος Ι. Χατζησπύρος Σηµειώσεις στην Υπολογιστική Στατιστική µέρος Α 9
k (,, ) ( ) (,, ) L g x K x k k x i dx i Ldx g x x x xk k dx dx = L = K L = k = < < = ενώ n i i lim (,, ) = E (,, ) (,, ) i n = n = x = x k = Μια εκτίµηση του I, για µεγάλο, θα είναι ˆ i i I g( u,, uk) g u K u g u K u L g x K x dx L dx i iid u j ~ U (,) για j k και i k k k k. ## Υπολογισµός του εκτιµητή I ˆ για το I = g( x) dx MCIntegral<-function(, g) { sum<- for(i in :) sum=sum+g(runif()) return(sum/) ## ( ) log x dx= > MCIntegral(, log) [] -.577 2 ## ( ) ( ( )) Exp x 5 dx = 5x exp 5 / x dx = = K, όπου i= myfun<-function(x) return(x^(-2)*5*exp(-5*(x^(-)-))) > MCIntegral(, myfun) [].9865 ##################################################### ## Υπολογισµός του εκτιµητή I ˆ για το I = 2 exp (( x + y ) ) dxdy =;s= for(i in :) { x<-runif();y<-runif() Σπύρος Ι. Χατζησπύρος Σηµειώσεις στην Υπολογιστική Στατιστική µέρος Α
s=s/ s<-s+exp((x+y)^2) > s [] 4.78835 #Με αριθµητική ολοκλήρωση 4.8995885 ## Το διάνυσµα v περιέχει το running average trajectory. =;s=;v<-c() for(i in :) { x<-runif();y<-runif() s<-s+exp((x+y)^2) if(i>2) v<-append(v, s/i) s=s/ > s [] 4.88642 plot(v, type='l', pch=".") #plot the running average of the MC integration abline(4.9,, ylim=c(2, )) # add the line y=4.9 Σπύρος Ι. Χατζησπύρος Σηµειώσεις στην Υπολογιστική Στατιστική µέρος Α
Άσκηση είξτε ότι η συνάρτηση h( x, y) την πολλαπλασιάσουµε µε το 8, δηλαδή ( ) script που να υπολογίζει το ολοκλήρωµα (, ) xy < x < y < = γίνεται πυκνότητα εάν αλλου 8 h x, y dxdy =. Να γραφτεί 2 h x y dxdy y (, ) = ( < < < ) = y= { x= h x y dxdy xy x y dxdy xydx dy 2 2 3 y = dy = y= 2 8 Για το script έχουµε ( ) ( ) E ( ) xy < x < y < dxdy = xy x y dxdy XY X Y < = < 2 442443 g X Y όπου X και Y ανεξάρτητες (,) 2 (, ) U τυχαίες µεταβλητές. i Από τον ισχυρό νόµο των µεγάλων αριθµών έχουµε ότι εάν u j iid ~ U (,) τότε i i g u u E XY X Y i= (, 2) ( < ) =;s= for(i in :) { x<-runif();y<-runif() if(x<y) s<-s+x*y s=s/ > s [].268686 Σπύρος Ι. Χατζησπύρος Σηµειώσεις στην Υπολογιστική Στατιστική µέρος Α 2
Άσκηση Να υπολογιστεί το εµβαδόν του µοναδιαίου κύκλου µε ολοκλήρωση Monte Carlo. Εάν ( ) 2 2 2 {, : D= x y x + y τότε D 2 x 2 2 dxdy = dy 2 4 2 dx = x dx = x dx x= y= x ( ) π /2 π /2 2 + cos 2ϑ = 4 cos ( ϑ) dϑ = 4 dϑ 2 ϑ sin( 2ϑ) = + 2 2 π ( ( ) ( )) /2 = 2 ϑ + sin ϑ cos ϑ = π π /2 Για την ολοκλήρωση Monte Carlo έχουµε D 2 2 ( ) ( ) ( ) dxdy = x + y < x < dx < y < dy x= y= 2 2 2 2 ( x y ) ( x ) dx ( y ) dy ( X Y ) x= U U E y= 442443 = 4 +,, = 4 + όπου X και Y ανεξάρτητες U (,) τυχαίες µεταβλητές. g u i u i E g X Y u i iid ~ U i= (, 2) (, ) j (,) (, ) g X Y =;s= for(i in :) { x<- -+2*runif(); y<- -+2*runif() if(x^2+y^2<) s<-s+ s=s/ > 4*s [] 3.342 Σπύρος Ι. Χατζησπύρος Σηµειώσεις στην Υπολογιστική Στατιστική µέρος Α 3
Παρατήρηση Το συγκεκριµένο ολοκλήρωµα δίνει εκτίµηση του π = 3.459K, 4 2 2 δηλαδή ˆ π i i i iid = ( ( u) + ( u2) < ) u (,) i j ~ U = U ( ab, ) = d a+ ( b a) U (,) Η βελόνα του Buffon Χωρίζουµε το επίπεδο µε παράλληλες ευθείες που έχουν απόσταση t και πετάµε µε τυχαίο τρόπο βελόνες µήκους l < t. Η θέση κάθε βελόνας ως προς την κοντινότερη σε αυτήν ευθεία καθορίζεται από την απόσταση του κέντρου της βελόνας από την ευθεία και από την γωνία που σχηµατίζει η βελόνα µε την ευθεία σύµφωνα µε το σχήµα Έστω ότι πετάµε n βελόνες και m από αυτές τέµνουν κάποια από τις ευθείες τότε µια εκτίµηση του π είναι 2l n ˆn π = t m l Πράγµατι η βελόνα τέµνει την ευθεία όταν x sin ( ϑ ). Εµφανώς 2 PX ( dx) = U ( x, t/2) dx και PΘ ( dϑ ) = U ( ϑ, π /2) dϑ ενώ X Θ έτσι το από κοινού µέτρο είναι PX, Θ ( dx, dϑ ) = U( x, t/2 ) U ( ϑ, π /2) dxdϑ. Θα βρούµε την πιθανότητα του ενδεχοµένου { ( ) { X l ( Θ ) = ω Ω X ( ω) l Θ ( ω) sin / 2 : sin / 2 { sin ( Θ )/ 2 = E { sin ( Θ) / 2 Θ P{ X lsin ( )/ 2 ϑ PΘ( dϑ) ( x lsin ( ϑ) / 2) P X ( dx) PΘ( dϑ) P X l P X l = Θ Θ= = ϑ ϑ X Σπύρος Ι. Χατζησπύρος Σηµειώσεις στην Υπολογιστική Στατιστική µέρος Α 4
ηλαδή { ( ) ( ϑ) ϑ X ( ) X ( ) Θ ( ϑ) E ( ( ) ) P X lsin Θ / 2 = x lsin / 2 P dx P d = X lsin Θ / 2 και ϑ π /2 l sin ( ϑ) /2 2 2 ( x l sin ( ϑ )/2) PX ( dx) PΘ ( dϑ) = dx dϑ ϑ= x= t π X 2l 2l sin ( ϑ) dϑ = tπ tπ π /2 ϑ= έτσι 2l = < sin, ~ U, /2 ~ U, /2 t 44424443 ˆ π n i= ( xi l ( ϑi) ) xi ( t ) ϑi ( π ) m ## The script for the Buffon needle estpi<- function(n, l=, t=2) { m <- for (i in :n) { x <- runif() theta <- runif(, min=, max=pi/2) if (x < l/2 * sin(theta)) m <- m + return(2*l*n/(t*m)) > estpi() [] 3.35575 > estpi() [] 3.8674 > estpi() [] 3.387 > estpi() [] 3.4279 > estpi() [] 3.4236 Σπύρος Ι. Χατζησπύρος Σηµειώσεις στην Υπολογιστική Στατιστική µέρος Α 5
Buffon s needle animation Πρώτα θα πρέπει να κάνουµε download το package animation και στην συνέχεια να δώσουµε τον αριθµό των επαναλήψεων nmax για την ολοκλήρωση Monte Carlo. Το option interval= δίνει µέγιστη ταχύτητα στο animation > ani.options(nmax = 2, interval = ) animation option 'nmax' changed: --> 2 Στην συνέχεια καλούµε την συνάρτηση buffon.needle() όπου l =.8 είναι το µήκος της βελόνας και d = η απόσταση των παράλληλων ευθειών buffon.needle(l =.8, d =, redraw = TUE, mat = matrix(c(, 3, 2, 3), 2), heights = c(3, 2), col = c("lightgray", "red", "gray", "red", "blue", "black", "red"), expand =.4, type = "l") το αποτέλεσµα είναι Για να βρούµε περισσότερες πληροφορίες για την συνάρτηση buffon.needle() χρησιµοποιούµε το query >?ani.options starting httpd help server... done Σπύρος Ι. Χατζησπύρος Σηµειώσεις στην Υπολογιστική Στατιστική µέρος Α 6
Άσκηση n ίνεται η στοχαστική διαδικασία{ Kt t [,] µε Kt = inf { n: u i i > t =, όπου για κάθε i τα u i είναι ανεξάρτητες τυχαίες µεταβλητές από την U (,). είξτε ότι E ( K ) t t = e, t. Γράψτε script για την εκτίµηση της µέσης τιµής E ( K t ). Γράψτε script που να προσοµοιώνει ω - τροχιές της διαδικασίας { Kt t [,] () = E( t) = E{ E[ t ] = E[ t = ] (, ) = E[ t = ] mt K K u K u yu y dy K u ydy. Επειδή [ t ] ( ) ( t y) { ( ) E K u = y = y > t + + E K y t θα έχουµε { ( ) () = ( > ) + ( ) + E t y t t t E( t y) E ( t y) mt y tdy K y tdy = dy + dy + K dy = + K dy t και έτσι t () = + ( ). mt mt ydy Παραγωγίζοντας και τα δύο µέλη της προηγούµενης σχέσης έχουµε t () = ( ) + ( ) m t m t m t y dy Θέτοντας u = t y παίρνουµε ( ) = ( ) + t ( ) = ( ) + ( ) ( ) = ( ) m t m m u du m m t m m t Ολοκληρώνοντας την προηγούµενη εξίσωση έχουµε ( ()) ( ( )) log mt log m = t Σπύρος Ι. Χατζησπύρος Σηµειώσεις στην Υπολογιστική Στατιστική µέρος Α 7
και επειδή { ( ) ( ) t P K = = m = m t = e. Kestimation<-function(x=, =) { est<- for(i in :) { s<- counter= while(s<x){ s<-s+runif(); counter<-counter+ est<-est+counter return(est/) > Kestimation() [] 2.69 > Kestimation(=) [] 2.7275 > Kestimation(=) [] 2.725 > Kestimation(x=2) [] 4.65 > Kestimation(x=2, =) [] 4.6596 Παρατήρηση Στην προηγούµενη άσκηση κάναµε χρήση του τύπου του Leibnitz t () bt () at bt () f ( t, x) dx = b () t f ( b() t, x) a () t f ( a() t, x) + f ( t, x) dx at () t. orbit<-function(dx=., M=) { orbit <- c(); X <- c(); x<- for(j in :M) { x<-x+dx; X<-append(X, x) s<-; counter <- while(s<x) {s<-s+runif(); counter <- counter + orbit<-append(orbit, counter) plot(x, orbit, type='l', pch=".") Σπύρος Ι. Χατζησπύρος Σηµειώσεις στην Υπολογιστική Στατιστική µέρος Α 8
orbit(dx=., M=25) Σπύρος Ι. Χατζησπύρος Σηµειώσεις στην Υπολογιστική Στατιστική µέρος Α 9