%matplotlib inline from IPython.display import Image from IPython.html.widgets import interact Image('Lighthouse_schematic.jpg',width=500) xi = linspace(-10,10,150) alpha = 1 f = lambda x: 1/(pi*(1+(x-alpha)**2)) plot(xi,f(xi)) xlabel('$x$',fontsize=24) ylabel(r'$f_{\alpha}(x)$',fontsize=24); vlines(alpha,0,.35,linestyles='--',lw=4.) grid() beta =alpha = 1 theta_samples=((2*np.random.rand(250)-1)*pi/2) x_samples = alpha+beta*np.tan(theta_samples) hist(x_samples); import sympy as S a=S.symbols('alpha',real=True) x = S.symbols('x',real=True) # form derivative of the log-likelihood dL=sum((xk-a)/(1+(xk-a)**2) for xk in x_samples) S.plot(dL,(a,-15,15),xlabel=r'$\alpha$',ylabel=r'$dL(\alpha)/d\alpha$') from scipy import optimize from scipy.optimize import fmin_l_bfgs_b # convert sympy function to numpy version with lambdify alpha_x = fmin_l_bfgs_b(S.lambdify(a,(dL)**2),0,bounds=[(-3,3)],approx_grad=True) print alpha_x print 'alpha using average =',x_samples.mean() print 'maximum likelihood estimate = ', alpha_x[0] def run_trials(n=100): o=[] for i in range(100): theta_samples=((2*np.random.rand(250)-1)*pi/2) x_samples = alpha+beta*np.tan(theta_samples) o.append(x_samples) return np.array(o) o= run_trials() hist(o[np.where(abs(o)<200)]); plot(range(100,10000,100),[o[np.where(abs(o)