# [−][src]Struct na::linalg::SVD

Singular Value Decomposition of a general matrix.

## Fields

`u: Option<Matrix<N, R, <R as DimMin<C>>::Output, <DefaultAllocator as Allocator<N, R, <R as DimMin<C>>::Output>>::Buffer>>`

The left-singular vectors `U`

of this SVD.

`v_t: Option<Matrix<N, <R as DimMin<C>>::Output, C, <DefaultAllocator as Allocator<N, <R as DimMin<C>>::Output, C>>::Buffer>>`

The right-singular vectors `V^t`

of this SVD.

`singular_values: Matrix<<N as ComplexField>::RealField, <R as DimMin<C>>::Output, U1, <DefaultAllocator as Allocator<<N as ComplexField>::RealField, <R as DimMin<C>>::Output, U1>>::Buffer>`

The singular values of this SVD.

## Methods

`impl<N, R, C> SVD<N, R, C> where`

C: Dim,

N: ComplexField,

R: DimMin<C>,

<R as DimMin<C>>::Output: DimSub<U1>,

DefaultAllocator: Allocator<N, R, C>,

DefaultAllocator: Allocator<N, C, U1>,

DefaultAllocator: Allocator<N, R, U1>,

DefaultAllocator: Allocator<N, <<R as DimMin<C>>::Output as DimSub<U1>>::Output, U1>,

DefaultAllocator: Allocator<N, <R as DimMin<C>>::Output, C>,

DefaultAllocator: Allocator<N, R, <R as DimMin<C>>::Output>,

DefaultAllocator: Allocator<N, <R as DimMin<C>>::Output, U1>,

DefaultAllocator: Allocator<<N as ComplexField>::RealField, <R as DimMin<C>>::Output, U1>,

DefaultAllocator: Allocator<<N as ComplexField>::RealField, <<R as DimMin<C>>::Output as DimSub<U1>>::Output, U1>,

[src]

C: Dim,

N: ComplexField,

R: DimMin<C>,

<R as DimMin<C>>::Output: DimSub<U1>,

DefaultAllocator: Allocator<N, R, C>,

DefaultAllocator: Allocator<N, C, U1>,

DefaultAllocator: Allocator<N, R, U1>,

DefaultAllocator: Allocator<N, <<R as DimMin<C>>::Output as DimSub<U1>>::Output, U1>,

DefaultAllocator: Allocator<N, <R as DimMin<C>>::Output, C>,

DefaultAllocator: Allocator<N, R, <R as DimMin<C>>::Output>,

DefaultAllocator: Allocator<N, <R as DimMin<C>>::Output, U1>,

DefaultAllocator: Allocator<<N as ComplexField>::RealField, <R as DimMin<C>>::Output, U1>,

DefaultAllocator: Allocator<<N as ComplexField>::RealField, <<R as DimMin<C>>::Output as DimSub<U1>>::Output, U1>,

`pub fn new(`

matrix: Matrix<N, R, C, <DefaultAllocator as Allocator<N, R, C>>::Buffer>,

compute_u: bool,

compute_v: bool

) -> SVD<N, R, C>

[src]

matrix: Matrix<N, R, C, <DefaultAllocator as Allocator<N, R, C>>::Buffer>,

compute_u: bool,

compute_v: bool

) -> SVD<N, R, C>

Computes the Singular Value Decomposition of `matrix`

using implicit shift.

`pub fn try_new(`

matrix: Matrix<N, R, C, <DefaultAllocator as Allocator<N, R, C>>::Buffer>,

compute_u: bool,

compute_v: bool,

eps: <N as ComplexField>::RealField,

max_niter: usize

) -> Option<SVD<N, R, C>>

[src]

matrix: Matrix<N, R, C, <DefaultAllocator as Allocator<N, R, C>>::Buffer>,

compute_u: bool,

compute_v: bool,

eps: <N as ComplexField>::RealField,

max_niter: usize

) -> Option<SVD<N, R, C>>

Attempts to compute the Singular Value Decomposition of `matrix`

using implicit shift.

# Arguments

`compute_u`

− set this to`true`

to enable the computation of left-singular vectors.`compute_v`

− set this to`true`

to enable the computation of left-singular vectors.`eps`

− tolerance used to determine when a value converged to 0.`max_niter`

− maximum total number of iterations performed by the algorithm. If this number of iteration is exceeded,`None`

is returned. If`niter == 0`

, then the algorithm continues indefinitely until convergence.

`pub fn rank(&self, eps: <N as ComplexField>::RealField) -> usize`

[src]

Computes the rank of the decomposed matrix, i.e., the number of singular values greater
than `eps`

.

`pub fn recompose(`

self

) -> Result<Matrix<N, R, C, <DefaultAllocator as Allocator<N, R, C>>::Buffer>, &'static str>

[src]

self

) -> Result<Matrix<N, R, C, <DefaultAllocator as Allocator<N, R, C>>::Buffer>, &'static str>

Rebuild the original matrix.

This is useful if some of the singular values have been manually modified.
Returns `Err`

if the right- and left- singular vectors have not been
computed at construction-time.

`pub fn pseudo_inverse(`

self,

eps: <N as ComplexField>::RealField

) -> Result<Matrix<N, C, R, <DefaultAllocator as Allocator<N, C, R>>::Buffer>, &'static str> where

DefaultAllocator: Allocator<N, C, R>,

[src]

self,

eps: <N as ComplexField>::RealField

) -> Result<Matrix<N, C, R, <DefaultAllocator as Allocator<N, C, R>>::Buffer>, &'static str> where

DefaultAllocator: Allocator<N, C, R>,

Computes the pseudo-inverse of the decomposed matrix.

Any singular value smaller than `eps`

is assumed to be zero.
Returns `Err`

if the right- and left- singular vectors have not
been computed at construction-time.

`pub fn solve<R2, C2, S2>(`

&self,

b: &Matrix<N, R2, C2, S2>,

eps: <N as ComplexField>::RealField

) -> Result<Matrix<N, C, C2, <DefaultAllocator as Allocator<N, C, C2>>::Buffer>, &'static str> where

C2: Dim,

R2: Dim,

S2: Storage<N, R2, C2>,

DefaultAllocator: Allocator<N, C, C2>,

DefaultAllocator: Allocator<N, <R as DimMin<C>>::Output, C2>,

ShapeConstraint: SameNumberOfRows<R, R2>,

[src]

&self,

b: &Matrix<N, R2, C2, S2>,

eps: <N as ComplexField>::RealField

) -> Result<Matrix<N, C, C2, <DefaultAllocator as Allocator<N, C, C2>>::Buffer>, &'static str> where

C2: Dim,

R2: Dim,

S2: Storage<N, R2, C2>,

DefaultAllocator: Allocator<N, C, C2>,

DefaultAllocator: Allocator<N, <R as DimMin<C>>::Output, C2>,

ShapeConstraint: SameNumberOfRows<R, R2>,

Solves the system `self * x = b`

where `self`

is the decomposed matrix and `x`

the unknown.

Any singular value smaller than `eps`

is assumed to be zero.
Returns `Err`

if the singular vectors `U`

and `V`

have not been computed.

## Trait Implementations

`impl<N, R, C> Copy for SVD<N, R, C> where`

C: Dim,

N: ComplexField,

R: DimMin<C>,

DefaultAllocator: Allocator<N, <R as DimMin<C>>::Output, C>,

DefaultAllocator: Allocator<N, R, <R as DimMin<C>>::Output>,

DefaultAllocator: Allocator<<N as ComplexField>::RealField, <R as DimMin<C>>::Output, U1>,

Matrix<N, R, <R as DimMin<C>>::Output, <DefaultAllocator as Allocator<N, R, <R as DimMin<C>>::Output>>::Buffer>: Copy,

Matrix<N, <R as DimMin<C>>::Output, C, <DefaultAllocator as Allocator<N, <R as DimMin<C>>::Output, C>>::Buffer>: Copy,

Matrix<<N as ComplexField>::RealField, <R as DimMin<C>>::Output, U1, <DefaultAllocator as Allocator<<N as ComplexField>::RealField, <R as DimMin<C>>::Output, U1>>::Buffer>: Copy,

[src]

C: Dim,

N: ComplexField,

R: DimMin<C>,

DefaultAllocator: Allocator<N, <R as DimMin<C>>::Output, C>,

DefaultAllocator: Allocator<N, R, <R as DimMin<C>>::Output>,

DefaultAllocator: Allocator<<N as ComplexField>::RealField, <R as DimMin<C>>::Output, U1>,

Matrix<N, R, <R as DimMin<C>>::Output, <DefaultAllocator as Allocator<N, R, <R as DimMin<C>>::Output>>::Buffer>: Copy,

Matrix<N, <R as DimMin<C>>::Output, C, <DefaultAllocator as Allocator<N, <R as DimMin<C>>::Output, C>>::Buffer>: Copy,

Matrix<<N as ComplexField>::RealField, <R as DimMin<C>>::Output, U1, <DefaultAllocator as Allocator<<N as ComplexField>::RealField, <R as DimMin<C>>::Output, U1>>::Buffer>: Copy,

`impl<N, R, C> Clone for SVD<N, R, C> where`

C: Dim + Clone,

N: Clone + ComplexField,

R: DimMin<C> + Clone,

DefaultAllocator: Allocator<N, <R as DimMin<C>>::Output, C>,

DefaultAllocator: Allocator<N, R, <R as DimMin<C>>::Output>,

DefaultAllocator: Allocator<<N as ComplexField>::RealField, <R as DimMin<C>>::Output, U1>,

<N as ComplexField>::RealField: Clone,

[src]

C: Dim + Clone,

N: Clone + ComplexField,

R: DimMin<C> + Clone,

DefaultAllocator: Allocator<N, <R as DimMin<C>>::Output, C>,

DefaultAllocator: Allocator<N, R, <R as DimMin<C>>::Output>,

DefaultAllocator: Allocator<<N as ComplexField>::RealField, <R as DimMin<C>>::Output, U1>,

<N as ComplexField>::RealField: Clone,

`fn clone(&self) -> SVD<N, R, C>`

[src]

`default fn clone_from(&mut self, source: &Self)`

1.0.0[src]

Performs copy-assignment from `source`

. Read more

`impl<N, R, C> Debug for SVD<N, R, C> where`

C: Dim + Debug,

N: Debug + ComplexField,

R: DimMin<C> + Debug,

DefaultAllocator: Allocator<N, <R as DimMin<C>>::Output, C>,

DefaultAllocator: Allocator<N, R, <R as DimMin<C>>::Output>,

DefaultAllocator: Allocator<<N as ComplexField>::RealField, <R as DimMin<C>>::Output, U1>,

<N as ComplexField>::RealField: Debug,

[src]

C: Dim + Debug,

N: Debug + ComplexField,

R: DimMin<C> + Debug,

DefaultAllocator: Allocator<N, <R as DimMin<C>>::Output, C>,

DefaultAllocator: Allocator<N, R, <R as DimMin<C>>::Output>,

DefaultAllocator: Allocator<<N as ComplexField>::RealField, <R as DimMin<C>>::Output, U1>,

<N as ComplexField>::RealField: Debug,

## Auto Trait Implementations

## Blanket Implementations

`impl<V> IntoVec for V`

[src]

`impl<V> IntoPnt for V`

[src]

`impl<T> ToOwned for T where`

T: Clone,

[src]

T: Clone,

`impl<T> From for T`

[src]

`impl<T, U> Into for T where`

U: From<T>,

[src]

U: From<T>,

`impl<T, U> TryFrom for T where`

U: Into<T>,

[src]

U: Into<T>,

`type Error = Infallible`

The type returned in the event of a conversion error.

`fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>`

[src]

`impl<T> Borrow for T where`

T: ?Sized,

[src]

T: ?Sized,

`impl<T> Any for T where`

T: 'static + ?Sized,

[src]

T: 'static + ?Sized,

`impl<T> BorrowMut for T where`

T: ?Sized,

[src]

T: ?Sized,

`fn borrow_mut(&mut self) -> &mut T`

[src]

`impl<T, U> TryInto for T where`

U: TryFrom<T>,

[src]

U: TryFrom<T>,

`type Error = <U as TryFrom<T>>::Error`

The type returned in the event of a conversion error.

`fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>`

[src]

`impl<T> Same for T`

`type Output = T`

Should always be `Self`

`impl<SS, SP> SupersetOf for SP where`

SS: SubsetOf<SP>,

[src]

SS: SubsetOf<SP>,