Skip to main content

DivisionAlgebra

Trait DivisionAlgebra 

Source
pub trait DivisionAlgebra<R: Field>: Algebra<R> {
    // Required methods
    fn conjugate(&self) -> Self;
    fn norm_sqr(&self) -> R;
    fn inverse(&self) -> Self;
}
Expand description

Represents a Division Algebra over a Field.

A division algebra is an algebra over a field where every non-zero element a has a multiplicative inverse, a⁻¹. This means that division is well-defined (though not necessarily commutative or associative).

This trait is particularly useful for representing number systems like real numbers, complex numbers, and quaternions.

§Mathematical Definition

An algebra A is a division algebra if for any element a in A and any non-zero element b in A, the equations a = bx and a = yb have unique solutions for x and y.

This implies the existence of multiplicative inverses for all non-zero elements.

Required Methods§

Source

fn conjugate(&self) -> Self

Computes the conjugate of an element.

In the context of algebras constructed via the Cayley-Dickson process (like Complex, Quaternions, Octonions), the conjugate of an element is found by negating its “imaginary” or vector parts.

§Mathematical Properties
  • (a*)* = a (Involutive)
  • (a + b)* = a* + b*
  • (a * b)* = b* * a* (Anti-distributive)

For real numbers, the conjugate is the identity function.

Source

fn norm_sqr(&self) -> R

Computes the squared norm of an element.

The squared norm is a scalar value from the base field R. For a normed division algebra, it is defined as norm_sqr(a) = a * a.conjugate(). This value is always real and non-negative.

Using the squared norm is often more efficient than norm() as it avoids a square root operation.

§Returns

A scalar of type R from the base field.

Source

fn inverse(&self) -> Self

Computes the multiplicative inverse of an element.

For a non-zero element a, its inverse a⁻¹ is defined such that a * a⁻¹ = 1anda⁻¹ * a = 1`.

In a normed division algebra, the inverse can be calculated as: a⁻¹ = a.conjugate() / norm_sqr(a)

§Panics or Deviations

If self is zero, norm_sqr() will be zero, leading to a division by zero. A correct implementation of this method should handle this case gracefully, typically by returning NaN or Infinity components, rather than panicking.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl DivisionAlgebra<f32> for f32

Implements DivisionAlgebra for f32, where the base field is f32 itself.

Source§

fn conjugate(&self) -> Self

The conjugate of a real number is itself.

Source§

fn norm_sqr(&self) -> f32

The squared norm of a real number x is x*x.

Source§

fn inverse(&self) -> Self

The inverse of a real number x is 1/x. Returns inf if x is 0.0.

Source§

impl DivisionAlgebra<f64> for f64

Implements DivisionAlgebra for f64, where the base field is f64 itself.

Source§

fn conjugate(&self) -> Self

The conjugate of a real number is itself.

Source§

fn norm_sqr(&self) -> f64

The squared norm of a real number x is x*x.

Source§

fn inverse(&self) -> Self

The inverse of a real number x is 1/x. Returns inf if x is 0.0.

Implementors§

Source§

impl DivisionAlgebra<Float106> for Float106

Source§

impl<T: RealField> DivisionAlgebra<T> for Complex<T>

Source§

impl<T: RealField> DivisionAlgebra<T> for Octonion<T>

Implements the DivisionAlgebra trait for Octonion.

Octonions form a non-associative division algebra over the real numbers. This trait provides methods for conjugate, norm_sqr, and inverse, which are fundamental to division algebras.

Source§

impl<T: RealField> DivisionAlgebra<T> for Quaternion<T>