jukaukor

MonteCarlo_Pi_numpy_matplotlib.py

Dec 31st, 2019
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.90 KB | None | 0 0
  1. # Heitetään pisteitä satunnaisesti neliölle
  2. # Osa pisteistä osuu neliön sisällä olevalle ympyrälle
  3. # Punaiset pisteet ympyrän sisällä, siniset ulkona
  4. # Lasketaan tuloksista Piin arvo
  5. # Juhani Kaukoranta 31.12.2019
  6. import numpy as np
  7. import matplotlib.pyplot as plt
  8. import time
  9.  
  10. def monte_carlo_pi(r,n):
  11. # pisteiden x- ja y-koordinaatit satunnaisvektoreina
  12. # ja x- ja ykoordinaattien neliöt
  13. x= 2*r*np.random.random_sample(n)
  14. y= 2*r*np.random.random_sample(n)
  15. x2 = (x - r)**2
  16. y2 = (y - r)**2
  17. r2 = r**2
  18. # circle-ehdon täyttävät pisteet ympyrän sisällä
  19. circle = x2+ y2 <= r2 # ympyrän sisällä olevien ehto
  20. nocircle = x2 + y2 > r2 # ympyrän ulkopuolella
  21. accum = np.sum(circle) # ympyrän sisällä olevien pisteiden määrä
  22. print("Pii = ",4*accum/n)
  23. xout = x[nocircle]
  24. yout = y[nocircle]
  25. xcircle = x[circle]
  26. ycircle = y[circle]
  27. # plottaus, aluksi ympyrä
  28. alfa = np.linspace(0, 2*np.pi, 100)
  29. x1 = r+r*np.cos(alfa)
  30. y1 = r+r*np.sin(alfa)
  31. fig,ax = plt.subplots(1)
  32. ax.plot(x1, y1) # piirtää ympyrän
  33. ax.set_aspect(1) # asettaa näytön oikein
  34. # plottaus pisteet ympyrän sisällä ja ulkona
  35. ax.plot(xcircle, ycircle,'r.') # sisällä punaiset pisteet
  36. ax.plot(xout,yout,'b.') # ulkona siniset pisteet
  37. plt.xlim(0,2*r)
  38. plt.ylim(0,2*r)
  39. plt.xlabel("Satunnaispisteet ja ympyrä")
  40. fig.tight_layout()
  41. plt.show()
  42. # accum sisältää ympyräneljännekseen osuvien pisteiden lukumäärän
  43. # Piin arvon laskeminen
  44. return
  45.  
  46. pisteita = int(input("Kuinka monta pistettä arvotaan "))
  47. radius = float(input("Anna ympyrän säde "))
  48. time0 = time.perf_counter()
  49. print("Pii = ",monte_carlo_pi(radius,pisteita))
  50. time1 = time.perf_counter()
  51. print("Aikaa kului ",time1-time0," sekuntia laskentaan, piirtämiseen ja kuvan katsomiseen")
Advertisement
Add Comment
Please, Sign In to add comment