Výpočet čísla $\pi$ Monte Carlo integrací¶
In [86]:
import numpy as np
import matplotlib.pyplot as plt
In [87]:
# výběr generátoru
rng=np.random.default_rng()
print(rng)
Generator(PCG64)
In [88]:
N=1000000 #počet simulací
x=np.empty(N) #souřadnice všech bodů
y=np.empty(N)
x_in=np.empty(N) #souřadnice bodů uvnitř čtvrtkruhu
y_in=np.empty(N)
pi=np.empty(N)
i=0
i_in=0
while i<N:
x[i]=rng.random() #x-ová souřadnice náhodně zvoleného bodu uvnitř čtverce o straně 1
y[i]=rng.random() #y-ová souřadnice náhodně zvoleného bodu uvnitř čtverce o straně 1
r=np.sqrt(x[i]**2+y[i]**2)
if r<=1: #když bod padne dovnitř čtvrtkruhu
x_in[i_in]=x[i]
y_in[i_in]=y[i]
i_in+=1
if i>0:
pi[i]=4*i_in/i
i+=1
N_in=i_in
In [92]:
fig,ax=plt.subplots(figsize=(10,10))
ax.scatter(x,y,c='grey',s=0.01)
ax.set_xlim(0,1)
ax.set_ylim(0,1)
ax.set_xlabel("x")
ax.set_ylabel("y")
ax.scatter(x_in[0:N_in],y_in[0:N_in],c='red',s=0.01)
plt.show()
In [93]:
fig,ax=plt.subplots()
iteration=np.arange(0,N,1)
ax.plot(iteration,pi)
ax.set_ylim(3.0,3.2)
ax.set_xlim(0,N)
ax.set_xlabel("iterace")
ax.set_ylabel("pi")
ax.plot([0,N],[np.pi,np.pi],ls='dashed',c='gray')
plt.show()
In [91]:
print(f"Hodnota pi po {N} simulacích je {N_in/N*4}")
Hodnota pi po 1000000 simulacích je 3.141816
In [ ]: