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

hustota pravděpodobnosti Breit-Wignerova rozdělení

In [3]:
def breit_wigner(x,x0,l):
    return 1/np.pi*l/(l**2+(x-x0)**2)

Simulace dat majáku

In [5]:
x0=5  #poloha majáku
l=10  #vzdálenost majáku od pobřeží 
Ndata=10000 #počet simulovaných hodnot
data=l*np.tan(np.pi*np.random.random(Ndata))+x0
plt.hist(data,bins=100,range=(-100,100),density=True,label='simulace')
xp=np.arange(-100,100,0.1)
plt.plot(xp,breit_wigner(xp,x0,l),c='red',label='Breit-Wignerovo rozdělení')
plt.xlabel('x')
plt.ylabel('f(x)')
plt.show()
No description has been provided for this image

Nyní vypočítáme hodnoty logaritmu věrohodnostní funkce na 2D mřížce v prostoru parametrů x0, l a najdeme kde v tomto prostoru parametrů je logaritmus věrohodnostní funkce maximální

In [7]:
x0f=np.linspace(-100,100,100)
lf=np.linspace(1,50,100)
l_mesh,x_mesh=np.meshgrid(lf,x0f) #vytvoří 2D mřížku v prostoru parameterů x0,l
logL=np.zeros([np.size(x0f),np.size(lf)])
for i in range(Ndata):
     logL+=np.log(breit_wigner(data[i],x_mesh,l_mesh))
imax,jmax=np.where(logL==np.max(logL))

Nakreslíme vrstevnicový graf logaritmu věrohodnostní funkce

In [9]:
plt.contour(x_mesh,l_mesh,logL,levels=100)
plt.scatter(x0f[imax],lf[jmax],c='red',marker='+')
plt.xlabel('poloha x0')
plt.ylabel('vzdálenost l')
plt.show()
print(f"poloha majáku  x0 = {x0f[imax]}, vzdálenost l =  {lf[jmax]}")
No description has been provided for this image
poloha majáku  x0 = [5.05050505], vzdálenost l =  [9.90909091]
In [ ]: