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§
Sourcefn conjugate(&self) -> Self
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.
Sourcefn norm_sqr(&self) -> R
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.
Sourcefn inverse(&self) -> Self
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.
impl DivisionAlgebra<f32> for f32
Implements DivisionAlgebra for f32, where the base field is f32 itself.
Source§impl DivisionAlgebra<f64> for f64
Implements DivisionAlgebra for f64, where the base field is f64 itself.
impl DivisionAlgebra<f64> for f64
Implements DivisionAlgebra for f64, where the base field is f64 itself.
Implementors§
impl DivisionAlgebra<Float106> for Float106
impl<T: RealField> DivisionAlgebra<T> for Complex<T>
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.