https://github.com/beastyblacksmith/measurements.jl

Error propagation calculator and library for physical measurements. It supports real and complex numbers with uncertainty, arbitrary precision calculations, operations with arrays, and numerical integration.

https://github.com/beastyblacksmith/measurements.jl

Science Score: 10.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
  • codemeta.json file
  • .zenodo.json file
  • DOI references
  • Academic publication links
    Links to: arxiv.org
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (15.3%) to scientific vocabulary
Last synced: 10 months ago · JSON representation

Repository

Error propagation calculator and library for physical measurements. It supports real and complex numbers with uncertainty, arbitrary precision calculations, operations with arrays, and numerical integration.

Basic Info
Statistics
  • Stars: 0
  • Watchers: 2
  • Forks: 0
  • Open Issues: 0
  • Releases: 0
Fork of JuliaPhysics/Measurements.jl
Created over 7 years ago · Last pushed over 7 years ago

https://github.com/BeastyBlacksmith/Measurements.jl/blob/master/

# Measurements.jl

| **Documentation**                       | [**Package Evaluator**][pkgeval-link] | **Build Status**                          | **Code Coverage**               |
|:---------------------------------------:|:-------------------------------------:|:-----------------------------------------:|:-------------------------------:|
| [![][docs-stable-img]][docs-stable-url] | [![][pkg-0.5-img]][pkg-0.5-url]       | [![Build Status][travis-img]][travis-url] | [![][coveral-img]][coveral-url] |
| [![][docs-latest-img]][docs-latest-url] | [![][pkg-0.6-img]][pkg-0.6-url]       | [![Build Status][appvey-img]][appvey-url] | [![][codecov-img]][codecov-url] |

Introduction
------------

