Hi all, I'm really happy to announce availability of Measurements.jl <https://github.com/giordano/Measurements.jl>, v0.1.1, a full-fledged uncertainty propagation <https://en.wikipedia.org/wiki/Propagation_of_uncertainty> library. This is the list of features:
- Support for most mathematical operations available in Julia involving real and complex numbers. All existing functions that accept AbstractFloat (and Complex{AbstractFloat}) arguments and internally use already supported functions can in turn perform calculations involving numbers with uncertainties without being redefined. This greatly enhances the power of Measurements.jl without effort for the users - Functional correlation between variables is correctly handled, so x-x == zero(x), x/x == one(x), tan(x) == sin(x)/cos(x), etc... - Support for arbitrary precision <http://docs.julialang.org/en/stable/manual/integers-and-floating-point-numbers/#arbitrary-precision-arithmetic> numbers with uncertainties (though this may not be very useful for quantities that are intrinsically imprecise) - Define arrays of measurements and perform calculations with them - Propagate uncertainty for any function of real arguments (including functions based on C/Fortran calls <http://docs.julialang.org/en/stable/manual/calling-c-and-fortran-code/>), using @uncertain macro <http://docs.julialang.org/en/stable/manual/metaprogramming/> - Functions to get the derivative and the gradient of an expression with respect to one or more independent measurements - Functions to calculate standard score <https://en.wikipedia.org/wiki/Standard_score> and weighted mean <https://en.wikipedia.org/wiki/Weighted_arithmetic_mean> - Easy way to attach the uncertainty to a number using ± sign The complete manual of the package is available at http://measurementsjl.readthedocs.io/ with many helpful examples. The package is released under terms of MIT "Expat" license. Looking at the list of uncertainty propagation software <https://en.wikipedia.org/wiki/List_of_uncertainty_propagation_software> on Wikipedia, it seems this is one of the few packages supporting complex numbers with uncertainties and operations with arrays, and the only one supporting arbitrary-precision arithmetic. What impressed me most during the development of the package, is that thanks to how Julia is designed I actually didn't do anything to gain support for complex measurements, arbitrary-precision arithmetic and operations with array. There is not a single line in Measurements.jl's code to provide support for all these features. Only for complex numbers I had to choose wisely the subtyping of new Measurement type (and Steven Johnson helped me on this, thanks!). For comparison, Python package uncertainties <https://pythonhosted.org/uncertainties/> doesn't support complex numbers with uncertainties nor multiple precision arithmetic, and you need to load a separate module (so the developer had to write specif code for that) in order perform operations with NumPy arrays. Regarding performance, operations with Measurements.jl can be up to 50 times faster than with uncertainties package. Let alone that in Measurements.jl you can simply write 42 ± 1.3 in order to define a new quantity with uncertainty (this nifty feature was suggested me on this mailing list, thanks Lucas Magno!). Bye, Mosè