pub struct Multivector<const P: usize, const Q: usize, const R: usize> { /* private fields */ }Expand description
A multivector in a Clifford algebra Cl(P,Q,R)
§Type Parameters
P: Number of basis vectors that square to +1Q: Number of basis vectors that square to -1R: Number of basis vectors that square to 0
Implementations§
Source§impl<const P: usize, const Q: usize, const R: usize> Multivector<P, Q, R>
impl<const P: usize, const Q: usize, const R: usize> Multivector<P, Q, R>
Sourcepub const BASIS_COUNT: usize
pub const BASIS_COUNT: usize
Total number of basis blades (2^DIM)
Sourcepub fn zero() -> Multivector<P, Q, R>
pub fn zero() -> Multivector<P, Q, R>
Create a new zero multivector
Sourcepub fn scalar(value: f64) -> Multivector<P, Q, R>
pub fn scalar(value: f64) -> Multivector<P, Q, R>
Create a scalar multivector
Sourcepub fn from_vector(vector: &Vector<P, Q, R>) -> Multivector<P, Q, R>
pub fn from_vector(vector: &Vector<P, Q, R>) -> Multivector<P, Q, R>
Create multivector from vector
Sourcepub fn from_bivector(bivector: &Bivector<P, Q, R>) -> Multivector<P, Q, R>
pub fn from_bivector(bivector: &Bivector<P, Q, R>) -> Multivector<P, Q, R>
Create multivector from bivector
Sourcepub fn basis_vector(i: usize) -> Multivector<P, Q, R>
pub fn basis_vector(i: usize) -> Multivector<P, Q, R>
Create a basis vector e_i (i starts from 0)
Sourcepub fn from_coefficients(coefficients: Vec<f64>) -> Multivector<P, Q, R>
pub fn from_coefficients(coefficients: Vec<f64>) -> Multivector<P, Q, R>
Create a multivector from coefficients
Sourcepub fn from_slice(coefficients: &[f64]) -> Multivector<P, Q, R>
pub fn from_slice(coefficients: &[f64]) -> Multivector<P, Q, R>
Create a multivector from a slice (convenience for tests)
Sourcepub fn scalar_part(&self) -> f64
pub fn scalar_part(&self) -> f64
Get the scalar part (grade 0)
Sourcepub fn set_scalar(&mut self, value: f64)
pub fn set_scalar(&mut self, value: f64)
Set the scalar part
Sourcepub fn vector_part(&self) -> Vector<P, Q, R>
pub fn vector_part(&self) -> Vector<P, Q, R>
Get vector part as a Vector type
Sourcepub fn bivector_part(&self) -> Multivector<P, Q, R>
pub fn bivector_part(&self) -> Multivector<P, Q, R>
Get bivector part as a Multivector (grade 2 projection)
Sourcepub fn bivector_type(&self) -> Bivector<P, Q, R>
pub fn bivector_type(&self) -> Bivector<P, Q, R>
Get bivector part as a Bivector type wrapper
Sourcepub fn trivector_part(&self) -> f64
pub fn trivector_part(&self) -> f64
Get trivector part (scalar for 3D)
Sourcepub fn set_vector_component(&mut self, index: usize, value: f64)
pub fn set_vector_component(&mut self, index: usize, value: f64)
Set vector component
Sourcepub fn set_bivector_component(&mut self, index: usize, value: f64)
pub fn set_bivector_component(&mut self, index: usize, value: f64)
Set bivector component
Sourcepub fn vector_component(&self, index: usize) -> f64
pub fn vector_component(&self, index: usize) -> f64
Get vector component
Sourcepub fn to_vec(&self) -> Vec<f64>
pub fn to_vec(&self) -> Vec<f64>
Convert coefficients to owned vector
Useful for interoperability with other libraries and serialization.
Sourcepub fn grade_project(&self, grade: usize) -> Multivector<P, Q, R>
pub fn grade_project(&self, grade: usize) -> Multivector<P, Q, R>
Grade projection with alternative name for clarity
Alias for grade_projection that emphasizes the projection operation.
Sourcepub fn wedge(&self, other: &Multivector<P, Q, R>) -> Multivector<P, Q, R>
pub fn wedge(&self, other: &Multivector<P, Q, R>) -> Multivector<P, Q, R>
Wedge product (alias for outer product)
The wedge product ∧ is the antisymmetric outer product, fundamental to exterior algebra and differential forms.
Sourcepub fn dot(&self, other: &Multivector<P, Q, R>) -> Multivector<P, Q, R>
pub fn dot(&self, other: &Multivector<P, Q, R>) -> Multivector<P, Q, R>
Dot product (alias for inner product)
The dot product · is the grade-lowering inner product, generalizing the vector dot product to all grades.
Sourcepub fn add(&self, other: &Multivector<P, Q, R>) -> Multivector<P, Q, R>
pub fn add(&self, other: &Multivector<P, Q, R>) -> Multivector<P, Q, R>
Add method for convenience
Sourcepub fn grade(&self) -> usize
pub fn grade(&self) -> usize
Get the grade of a multivector (returns the highest non-zero grade)
Sourcepub fn outer_product_with_vector(
&self,
other: &Vector<P, Q, R>,
) -> Multivector<P, Q, R>
pub fn outer_product_with_vector( &self, other: &Vector<P, Q, R>, ) -> Multivector<P, Q, R>
Outer product with a vector (convenience method)
Sourcepub fn geometric_product(
&self,
rhs: &Multivector<P, Q, R>,
) -> Multivector<P, Q, R>
pub fn geometric_product( &self, rhs: &Multivector<P, Q, R>, ) -> Multivector<P, Q, R>
Geometric product with another multivector
The geometric product is the fundamental operation in geometric algebra, combining both the inner and outer products.
Sourcepub fn geometric_product_scalar(
&self,
rhs: &Multivector<P, Q, R>,
) -> Multivector<P, Q, R>
pub fn geometric_product_scalar( &self, rhs: &Multivector<P, Q, R>, ) -> Multivector<P, Q, R>
Scalar implementation of geometric product (fallback)
Sourcepub fn inner_product(&self, rhs: &Multivector<P, Q, R>) -> Multivector<P, Q, R>
pub fn inner_product(&self, rhs: &Multivector<P, Q, R>) -> Multivector<P, Q, R>
Inner product (grade-lowering, dot product for vectors)
Sourcepub fn outer_product(&self, rhs: &Multivector<P, Q, R>) -> Multivector<P, Q, R>
pub fn outer_product(&self, rhs: &Multivector<P, Q, R>) -> Multivector<P, Q, R>
Outer product (wedge product, grade-raising)
Sourcepub fn scalar_product(&self, rhs: &Multivector<P, Q, R>) -> f64
pub fn scalar_product(&self, rhs: &Multivector<P, Q, R>) -> f64
Scalar product (grade-0 part of geometric product)
Sourcepub fn reverse(&self) -> Multivector<P, Q, R>
pub fn reverse(&self) -> Multivector<P, Q, R>
Reverse operation (reverses order of basis vectors in each blade)
Sourcepub fn grade_projection(&self, grade: usize) -> Multivector<P, Q, R>
pub fn grade_projection(&self, grade: usize) -> Multivector<P, Q, R>
Grade projection - extract components of a specific grade
Sourcepub fn grade_magnitude(&self, grade: usize) -> f64
pub fn grade_magnitude(&self, grade: usize) -> f64
Compute the magnitude of a specific grade component.
This extracts the k-vector part and computes its magnitude. Useful for determining grade dominance in holographic representations.
§Arguments
grade- The grade to compute magnitude for (0=scalar, 1=vector, 2=bivector, etc.)
§Returns
The magnitude of the grade-k component, or 0.0 if no such component exists.
§Example
use amari_core::Multivector;
let mv = Multivector::<3,0,0>::basis_vector(0) + Multivector::<3,0,0>::scalar(2.0);
assert!((mv.grade_magnitude(0) - 2.0).abs() < 1e-10); // scalar part
assert!((mv.grade_magnitude(1) - 1.0).abs() < 1e-10); // vector partSourcepub fn grade_spectrum(&self) -> Vec<f64>
pub fn grade_spectrum(&self) -> Vec<f64>
Get all grade magnitudes as a vector.
Returns the magnitude of each grade component from 0 to DIM. This provides a “grade spectrum” view of the multivector.
Sourcepub fn norm_squared(&self) -> f64
pub fn norm_squared(&self) -> f64
Compute the norm squared (scalar product with reverse)
Sourcepub fn magnitude(&self) -> f64
pub fn magnitude(&self) -> f64
Compute the magnitude (length) of this multivector
The magnitude is defined as |a| = √(a·ã) where ã is the reverse of a. This provides the natural norm inherited from the underlying vector space.
§Mathematical Properties
- Always non-negative: |a| ≥ 0
- Zero iff a = 0: |a| = 0 ⟺ a = 0
- Sub-multiplicative: |ab| ≤ |a||b|
§Examples
use amari_core::Multivector;
let v = Multivector::<3,0,0>::basis_vector(0);
assert_eq!(v.magnitude(), 1.0);Sourcepub fn norm(&self) -> f64
pub fn norm(&self) -> f64
Compute the norm (magnitude) of this multivector
Note: This method is maintained for backward compatibility.
New code should prefer magnitude() for clarity.
Sourcepub fn approx_eq(&self, other: &Multivector<P, Q, R>, epsilon: f64) -> bool
pub fn approx_eq(&self, other: &Multivector<P, Q, R>, epsilon: f64) -> bool
Approximate equality comparison
Sourcepub fn normalize(&self) -> Option<Multivector<P, Q, R>>
pub fn normalize(&self) -> Option<Multivector<P, Q, R>>
Normalize this multivector
Sourcepub fn inverse(&self) -> Option<Multivector<P, Q, R>>
pub fn inverse(&self) -> Option<Multivector<P, Q, R>>
Compute multiplicative inverse if it exists
Sourcepub fn exp(&self) -> Multivector<P, Q, R>
pub fn exp(&self) -> Multivector<P, Q, R>
Exponential map for bivectors (creates rotors)
For a bivector B, exp(B) creates a rotor that performs rotation in the plane defined by B.
Sourcepub fn left_contraction(
&self,
other: &Multivector<P, Q, R>,
) -> Multivector<P, Q, R>
pub fn left_contraction( &self, other: &Multivector<P, Q, R>, ) -> Multivector<P, Q, R>
Left contraction: a ⌟ b
Generalized inner product where the grade of the result is |grade(b) - grade(a)|. The left operand’s grade is reduced.
Sourcepub fn right_contraction(
&self,
other: &Multivector<P, Q, R>,
) -> Multivector<P, Q, R>
pub fn right_contraction( &self, other: &Multivector<P, Q, R>, ) -> Multivector<P, Q, R>
Right contraction: a ⌞ b
Generalized inner product where the grade of the result is |grade(a) - grade(b)|. The right operand’s grade is reduced.
Sourcepub fn hodge_dual(&self) -> Multivector<P, Q, R>
pub fn hodge_dual(&self) -> Multivector<P, Q, R>
Hodge dual: ⋆a
Maps k-vectors to (n-k)-vectors in n-dimensional space. Essential for electromagnetic field theory and differential forms. In 3D: scalar -> pseudoscalar, vector -> bivector, bivector -> vector, pseudoscalar -> scalar
Trait Implementations§
Source§impl<const P: usize, const Q: usize, const R: usize> Add for &Multivector<P, Q, R>
impl<const P: usize, const Q: usize, const R: usize> Add for &Multivector<P, Q, R>
Source§type Output = Multivector<P, Q, R>
type Output = Multivector<P, Q, R>
+ operator.Source§fn add(self, rhs: &Multivector<P, Q, R>) -> Multivector<P, Q, R>
fn add(self, rhs: &Multivector<P, Q, R>) -> Multivector<P, Q, R>
+ operation. Read moreSource§impl<const P: usize, const Q: usize, const R: usize> Add for Multivector<P, Q, R>
impl<const P: usize, const Q: usize, const R: usize> Add for Multivector<P, Q, R>
Source§type Output = Multivector<P, Q, R>
type Output = Multivector<P, Q, R>
+ operator.Source§fn add(self, rhs: Multivector<P, Q, R>) -> Multivector<P, Q, R>
fn add(self, rhs: Multivector<P, Q, R>) -> Multivector<P, Q, R>
+ operation. Read moreSource§impl<const P: usize, const Q: usize, const R: usize> AdjointableOperator<Multivector<P, Q, R>> for MatrixOperator<P, Q, R>
impl<const P: usize, const Q: usize, const R: usize> AdjointableOperator<Multivector<P, Q, R>> for MatrixOperator<P, Q, R>
Source§type Adjoint = MatrixOperator<P, Q, R>
type Adjoint = MatrixOperator<P, Q, R>
Source§fn is_self_adjoint(&self) -> bool
fn is_self_adjoint(&self) -> bool
Source§impl<const P: usize, const Q: usize, const R: usize> BanachSpace<Multivector<P, Q, R>> for MultivectorHilbertSpace<P, Q, R>
impl<const P: usize, const Q: usize, const R: usize> BanachSpace<Multivector<P, Q, R>> for MultivectorHilbertSpace<P, Q, R>
Source§fn is_cauchy_sequence(
&self,
sequence: &[Multivector<P, Q, R>],
tolerance: f64,
) -> bool
fn is_cauchy_sequence( &self, sequence: &[Multivector<P, Q, R>], tolerance: f64, ) -> bool
Source§fn sequence_limit(
&self,
sequence: &[Multivector<P, Q, R>],
tolerance: f64,
) -> Result<Multivector<P, Q, R>>
fn sequence_limit( &self, sequence: &[Multivector<P, Q, R>], tolerance: f64, ) -> Result<Multivector<P, Q, R>>
Source§impl<const P: usize, const Q: usize, const R: usize> BoundedOperator<Multivector<P, Q, R>> for CompactMatrixOperator<P, Q, R>
impl<const P: usize, const Q: usize, const R: usize> BoundedOperator<Multivector<P, Q, R>> for CompactMatrixOperator<P, Q, R>
Source§fn operator_norm(&self) -> f64
fn operator_norm(&self) -> f64
Source§fn is_bounded_by(&self, bound: f64) -> bool
fn is_bounded_by(&self, bound: f64) -> bool
Source§impl<const P: usize, const Q: usize, const R: usize> BoundedOperator<Multivector<P, Q, R>> for FiniteRankOperator<P, Q, R>
impl<const P: usize, const Q: usize, const R: usize> BoundedOperator<Multivector<P, Q, R>> for FiniteRankOperator<P, Q, R>
Source§fn operator_norm(&self) -> f64
fn operator_norm(&self) -> f64
Source§fn is_bounded_by(&self, bound: f64) -> bool
fn is_bounded_by(&self, bound: f64) -> bool
Source§impl<const P: usize, const Q: usize, const R: usize> BoundedOperator<Multivector<P, Q, R>> for FredholmMatrixOperator<P, Q, R>
impl<const P: usize, const Q: usize, const R: usize> BoundedOperator<Multivector<P, Q, R>> for FredholmMatrixOperator<P, Q, R>
Source§fn operator_norm(&self) -> f64
fn operator_norm(&self) -> f64
Source§fn is_bounded_by(&self, bound: f64) -> bool
fn is_bounded_by(&self, bound: f64) -> bool
Source§impl<const P: usize, const Q: usize, const R: usize> BoundedOperator<Multivector<P, Q, R>> for IdentityOperator<Multivector<P, Q, R>>
impl<const P: usize, const Q: usize, const R: usize> BoundedOperator<Multivector<P, Q, R>> for IdentityOperator<Multivector<P, Q, R>>
Source§fn operator_norm(&self) -> f64
fn operator_norm(&self) -> f64
Source§fn is_bounded_by(&self, bound: f64) -> bool
fn is_bounded_by(&self, bound: f64) -> bool
Source§impl<const P: usize, const Q: usize, const R: usize> BoundedOperator<Multivector<P, Q, R>> for MatrixOperator<P, Q, R>
impl<const P: usize, const Q: usize, const R: usize> BoundedOperator<Multivector<P, Q, R>> for MatrixOperator<P, Q, R>
Source§fn operator_norm(&self) -> f64
fn operator_norm(&self) -> f64
Source§fn is_bounded_by(&self, bound: f64) -> bool
fn is_bounded_by(&self, bound: f64) -> bool
Source§impl<const P: usize, const Q: usize, const R: usize> BoundedOperator<Multivector<P, Q, R>> for ProjectionOperator<P, Q, R>
impl<const P: usize, const Q: usize, const R: usize> BoundedOperator<Multivector<P, Q, R>> for ProjectionOperator<P, Q, R>
Source§fn operator_norm(&self) -> f64
fn operator_norm(&self) -> f64
Source§fn is_bounded_by(&self, bound: f64) -> bool
fn is_bounded_by(&self, bound: f64) -> bool
Source§impl<const P: usize, const Q: usize, const R: usize> BoundedOperator<Multivector<P, Q, R>> for ScalingOperator<Multivector<P, Q, R>>
impl<const P: usize, const Q: usize, const R: usize> BoundedOperator<Multivector<P, Q, R>> for ScalingOperator<Multivector<P, Q, R>>
Source§fn operator_norm(&self) -> f64
fn operator_norm(&self) -> f64
Source§fn is_bounded_by(&self, bound: f64) -> bool
fn is_bounded_by(&self, bound: f64) -> bool
Source§impl<const P: usize, const Q: usize, const R: usize> BoundedOperator<Multivector<P, Q, R>> for ZeroOperator<Multivector<P, Q, R>>
impl<const P: usize, const Q: usize, const R: usize> BoundedOperator<Multivector<P, Q, R>> for ZeroOperator<Multivector<P, Q, R>>
Source§fn operator_norm(&self) -> f64
fn operator_norm(&self) -> f64
Source§fn is_bounded_by(&self, bound: f64) -> bool
fn is_bounded_by(&self, bound: f64) -> bool
Source§impl<const P: usize, const Q: usize, const R: usize> Clone for Multivector<P, Q, R>
impl<const P: usize, const Q: usize, const R: usize> Clone for Multivector<P, Q, R>
Source§fn clone(&self) -> Multivector<P, Q, R>
fn clone(&self) -> Multivector<P, Q, R>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<const P: usize, const Q: usize, const R: usize> CompactOperator<Multivector<P, Q, R>> for CompactMatrixOperator<P, Q, R>
impl<const P: usize, const Q: usize, const R: usize> CompactOperator<Multivector<P, Q, R>> for CompactMatrixOperator<P, Q, R>
Source§impl<const P: usize, const Q: usize, const R: usize> CompactOperator<Multivector<P, Q, R>> for FiniteRankOperator<P, Q, R>
impl<const P: usize, const Q: usize, const R: usize> CompactOperator<Multivector<P, Q, R>> for FiniteRankOperator<P, Q, R>
Source§impl<const P: usize, const Q: usize, const R: usize> FredholmOperator<Multivector<P, Q, R>> for FiniteRankOperator<P, Q, R>
impl<const P: usize, const Q: usize, const R: usize> FredholmOperator<Multivector<P, Q, R>> for FiniteRankOperator<P, Q, R>
Source§fn kernel_dimension(&self) -> usize
fn kernel_dimension(&self) -> usize
Source§fn cokernel_dimension(&self) -> usize
fn cokernel_dimension(&self) -> usize
Source§fn is_isomorphism(&self) -> bool
fn is_isomorphism(&self) -> bool
Source§impl<const P: usize, const Q: usize, const R: usize> FredholmOperator<Multivector<P, Q, R>> for FredholmMatrixOperator<P, Q, R>
impl<const P: usize, const Q: usize, const R: usize> FredholmOperator<Multivector<P, Q, R>> for FredholmMatrixOperator<P, Q, R>
Source§fn kernel_dimension(&self) -> usize
fn kernel_dimension(&self) -> usize
Source§fn cokernel_dimension(&self) -> usize
fn cokernel_dimension(&self) -> usize
Source§fn is_isomorphism(&self) -> bool
fn is_isomorphism(&self) -> bool
Source§impl<const P: usize, const Q: usize, const R: usize> HilbertSpace<Multivector<P, Q, R>> for MultivectorHilbertSpace<P, Q, R>
impl<const P: usize, const Q: usize, const R: usize> HilbertSpace<Multivector<P, Q, R>> for MultivectorHilbertSpace<P, Q, R>
Source§fn riesz_representative<F>(&self, functional: F) -> Result<Multivector<P, Q, R>>
fn riesz_representative<F>(&self, functional: F) -> Result<Multivector<P, Q, R>>
Source§fn orthogonal_complement_projection(&self, x: &V, subspace_basis: &[V]) -> V
fn orthogonal_complement_projection(&self, x: &V, subspace_basis: &[V]) -> V
Source§impl<const P: usize, const Q: usize, const R: usize> InnerProductSpace<Multivector<P, Q, R>> for MultivectorHilbertSpace<P, Q, R>
impl<const P: usize, const Q: usize, const R: usize> InnerProductSpace<Multivector<P, Q, R>> for MultivectorHilbertSpace<P, Q, R>
Source§fn inner_product(
&self,
x: &Multivector<P, Q, R>,
y: &Multivector<P, Q, R>,
) -> f64
fn inner_product( &self, x: &Multivector<P, Q, R>, y: &Multivector<P, Q, R>, ) -> f64
Source§fn project(
&self,
x: &Multivector<P, Q, R>,
y: &Multivector<P, Q, R>,
) -> Multivector<P, Q, R>
fn project( &self, x: &Multivector<P, Q, R>, y: &Multivector<P, Q, R>, ) -> Multivector<P, Q, R>
Source§fn gram_schmidt(
&self,
vectors: &[Multivector<P, Q, R>],
) -> Vec<Multivector<P, Q, R>>
fn gram_schmidt( &self, vectors: &[Multivector<P, Q, R>], ) -> Vec<Multivector<P, Q, R>>
Source§impl<const P: usize, const Q: usize, const R: usize> LinearOperator<Multivector<P, Q, R>> for CompactMatrixOperator<P, Q, R>
impl<const P: usize, const Q: usize, const R: usize> LinearOperator<Multivector<P, Q, R>> for CompactMatrixOperator<P, Q, R>
Source§fn apply(&self, x: &Multivector<P, Q, R>) -> Result<Multivector<P, Q, R>>
fn apply(&self, x: &Multivector<P, Q, R>) -> Result<Multivector<P, Q, R>>
Source§fn domain_dimension(&self) -> Option<usize>
fn domain_dimension(&self) -> Option<usize>
Source§fn codomain_dimension(&self) -> Option<usize>
fn codomain_dimension(&self) -> Option<usize>
Source§impl<const P: usize, const Q: usize, const R: usize> LinearOperator<Multivector<P, Q, R>> for FiniteRankOperator<P, Q, R>
impl<const P: usize, const Q: usize, const R: usize> LinearOperator<Multivector<P, Q, R>> for FiniteRankOperator<P, Q, R>
Source§fn apply(&self, x: &Multivector<P, Q, R>) -> Result<Multivector<P, Q, R>>
fn apply(&self, x: &Multivector<P, Q, R>) -> Result<Multivector<P, Q, R>>
Source§fn domain_dimension(&self) -> Option<usize>
fn domain_dimension(&self) -> Option<usize>
Source§fn codomain_dimension(&self) -> Option<usize>
fn codomain_dimension(&self) -> Option<usize>
Source§impl<const P: usize, const Q: usize, const R: usize> LinearOperator<Multivector<P, Q, R>> for FredholmMatrixOperator<P, Q, R>
impl<const P: usize, const Q: usize, const R: usize> LinearOperator<Multivector<P, Q, R>> for FredholmMatrixOperator<P, Q, R>
Source§fn apply(&self, x: &Multivector<P, Q, R>) -> Result<Multivector<P, Q, R>>
fn apply(&self, x: &Multivector<P, Q, R>) -> Result<Multivector<P, Q, R>>
Source§fn domain_dimension(&self) -> Option<usize>
fn domain_dimension(&self) -> Option<usize>
Source§fn codomain_dimension(&self) -> Option<usize>
fn codomain_dimension(&self) -> Option<usize>
Source§impl<const P: usize, const Q: usize, const R: usize> LinearOperator<Multivector<P, Q, R>> for IdentityOperator<Multivector<P, Q, R>>
impl<const P: usize, const Q: usize, const R: usize> LinearOperator<Multivector<P, Q, R>> for IdentityOperator<Multivector<P, Q, R>>
Source§fn apply(&self, x: &Multivector<P, Q, R>) -> Result<Multivector<P, Q, R>>
fn apply(&self, x: &Multivector<P, Q, R>) -> Result<Multivector<P, Q, R>>
Source§fn domain_dimension(&self) -> Option<usize>
fn domain_dimension(&self) -> Option<usize>
Source§fn codomain_dimension(&self) -> Option<usize>
fn codomain_dimension(&self) -> Option<usize>
Source§impl<const P: usize, const Q: usize, const R: usize> LinearOperator<Multivector<P, Q, R>> for MatrixOperator<P, Q, R>
impl<const P: usize, const Q: usize, const R: usize> LinearOperator<Multivector<P, Q, R>> for MatrixOperator<P, Q, R>
Source§fn apply(&self, x: &Multivector<P, Q, R>) -> Result<Multivector<P, Q, R>>
fn apply(&self, x: &Multivector<P, Q, R>) -> Result<Multivector<P, Q, R>>
Source§fn domain_dimension(&self) -> Option<usize>
fn domain_dimension(&self) -> Option<usize>
Source§fn codomain_dimension(&self) -> Option<usize>
fn codomain_dimension(&self) -> Option<usize>
Source§impl<const P: usize, const Q: usize, const R: usize> LinearOperator<Multivector<P, Q, R>> for ProjectionOperator<P, Q, R>
impl<const P: usize, const Q: usize, const R: usize> LinearOperator<Multivector<P, Q, R>> for ProjectionOperator<P, Q, R>
Source§fn apply(&self, x: &Multivector<P, Q, R>) -> Result<Multivector<P, Q, R>>
fn apply(&self, x: &Multivector<P, Q, R>) -> Result<Multivector<P, Q, R>>
Source§fn domain_dimension(&self) -> Option<usize>
fn domain_dimension(&self) -> Option<usize>
Source§fn codomain_dimension(&self) -> Option<usize>
fn codomain_dimension(&self) -> Option<usize>
Source§impl<const P: usize, const Q: usize, const R: usize> LinearOperator<Multivector<P, Q, R>> for ScalingOperator<Multivector<P, Q, R>>
impl<const P: usize, const Q: usize, const R: usize> LinearOperator<Multivector<P, Q, R>> for ScalingOperator<Multivector<P, Q, R>>
Source§fn apply(&self, x: &Multivector<P, Q, R>) -> Result<Multivector<P, Q, R>>
fn apply(&self, x: &Multivector<P, Q, R>) -> Result<Multivector<P, Q, R>>
Source§fn domain_dimension(&self) -> Option<usize>
fn domain_dimension(&self) -> Option<usize>
Source§fn codomain_dimension(&self) -> Option<usize>
fn codomain_dimension(&self) -> Option<usize>
Source§impl<const P: usize, const Q: usize, const R: usize> LinearOperator<Multivector<P, Q, R>> for ZeroOperator<Multivector<P, Q, R>>
impl<const P: usize, const Q: usize, const R: usize> LinearOperator<Multivector<P, Q, R>> for ZeroOperator<Multivector<P, Q, R>>
Source§fn apply(&self, _x: &Multivector<P, Q, R>) -> Result<Multivector<P, Q, R>>
fn apply(&self, _x: &Multivector<P, Q, R>) -> Result<Multivector<P, Q, R>>
Source§fn domain_dimension(&self) -> Option<usize>
fn domain_dimension(&self) -> Option<usize>
Source§fn codomain_dimension(&self) -> Option<usize>
fn codomain_dimension(&self) -> Option<usize>
Source§impl<const P: usize, const Q: usize, const R: usize> Mul<f64> for &Multivector<P, Q, R>
impl<const P: usize, const Q: usize, const R: usize> Mul<f64> for &Multivector<P, Q, R>
Source§type Output = Multivector<P, Q, R>
type Output = Multivector<P, Q, R>
* operator.Source§impl<const P: usize, const Q: usize, const R: usize> Mul<f64> for Multivector<P, Q, R>
impl<const P: usize, const Q: usize, const R: usize> Mul<f64> for Multivector<P, Q, R>
Source§type Output = Multivector<P, Q, R>
type Output = Multivector<P, Q, R>
* operator.Source§impl<const P: usize, const Q: usize, const R: usize> Neg for Multivector<P, Q, R>
impl<const P: usize, const Q: usize, const R: usize> Neg for Multivector<P, Q, R>
Source§type Output = Multivector<P, Q, R>
type Output = Multivector<P, Q, R>
- operator.Source§fn neg(self) -> Multivector<P, Q, R>
fn neg(self) -> Multivector<P, Q, R>
- operation. Read moreSource§impl<const P: usize, const Q: usize, const R: usize> NormedSpace<Multivector<P, Q, R>> for MultivectorHilbertSpace<P, Q, R>
impl<const P: usize, const Q: usize, const R: usize> NormedSpace<Multivector<P, Q, R>> for MultivectorHilbertSpace<P, Q, R>
Source§impl<const P: usize, const Q: usize, const R: usize> Sub for &Multivector<P, Q, R>
impl<const P: usize, const Q: usize, const R: usize> Sub for &Multivector<P, Q, R>
Source§type Output = Multivector<P, Q, R>
type Output = Multivector<P, Q, R>
- operator.Source§fn sub(self, rhs: &Multivector<P, Q, R>) -> Multivector<P, Q, R>
fn sub(self, rhs: &Multivector<P, Q, R>) -> Multivector<P, Q, R>
- operation. Read moreSource§impl<const P: usize, const Q: usize, const R: usize> Sub for Multivector<P, Q, R>
impl<const P: usize, const Q: usize, const R: usize> Sub for Multivector<P, Q, R>
Source§type Output = Multivector<P, Q, R>
type Output = Multivector<P, Q, R>
- operator.Source§fn sub(self, rhs: Multivector<P, Q, R>) -> Multivector<P, Q, R>
fn sub(self, rhs: Multivector<P, Q, R>) -> Multivector<P, Q, R>
- operation. Read more