%matplotlib inline
from matplotlib import pyplot as plt
import numpy as np
sample_size = 1000
xi = np.random.normal(0,1, sample_size)**2 + np.random.uniform(-1,1, sample_size)
interval = {'low' : 1, 'high' : 2}
plt.hist(xi, normed=True, bins=sample_size // 10);
%%time
convergence_list = []
for sample_size in [10** x for x in range(1, 6)] :
    first_seq = np.random.normal(0,1, sample_size)
    second_seq = np.random.uniform(-1,1, sample_size)
    sum_seq = norm_seq**2 + uniform_seq
    est_proba = np.count_nonzero((sum_seq >= interval['low']) & (sum_seq <= interval['high'])) / sample_size
    convergence_list.append(est_proba)
    print('sample size:           {}'.format(sample_size))
    print('estimated probability: {}'.format(est_proba))
    if len(convergence_list) >= 2:
        print('estimations difference : {}\n'.format(np.abs(convergence_list[-1] - convergence_list[-2])))
xi = np.random.normal(1,2, sample_size) + np.random.exponential(2, sample_size)
interval = {'low' : 0, 'high' : 1}
plt.hist(xi, normed=True, bins=sample_size // 10);
%%time
convergence_list = []
for sample_size in [10** x for x in range(1, 6)] :
    first_seq = np.random.normal(1,2, sample_size)
    second_seq = np.random.exponential(2, sample_size)
    sum_seq = first_seq + second_seq
    est_proba = np.count_nonzero((sum_seq >= interval['low']) & (sum_seq <= interval['high'])) / sample_size
    convergence_list.append(est_proba)
    print('sample size:           {}'.format(sample_size))
    print('estimated probability: {}'.format(est_proba))
    if len(convergence_list) >= 2:
        print('estimations difference : {}\n'.format(np.abs(convergence_list[-1] - convergence_list[-2])))