Simulace matematického kyvadla

In [43]:
import numpy as np
import matplotlib.pyplot as plt

teoretická hustota pravděpodobnosti je $f(x)=\frac{1}{\pi\sqrt{x_0^2-x^2}}$

In [48]:
#teoretická hustota pravděpodobnosti výskytu kyvadla
def f(x,x0):
    if abs(x)<x0:
        return 1.0/(np.pi*np.sqrt(x0**2-x**2))
    else:
        return 0.0

#vektorizovaná funkce f(x) aby byla schopna pracovat najednou s celým polem x
vf=np.vectorize(f)        

Protože ještě neznáme metodu inverzní funkce pro generování náhodné proměnné se zadaného rozdělení, budeme simulovat časy kdy mačkáme spoušť fotoaparátu.

In [45]:
ndata=100000 #počet simulovaných dat
nbins=100 #počet bunů histogramu
l=1 #délka závěsu 1 m
g=9.81 #tíhové zrychlení
alpha_0=5*np.pi/180 #=uhel max. výchylky 5 stupňů (převedeno na radiány) 
x0=alpha_0*l #max. výchylka
omega=np.sqrt(l/g)
T=2*np.pi/omega #perioda kmitu
t=T*np.random.random(ndata)

časová závislost $x$-ové souřadnice kyvadla je $x(t) = x_0\cos\omega t$

In [46]:
x=x0*np.cos(omega*t)

Nakreslíme normovaný histogram simulovaných dat a pro srovnání také teoretickou hustotu pravděpodobnosti

In [50]:
plt.hist(x,bins=nbins,density=True,label="simulace")
#do grafu nakreslíme pro srovnání teoretickou hustotu pravděpodobnosti f(x)
x_teor=np.linspace(-x0,x0,1000)
plt.plot(x_teor,vf(x_teor,x0),c='red',label="teoretická f(x)")
plt.xlabel("x")
plt.ylabel("f(x)")
plt.legend()
plt.show()
No description has been provided for this image
In [ ]: