<jupyter_start><jupyter_text>Proiectul Nr. 20- Generarea variabilei Beta(0.3, 5) prin două metode- Generarea variabilei normale prin metoda polară<jupyter_code>import random
import numpy as np<jupyter_output><empty_output><jupyter_text>Generarea variabilei BetaFolosim cele două metode descrise în cursul 6.<jupyter_code>def gen_beta1(a, b):
    "Folosind distribuția gamma"
    
    x_1 = random.gammavariate(a, 1)
    x_2 = random.gammavariate(b, 1)
    
    return x_1 / (x_1 + x_2)

def gen_beta2(a, b):
    "Folosind distribuții uniforme"

    while True:
        v = random.uniform(0, 1) ** (1 / a)
        t = random.uniform(0, 1) ** (1 / (b - 1))

        if v + t < 1:
            return v<jupyter_output><empty_output><jupyter_text>VerificareVedem cât ar trebui să fie media și deviația standard a distribuției folosind formulele de pe Wikipedia.După aceea, generăm multe eșantioane cu funcțiile de mai sus și vedem dacă respectă aceste proprietăți.<jupyter_code>num_samples = 100_000

a = 0.3
b = 5

# Formulele sunt luate de pe https://en.wikipedia.org/wiki/Beta_distribution
mean = a / (a + b)
sd = np.sqrt((a * b)/(((a + b)**2)*(a + b + 1)))

sample1 = [gen_beta1(a, b) for _ in range(num_samples)]
sample2 = [gen_beta2(a, b) for _ in range(num_samples)]

print("Valori teoretice:")
print("Medie:", mean, "-", "Deviație standard:", sd)

print()

print("Eșantioane generate prin prima metodă")
print("Medie:", np.mean(sample1), "-", "Deviație standard:", np.std(sample1))
print("Medie:", np.mean(sample2), "-", "Deviație standard:", np.std(sample2))<jupyter_output>Valori teoretice:
Medie: 0.05660377358490566 - Deviație standard: 0.09206604461778616

Eșantioane generate prin prima metodă
Medie: 0.05676770538150129 - Deviație standard: 0.09237633079284698
Medie: 0.05609732461631161 - Deviație standard: 0.09092262264587549<jupyter_text>Generarea variabilei normaleFolosind metoda polară descrisă în cursul 6.<jupyter_code>def gen_norm_polar():
    while True:
        v_1 = random.uniform(-1, 1)
        v_2 = random.uniform(-1, 1)

        s = (v_1 ** 2) + (v_2 ** 2)

        if s < 1:
            z_1 = v_1 * np.sqrt((-2 * np.log(s)) / s)
            z_2 = v_2 * np.sqrt((-2 * np.log(s)) / s)

            return [z_1, z_2]<jupyter_output><empty_output><jupyter_text>Verificare<jupyter_code>sample = [x for _ in range(num_samples) for x in gen_norm_polar()]

print("Medie:", np.mean(sample), "-", "Deviație standard:", np.std(sample))<jupyter_output>Medie: 0.00393825190828833 - Deviație standard: 1.0005390943921242
StarcoderdataJupyterStructuredCleanDedup