`Measurements.jl` is a package that allows you to define numbers with
[uncertainties](https://en.wikipedia.org/wiki/Measurement_uncertainty), perform
calculations involving them, and easily get the uncertainty of the result
according to
[linear error propagation theory](https://en.wikipedia.org/wiki/Propagation_of_uncertainty).
This library is written in [Julia](http://julialang.org/), a modern high-level,
high-performance dynamic programming language designed for technical computing.

When used in the
[Julia interactive session](http://docs.julialang.org/en/stable/manual/getting-started/),
it can serve also as an easy-to-use calculator.

### Features List ###

* Support for most mathematical operations available in Julia standard library
  and special functions
  from [`SpecialFunctions.jl`](https://github.com/JuliaMath/SpecialFunctions.jl)
  package, involving real and complex numbers.  All existing functions that
  accept `AbstractFloat` (and `Complex{AbstractFloat}` as well) 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)`, `cis(x)  exp(im*x)`,
  etc...
* Support for
  [arbitrary precision](http://docs.julialang.org/en/stable/manual/integers-and-floating-point-numbers/#arbitrary-precision-arithmetic)
  (also called multiple precision) numbers with uncertainties.  This is useful
  for measurements with very low relative error
* Define arrays of measurements and perform calculations with them.  Some linear
  algebra functions work out-of-the-box
* 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/)
* Function 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)
* Parse strings to create measurement objects
* Easy way to attach the uncertainty to a number using the `` sign as infix
  operator.  This syntactic sugar makes the code more readable and visually
  appealing
* Extensible in combination with external packages: you can propagate errors of
  measurements with their physical units, perform numerical integration
  with [`QuadGK.jl`](https://github.com/JuliaMath/QuadGK.jl), numerical and
  automatic differentiation, and much more.
* Integration with [`Plots.jl`](https://github.com/JuliaPlots/Plots.jl).

Further features are expected to come in the future, see the section "How Can I
Help?" and the TODO list below.

The method used to handle functional correlation is described in this paper:

* M. Giordano, 2016, "Uncertainty propagation with functionally correlated
  quantities", [arXiv:1610.08716](http://arxiv.org/abs/1610.08716)
  (Bibcode:
  [`2016arXiv161008716G`](http://adsabs.harvard.edu/abs/2016arXiv161008716G))

If you use use this package for your research, please cite it.

### Documentation ###

The complete manual of `Measurements.jl` is available at
https://juliaphysics.github.io/Measurements.jl/stable/.  There, people
interested in the details of the package, in order integrate the package in
their workflow, can can find a technical appendix explaining how the package
internally works.

Installation
------------

`Measurements.jl` is available for Julia 0.7 and later versions, and can be
installed with [Julia built-in package
manager](https://docs.julialang.org/en/stable/stdlib/Pkg/).  In a Julia session
run the commands

```julia
pkg> update
pkg> add Measurements
```

Older versions of this package are also available for Julia 0.4-0.6.

Usage
-----

After installing the package, you can start using it with

```julia
using Measurements
```

The module defines a new `Measurement` data type.  `Measurement` objects can be
created with the two following constructors:

``` julia
measurement(value, uncertainty)
value  uncertainty
```

where

* `value` is the nominal value of the measurement
* `uncertainty` is its uncertainty, assumed to be a
  [standard deviation](https://en.wikipedia.org/wiki/Standard_deviation).

They are both subtype of `AbstractFloat`.  Some keyboard layouts provide an easy
way to type the `` sign, if your does not, remember you can insert it in Julia
REPL with `\pm` followed by `TAB` key.  You can provide `value` and
`uncertainty` of any subtype of `Real` that can be converted to `AbstractFloat`.
Thus, `measurement(42, 33//12)` and `pi  0.1` are valid.

`measurement(value)` creates a `Measurement` object with zero uncertainty, like
mathematical constants.  See below for further examples.

Every time you use one of the constructors above, you define a *new independent*
measurement.  Instead, when you perform mathematical operations involving
`Measurement` objects you create a quantity that is not independent, but rather
depends on really independent measurements.

Most mathematical operations are instructed, by
[operator overloading](https://en.wikipedia.org/wiki/Operator_overloading), to
accept `Measurement` type, and uncertainty is calculated exactly using analityc
expressions of functions derivatives.

In addition, it is possible to create a `Complex` measurement with
`complex(measurement(a, b), measurement(c, d))`.

``` julia
measurement(string)
```

`measurement` function has also a method that enables you to create a
`Measurement` object from a string.

This module extends many methods defined in Julias mathematical standard
library, and some methods from widespread third-party packages as well.  This is
the case for most special functions
in [`SpecialFunctions.jl`](https://github.com/JuliaMath/SpecialFunctions.jl)
package, and the `quadgk` integration routine
from [`QuadGK.jl`](https://github.com/JuliaMath/QuadGK.jl) package.  See the
full manual for details.

Examples
--------

``` julia
julia> using Measurements

julia> a = measurement(4.5, 0.1)
4.5  0.1

julia> b = 3.8  0.4
3.8  0.4

julia> 2a + b
12.8  0.4472135954999579

julia> x = 8.4  0.7

julia> x - x
0.0  0.0

julia> x/x
1.0  0.0

julia> x*x*x - x^3
0.0  0.0

julia> sin(x)/cos(x) - tan(x)
-2.220446049250313e-16  0.0 # They are equal within numerical accuracy
```

License
-------

The `Measurements.jl` package is licensed under the MIT "Expat" License.  The
original author is Mos Giordano.

Please, cite the paper Giordano 2016 (http://arxiv.org/abs/1610.08716) if you
employ this package in your research work.


[docs-latest-img]: https://img.shields.io/badge/docs-latest-blue.svg
[docs-latest-url]: https://juliaphysics.github.io/Measurements.jl/latest/

[docs-stable-img]: https://img.shields.io/badge/docs-stable-blue.svg
[docs-stable-url]: https://juliaphysics.github.io/Measurements.jl/stable/

[pkgeval-link]: http://pkg.julialang.org/?pkg=Measurements

[pkg-0.5-img]: http://pkg.julialang.org/badges/Measurements_0.5.svg
[pkg-0.5-url]: http://pkg.julialang.org/detail/Measurements.html
[pkg-0.6-img]: http://pkg.julialang.org/badges/Measurements_0.6.svg
[pkg-0.6-url]: http://pkg.julialang.org/detail/Measurements.html

[travis-img]: https://travis-ci.org/JuliaPhysics/Measurements.jl.svg?branch=master
[travis-url]: https://travis-ci.org/JuliaPhysics/Measurements.jl

[appvey-img]: https://ci.appveyor.com/api/projects/status/u8mg5dlhyb1vjcpe?svg=true
[appvey-url]: https://ci.appveyor.com/project/giordano/measurements-jl

[coveral-img]: https://coveralls.io/repos/github/JuliaPhysics/Measurements.jl/badge.svg?branch=master
[coveral-url]: https://coveralls.io/github/JuliaPhysics/Measurements.jl?branch=master

[codecov-img]: https://codecov.io/gh/JuliaPhysics/Measurements.jl/branch/master/graph/badge.svg
[codecov-url]: https://codecov.io/gh/JuliaPhysics/Measurements.jl

Owner

  • Name: Simon Christ
  • Login: BeastyBlacksmith
  • Kind: user
  • Location: Hannover
  • Company: Leibniz Universität Hannover

GitHub Events

Total
Last Year