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]
[ ]:
[ ]:
[ ]: