norman 0.0.4

Implementations of different norms for elements of vector spaces
Documentation
# Norman

The norman library provides everything you need for calculationg norms of elements
of vector spaces.

Based on two traits—`Norm` and `Distance`
– this crate implements different kinds of norm and distance
functions for a wide variety of types—including complex numbers and arrays.

These traits are mainly meant to facilitate generic implementations
of numeric algorithms, where one often needs a grasp of how _big_
a value is or how _far_ two values are apart.

## Usage

Add this to your `Cargo.toml`:

```toml
[dependencies]
norman = "0.0.4"
```

Then you can calculate the euclidean distance between two
complex numbers:

```rust
use num_complex::Complex;

use norman::Distance;
use norman::desc::Abs;

assert_eq!(Complex::new(2.0, 5.0).distance(&Complex::new(-1.0, 1.0), Abs::new()), 5.0);
```

or the supremum norm, 2-norm and 1-norm of a vector that is rerpesented by an ndarray:

```rust
use ndarray::Array1;

use norman::Norm;
use norman::desc::{Sup, PNorm};

let a = Array1::from(vec![2.0f32, -4.0, -2.0]);

assert_eq!(a.norm(Sup::new()), 4.0);
assert_eq!(a.norm(PNorm::new(2)), (2.0f32*2.0 + 4.0*4.0 + 2.0*2.0).sqrt());
assert_eq!(a.norm(PNorm::new(1)), 2.0f32 + 4.0 + 2.0);
```

The minimum supported version of rustc is currently **1.34.2**.

## Crate stability

The main reason why this crate is in pre-0.1-state is that I am not sure about
the naming of several items, so it may still encounter some renames.
I am particularly not very happy with the verbose name `norm_eucl` for
“just calulate the usual standard norm“.

## Future development

The first step will be to support types representing usual vectors
which are around in the ecosystem like:

* vector types of [rulinalg]https://crates.io/crates/rulinalg,
[nalgebra]https://crates.io/crates/nalgebra and co.

* simd types from [packed_simd]https://crates.io/crates/packed_simd

Later I will maybe introduce some operator norms on matrices.

Furthermore, I might think about adding a new trait for derivatives of norms –
in some algorithms, you do not only need to know the exact value of a norm,
but also the derivative in order to know in which direction to go
if you want to minimize the norm.

# License

Norman is distributed under the terms of both the MIT license and the
Apache License (Version 2.0).

See [LICENSE-APACHE](LICENSE-APACHE) and [LICENSE-MIT](LICENSE-MIT), and
[COPYING](COPYING) for details.

Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in the work by you, as defined in the Apache-2.0 license, shall be
dual licensed as above, without any additional terms or conditions.