# -*- coding: utf-8 -*-
"""
Éditeur de Spyder

Ceci est un script temporaire.
"""

import math
import numpy as np
import matplotlib.pyplot as plt

# Valeur mesurée et incertitude
f0mes = 164.0
uf0mes = 0.1

R2 = 1.0542e6
uR2 = 0.003 * R2 + 2 * 0.0001*1e6

R1 = 100.58e3
uR1 = 0.0007 * R1 + 2 * 0.01 * 1e3

C = 9.4e-9
uC = 0.01 * C + 2 * 0.01e-9

R1 = 100e3
R = 10e3
Rprime = R * R1 / (R + R1)


f0 = 1 / math.sqrt(Rprime * R2 * C**2) * 1 / (2*math.pi)


q = np.sqrt(3)

N = 10000

val_R2 = np.random.uniform(R2 - uR2 * q, R2 + uR2 * q, N)
val_R1 = np.random.uniform(R1 - uR1 * q, R1 + uR1 * q, N)
val_C = np.random.uniform(C - uC * q, C + uC * q, N)

val_Rprime = R * R1 / (R + R1)

val_f0 = 1 /np.sqrt(val_Rprime * val_R2 * val_C**2) * 1 / (2*np.pi)


f0 = np.average(val_f0)

uf0 = np.std(val_f0)


plt.figure()
plt.hist(val_f0)


## Avec une distribution Gaussienne
val_R2 = np.random.normal(R2, uR2, N)
val_R1 = np.random.normal(R1, uR1, N)
val_C = np.random.normal(C, uC, N)

val_Rprime = R * R1 / (R + R1)

val_f0 = 1 /np.sqrt(val_Rprime * val_R2 * val_C**2) * 1 / (2*np.pi)


f0 = np.average(val_f0)

uf0 = np.std(val_f0)


plt.figure()
plt.hist(val_f0)


# écart normalisé entre la valeur mesurée et la valeur calculée
E = np.abs(f0mes - f0) / np.sqrt(uf0mes**2 + uf0**2)


## facteur de qualité
f1 = 151.4
f2 = 184.8
Q = f0 / (f2 - f1)
Qattendu = 0.5 * np.sqrt(R2 / Rprime)

val_Qattendu  = 0.5 * np.sqrt(val_R2 / val_Rprime)
uQattendu =np.std(val_Qattendu)


