Advertisement
jukaukor

monte_carlo_numpy_matplotlib_square_circle.py

Mar 30th, 2019
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.72 KB | None | 0 0
  1. # Heitetään pisteitä satunnaisesti neliölle
  2. # Osa pisteistä osuu neliön sisällä olevalle neljännesympyrälle
  3. # Tulostetaan heitot
  4. # Lasketaan tuloksista Piin arvo
  5. # Juhani Kaukoranta 29.3.2019
  6. import numpy as np
  7. import matplotlib.pyplot as plt
  8. import time
  9.  
  10. # heitetään satunnaispisteitä ympyrän jonka keskellä on neliö
  11. # neliön koko 400*400 pikseliä
  12. # neliön vasen ylänurkka (100,500)
  13. # neliö oikea alanurkka (500,500)
  14. # keskipiste (300,300)
  15.  
  16. def monte_carlo_pi(n):
  17. # pisteiden x- ja y-koordinaatit satunnaisvektoreina
  18. # ja x- ja ykoordinaattien neliöt
  19. x= np.random.randint(100,501,n)
  20. y= np.random.randint(100,501,n)
  21. # circle-ehdon täyttävät pisteet ympyrän sisällä
  22. circle = (x - 300)**2 + (y - 300)**2 <= 40000
  23. nocircle = (x - 300)**2 + (y - 300)**2 > 40000
  24. xout = x[nocircle]
  25. yout = y[nocircle]
  26. xcircle = x[circle]
  27. ycircle = y[circle]
  28. # Pii = 4 * pisteet ympyrän sisällä/kaikki pisteet
  29. sisalla = np.sum(circle)
  30. ulkona = n - sisalla
  31. Pii = 4.0*sisalla/n
  32. # plottaus
  33. plt.plot(xcircle, ycircle,'r.')
  34. plt.plot(xout,yout,'b.')
  35. plt.axis([100, 500, 100, 500])
  36. plt.xlabel("Satunnaispisteitä "+str(n)+", sisällä "+str(sisalla)+" ja ulkona "+str(ulkona))
  37. plt.text(250,300, 'Pii '+str(Pii),family="DejaVu Sans",size="20" )
  38. plt.show()
  39. # accum sisältää ympyräneljännekseen osuvien pisteiden lukumäärän
  40. # Piin arvon laskeminen
  41. return Pii
  42.  
  43. pisteita = int(input("Kuinka monta pistettä arvotaan "))
  44. time0 = time.perf_counter()
  45. print("Pii = ",monte_carlo_pi(pisteita))
  46. time1 = time.perf_counter()
  47. print("Aikaa kului ",time1-time0," sekuntia laskentaan, piirtämiseen ja kuvan katsomiseen")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement