pub struct MultivectorHilbertSpace<const P: usize, const Q: usize, const R: usize> { /* private fields */ }Expand description
A Hilbert space of multivector elements.
This represents the finite-dimensional Hilbert space Cl(P,Q,R) with the standard inner product inherited from the coefficient representation.
§Type Parameters
P- Number of positive signature basis vectorsQ- Number of negative signature basis vectorsR- Number of zero signature basis vectors
§Mathematical Background
The Clifford algebra Cl(P,Q,R) is a 2^(P+Q+R)-dimensional real vector space. We equip it with the standard L² inner product on the coefficients:
⟨x, y⟩ = Σᵢ xᵢ yᵢ
This makes Cl(P,Q,R) into a finite-dimensional Hilbert space.
Implementations§
Source§impl<const P: usize, const Q: usize, const R: usize> MultivectorHilbertSpace<P, Q, R>
impl<const P: usize, const Q: usize, const R: usize> MultivectorHilbertSpace<P, Q, R>
Sourcepub fn algebra_dimension(&self) -> usize
pub fn algebra_dimension(&self) -> usize
Get the dimension of the algebra.
Sourcepub fn from_coefficients(
&self,
coefficients: &[f64],
) -> Result<Multivector<P, Q, R>>
pub fn from_coefficients( &self, coefficients: &[f64], ) -> Result<Multivector<P, Q, R>>
Create a multivector from coefficients.
Sourcepub fn to_coefficients(&self, mv: &Multivector<P, Q, R>) -> Vec<f64>
pub fn to_coefficients(&self, mv: &Multivector<P, Q, R>) -> Vec<f64>
Get the coefficients of a multivector.
Sourcepub fn basis_vector(&self, index: usize) -> Result<Multivector<P, Q, R>>
pub fn basis_vector(&self, index: usize) -> Result<Multivector<P, Q, R>>
Create a basis vector (unit multivector in direction i).
Sourcepub fn basis(&self) -> Vec<Multivector<P, Q, R>>
pub fn basis(&self) -> Vec<Multivector<P, Q, R>>
Get all basis vectors.
Trait Implementations§
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
Check if a sequence appears to be Cauchy. Read more
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>>
Compute the limit of a Cauchy sequence if it exists.
Source§impl<const P: usize, const Q: usize, const R: usize> Clone for MultivectorHilbertSpace<P, Q, R>
impl<const P: usize, const Q: usize, const R: usize> Clone for MultivectorHilbertSpace<P, Q, R>
Source§fn clone(&self) -> MultivectorHilbertSpace<P, Q, R>
fn clone(&self) -> MultivectorHilbertSpace<P, Q, R>
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl<const P: usize, const Q: usize, const R: usize> Debug for MultivectorHilbertSpace<P, Q, R>
impl<const P: usize, const Q: usize, const R: usize> Debug for MultivectorHilbertSpace<P, Q, R>
Source§impl<const P: usize, const Q: usize, const R: usize> Default for MultivectorHilbertSpace<P, Q, R>
impl<const P: usize, const Q: usize, const R: usize> Default for MultivectorHilbertSpace<P, Q, R>
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>>
Apply the Riesz representation theorem. Read more
Source§fn orthogonal_complement_projection(&self, x: &V, subspace_basis: &[V]) -> V
fn orthogonal_complement_projection(&self, x: &V, subspace_basis: &[V]) -> V
Compute the orthogonal complement projection. Read more
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
Compute the inner product of two vectors.
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>
Project x onto y. Read more
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>>
Gram-Schmidt orthogonalization of a set of vectors.
Source§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> VectorSpace<Multivector<P, Q, R>> for MultivectorHilbertSpace<P, Q, R>
impl<const P: usize, const Q: usize, const R: usize> VectorSpace<Multivector<P, Q, R>> for MultivectorHilbertSpace<P, Q, R>
Source§fn add(
&self,
x: &Multivector<P, Q, R>,
y: &Multivector<P, Q, R>,
) -> Multivector<P, Q, R>
fn add( &self, x: &Multivector<P, Q, R>, y: &Multivector<P, Q, R>, ) -> Multivector<P, Q, R>
Add two vectors.
Source§fn sub(
&self,
x: &Multivector<P, Q, R>,
y: &Multivector<P, Q, R>,
) -> Multivector<P, Q, R>
fn sub( &self, x: &Multivector<P, Q, R>, y: &Multivector<P, Q, R>, ) -> Multivector<P, Q, R>
Subtract two vectors.
Source§fn scale(&self, scalar: f64, x: &Multivector<P, Q, R>) -> Multivector<P, Q, R>
fn scale(&self, scalar: f64, x: &Multivector<P, Q, R>) -> Multivector<P, Q, R>
Multiply a vector by a scalar.
Source§fn zero(&self) -> Multivector<P, Q, R>
fn zero(&self) -> Multivector<P, Q, R>
Return the zero vector.
Auto Trait Implementations§
impl<const P: usize, const Q: usize, const R: usize> Freeze for MultivectorHilbertSpace<P, Q, R>
impl<const P: usize, const Q: usize, const R: usize> RefUnwindSafe for MultivectorHilbertSpace<P, Q, R>
impl<const P: usize, const Q: usize, const R: usize> Send for MultivectorHilbertSpace<P, Q, R>
impl<const P: usize, const Q: usize, const R: usize> Sync for MultivectorHilbertSpace<P, Q, R>
impl<const P: usize, const Q: usize, const R: usize> Unpin for MultivectorHilbertSpace<P, Q, R>
impl<const P: usize, const Q: usize, const R: usize> UnwindSafe for MultivectorHilbertSpace<P, Q, R>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more