pub struct SvdLinearSolver<ScalarType>where
ScalarType: Scalar + ComplexField,{ /* private fields */ }Expand description
A solver for the linear subproblem in variable projection that uses singular value decomposition to calculate the linear solution. It is well equipped to deal with numerically difficult problems that might become rank deficient during the optimization. The high numerical stability means that it will suffer in performance compared to other solvers in this crate, but it is a good default choice and varpro with SVD will outperform pure nonlinear optimizers any day of the week.
§Details
The solver uses the singular value decomposition with a Kaufmann approximation for the derivatives as described here.
Trait Implementations§
Source§impl<ScalarType> Clone for SvdLinearSolver<ScalarType>
impl<ScalarType> Clone for SvdLinearSolver<ScalarType>
Source§fn clone(&self) -> SvdLinearSolver<ScalarType>
fn clone(&self) -> SvdLinearSolver<ScalarType>
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl<ScalarType> Debug for SvdLinearSolver<ScalarType>
impl<ScalarType> Debug for SvdLinearSolver<ScalarType>
Source§impl<ScalarType> LinearSolver for SvdLinearSolver<ScalarType>where
ScalarType: Scalar + ComplexField,
impl<ScalarType> LinearSolver for SvdLinearSolver<ScalarType>where
ScalarType: Scalar + ComplexField,
Source§type ScalarType = ScalarType
type ScalarType = ScalarType
numeric type used in this solver
Source§fn linear_coefficients_matrix(self) -> DMatrix<Self::ScalarType>
fn linear_coefficients_matrix(self) -> DMatrix<Self::ScalarType>
get the linear coefficients in matrix form. For single RHS
this is a matrix with just one column.
Auto Trait Implementations§
impl<ScalarType> Freeze for SvdLinearSolver<ScalarType>
impl<ScalarType> RefUnwindSafe for SvdLinearSolver<ScalarType>where
Matrix<ScalarType, Dyn, Dyn, VecStorage<ScalarType, Dyn, Dyn>>: RefUnwindSafe,
SVD<ScalarType, Dyn, Dyn>: RefUnwindSafe,
impl<ScalarType> Send for SvdLinearSolver<ScalarType>
impl<ScalarType> Sync for SvdLinearSolver<ScalarType>
impl<ScalarType> Unpin for SvdLinearSolver<ScalarType>
impl<ScalarType> UnsafeUnpin for SvdLinearSolver<ScalarType>where
Matrix<ScalarType, Dyn, Dyn, VecStorage<ScalarType, Dyn, Dyn>>: UnsafeUnpin,
SVD<ScalarType, Dyn, Dyn>: UnsafeUnpin,
impl<ScalarType> UnwindSafe for SvdLinearSolver<ScalarType>where
Matrix<ScalarType, Dyn, Dyn, VecStorage<ScalarType, Dyn, Dyn>>: UnwindSafe,
SVD<ScalarType, Dyn, Dyn>: UnwindSafe,
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
The inverse inclusion map: attempts to construct
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
Checks if
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
Use with care! Same as
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self to the equivalent element of its superset.