uncertainties

see: https://uncertainties-python-package.readthedocs.io/en/latest/

[1]:
from uncertainties import ufloat
import uncertainties.umath as umath
import uncertainties.unumpy as unp
import numpy as np
from smpl import io

Single number

[2]:
x = ufloat(1,0.1)
print(x)
1.00+/-0.10
[3]:
print(x*x)
1.00+/-0.20

This is error propagation of the function \(f(x)=x^2\) yielding \(\Delta f = \frac{\partial f(x)}{\partial x} \Delta x=2\Delta x\)

[4]:
y = ufloat(1,0.2)
print(x*y)
1.00+/-0.22

Here \(f(x,y)=x*y\) gives \(\Delta f = \sqrt{(\frac{\partial f(x)}{\partial x} \Delta x)^2 +(\frac{\partial f(y)}{\partial y} \Delta y)^2}\)

[5]:
umath.sin(2*y)
[5]:
0.9092974268256817+/-0.16645873461885696

Arrays

[6]:
data = np.loadtxt(io.find_file('test_linear_data.txt',3))
xdata = data[:,0]
xerr = data[:,2]
ydata = data[:,1]
yerr = data[:,3]
x = unp.uarray(xdata,xerr)
y = unp.uarray(ydata,yerr)
[7]:
print(x)
print(y)
[0.0+/-0.1 1.0+/-0.2 2.0+/-0.3 3.0+/-0.1 4.0+/-0.1 5.0+/-0.1]
[1.0+/-0.2 2.0+/-0.1 3.0+/-0.1 5.0+/-0.4 5.0+/-0.1 6.0+/-0.2]
[8]:
print(x*y)
[0.0+/-0.1 2.0+/-0.4123105625617661 6.0+/-0.9219544457292886 15.0+/-1.3
 20.0+/-0.6403124237432849 30.0+/-1.1661903789690602]

Error propagation for each number in the array.

[9]:
print(unp.sin(x)*y)
[0.0+/-0.1 1.682941969615793+/-0.2319245292308779
 2.727892280477045+/-0.38541218410236494
 0.7056000402993361+/-0.49820443885945703
 -3.7840124765396412+/-0.33546981375820745
 -5.7535456479788305+/-0.25641481109282205]
[ ]:

[ ]:

[ ]: