Advertisement
jukaukor

monte_carlo_numpy_plot_pi.py

Mar 26th, 2019
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.33 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 26.3.2019
  6. import numpy as np
  7. from numba import jit
  8. import matplotlib.pyplot as plt
  9. import time
  10.  
  11. @jit(parallel = True)
  12. def monte_carlo_pi(n):
  13. accum = 0
  14. # pisteiden x- ja y-koordinaatit satunnaisvektoreina
  15. # ja x- ja ykoordinaattien neliöt
  16. x= np.random.random_sample(n)
  17. y= np.random.random_sample(n)
  18. x2 = x**2
  19. y2 = y**2
  20. # circle-ehdon täyttävät pisteet ympyrän sisällä
  21. circle = x2 + y2 <= 1
  22. nocircle = x2 + y2 > 1
  23. xout = x[nocircle]
  24. yout = y[nocircle]
  25. xcircle = x[circle]
  26. ycircle = y[circle]
  27. # plottaus
  28. plt.plot(xcircle, ycircle,'ro')
  29. plt.plot(xout,yout,'bo')
  30. plt.axis([0, 1, 0, 1])
  31. plt.xlabel("Satunnaispisteet ja Piin arvo")
  32. plt.show()
  33. # accum sisältää ympyräneljännekseen osuvien pisteiden lukumäärän
  34. # Piin arvon laskeminen
  35. accum = np.sum(circle)
  36. return 4.0*accum/n
  37.  
  38. pisteita = int(input("Kuinka monta pistettä arvotaan "))
  39. time0 = time.perf_counter()
  40. print("Pii = ",monte_carlo_pi(pisteita))
  41. time1 = time.perf_counter()
  42. print("Aikaa kului ",time1-time0," sekuntia laskentaan, piirtämiseen ja kuvan katsomiseen")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement