import uncertainties
x = uncertainties.ufloat(10, 1)
y = uncertainties.ufloat(10, 1)
x10.0+/-1.0
Si queremos reportar un resultado y el cual es función de otras mediciones independientes \{ x_1, \ldots, x_n \}:
y = f(x_1, \ldots, x_n)
podemos propagar el error de estas mediciones utilizando la fórmula de propagación de errores independientes (Bevington y Robinson 2003, 39):
\begin{align} \sigma_y^2 &= \text{Var}(y) \\ &\approx \sum_{i=1}^n \left( \frac{\partial f}{\partial x_i} \right)^2 \text{Var}(x_i) \\ &= \sum_{i=1}^n \left( \frac{\partial f}{\partial x_i} \sigma_{x_i} \right)^2 \end{align} \tag{1}
donde \{ \sigma_{x_1}, \ldots, \sigma_{x_n} \} son los errores de las mediciones \{ x_1, \ldots, x_n \}, respectivamente.
El paquete uncertainties nos permite definir magnitudes con incertezas y hacer operaciones con ellas, donde usa esta fórmula para propagar errores.
En Google Colab, no viene pre-instalado. Lo pueden instalar corriendo:
!uv pip install uncertaintiesSi tenemos dos mediciones:
\begin{cases} x = 10 \pm 1 \\ y = 10 \pm 1 \end{cases}utilizamos la función ufloat para definirlas:
import uncertainties
x = uncertainties.ufloat(10, 1)
y = uncertainties.ufloat(10, 1)
x10.0+/-1.0
Se puede acceder a cada parte por separado con:
x.nominal_value10.0
x.std_dev1.0
Si nos interesa calcular la resta z de estas mediciones:
z(x, y) = x - y
simplemente hacemos la resta de estas variables:
z = x + y
z20.0+/-1.4142135623730951
Utilizando la Ecuación 1, podemos hacer el cálculo a mano:
\begin{align*} \sigma_z^2 % &= \left( \frac{\partial z}{\partial x} \sigma_{x} \right)^2 &&+ \left( \frac{\partial z}{\partial y} \sigma_{y} \right)^2 \\ &= \left( +1 \cdot \sigma_{x} \right)^2 &&+ \left( -1 \cdot \sigma_{y} \right)^2 \\ &= \sigma_{x}^2 + \sigma_{y}^2 \end{align*} \tag{2}
Es decir,
\begin{align*} \sigma_z &= \sqrt{\sigma_{x}^2 + \sigma_{y}^2} \\ &= \sqrt{1^2 + 1^2} \\ &= \sqrt{2} \end{align*}
que es lo mismo que obtuvimos con uncertainties.
De la misma manera, podemos hacer la cuenta para un producto:
w = x \cdot y \tag{3}
x * y100.0+/-14.142135623730951
Utilizando la Ecuación 1:
\begin{align*} \sigma_w^2 % &= \left( \frac{\partial w}{\partial x} \sigma_{x} \right)^2 &&+ \left( \frac{\partial w}{\partial y} \sigma_{y} \right)^2 \\ &= \left( y \cdot \sigma_{x} \right)^2 &&+ \left( x \cdot \sigma_{y} \right)^2 \end{align*} \tag{4}
Es decir,
\begin{align*} \sigma_w &= \sqrt{y \cdot \sigma_{x}^2 + x \cdot \sigma_{y}^2} \\ &= \sqrt{(10 \cdot 1)^2 + (10 \cdot 1)^2} \\ &= \sqrt{200} = 10 \sqrt{2} \approx 14.14 \end{align*}
Para llegar al número, es mejor dejar que la cuenta la haga uncertainties, así evitamos equivocarnos al hacer la cuenta.
Si queremos analizar la dependencia del error con las variables del problema, necesitamos hacer la cuenta de manera simbólica.
Para el caso de la suma o la resta (Ecuación 2), el error al cuadrado es la suma de los errores al cuadrado.
En cambio, para el producto o la división (Ecuación 5), se puede reescribir en términos de los errores relativos si dividimos a ambos lados por el cuadrado de la Ecuación 3:
\left( \frac{\sigma_w}{w} \right)^2 = \left( \frac{\sigma_x}{x} \right)^2 + \left( \frac{\sigma_y}{y} \right)^2 \tag{5}
donde el cuadrado del error relativo del producto \frac{\sigma_w}{w} es la suma de los cuadrados de los errores relativos \frac{\sigma_x}{x} y \frac{\sigma_y}{y}.
Una posible aplicación de esto es al determinar un ángulo \theta a través de la medición de los lados opuestos y y adyacentes x (Figura 1):
z = \tan(\theta) = \frac{y}{x}
El error \sigma_z en la tangente del ángulo y, por lo tanto, en el ángulo va a depender de los errores relativos de x e y. Entonces, si el error de medición es el mismo para x_1 o x_2, nos conviene medir el más largo, x_2, para reducir el error en el ángulo.
La fórmula de propagación de errores más general es (Bevington y Robinson 2003, 40): \text{Cov}(y, z) = \sum_{i=1}^n \sum_{j=1}^n \frac{\partial y}{\partial x_i} \frac{\partial z}{\partial x_j} \text{Cov}(x_i, x_j) \tag{6}
donde y y z son funciones de mediciones \{ x_1, \ldots, x_n \}:
\begin{cases} y = y(x_1, \ldots, x_n) \\ z = z(x_1, \ldots, x_n) \end{cases}
Así como la varianza \text{Var}(x) = \sigma_x^2 es una medida del error (al cuadrado) de la variable x, la covarianza \text{Cov}(x, y) es una medida del error conjunto entre x e y. Si la covarianza es positiva, esperamos un error con el mismo signo tanto para x como y. Si es negativa, el error tendrá distinto signo.
Una regla para saber si dos variables están correlacionadas es ver si reutilizan la misma medición. Ver Sección 4.1.
La fórmula de la Ecuación 1 es un caso especial de Ecuación 6, y la podemos derivar de esta utilizando que:
Consideremos que queremos calcular la superficie de una arandela (Figura 2, área gris), donde solo medimos el radio externo R con su error \sigma_R y sabemos que el radio interno es r = R / 2.
Procedamos de tres maneras:
S = S_R - S_r \tag{7}
calculando su error con la Ecuación 1.
\begin{align*} \text{Var}(S) &= \text{Cov}(S, S) \\ &= \left( \frac{\partial S}{\partial S_R} \right)^2 \text{Var}(S_R) + \left( \frac{\partial S}{\partial S_r} \right)^2 \text{Var}(S_r) + 2 \frac{\partial S}{\partial S_R} \frac{\partial S}{\partial S_r} \text{Cov}(S_R, S_r) \end{align*}
\begin{align} S &= \pi R^2 - \pi r^2 \\ &= \pi R^2 - \pi \left( \frac{R}{2} \right)^2 \\ &= \frac{3}{4} \pi R^2 \end{align} \tag{8}
y propaguemos el error para esta expresión.
La propagación de errores es más simple cuando se reescribe todo en términos de variables independientes. En este caso, cuando se reescribe todo en términos de R desde el principio.
¿Se llega al mismo resultado?