Skip to main content

SecondOrderOptimizationIncremental

Trait SecondOrderOptimizationIncremental 

Source
pub trait SecondOrderOptimizationIncremental<F, J, H, X> {
    // Required method
    fn minimize_incremental(
        &self,
        function: impl FnMut(&X) -> Result<F, String>,
        jacobian: impl FnMut(&X) -> Result<J, String>,
        hessian: impl FnMut(&X) -> Result<H, String>,
        update: impl FnMut(&X, &Vector, Scalar, bool) -> Result<(), String>,
        initial_guess: X,
        equality_constraint: EqualityConstraint,
        sparse: Option<SparseSolver>,
    ) -> Result<X, OptimizationError>;
}
Expand description

Second-order optimization algorithms that hand out each increment before applying it.

The counterpart of FirstOrderRootFindingIncremental for problems with an energy to descend, and the increment is lent on the same terms.

What the line search measures is the energy of the whole state, eliminated variables included. Each trial is offered through the same update, so the eliminated variables are already standing where the trial puts them by the time the energy there is asked for.

Required Methods§

Source

fn minimize_incremental( &self, function: impl FnMut(&X) -> Result<F, String>, jacobian: impl FnMut(&X) -> Result<J, String>, hessian: impl FnMut(&X) -> Result<H, String>, update: impl FnMut(&X, &Vector, Scalar, bool) -> Result<(), String>, initial_guess: X, equality_constraint: EqualityConstraint, sparse: Option<SparseSolver>, ) -> Result<X, OptimizationError>

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§

Source§

impl<F, J, H, X, E> SecondOrderOptimizationIncremental<F, J, H, X> for NewtonRaphson
where F: Erase<Erased = Scalar> + Tensor, <J as Tensor>::Unit: UnitMul<<X as Tensor>::Unit>, <<J as Tensor>::Unit as UnitMul<<X as Tensor>::Unit>>::Output: UnitSum, <<<J as Tensor>::Unit as UnitMul<<X as Tensor>::Unit>>::Output as UnitSum>::Output: Is<<F as Tensor>::Unit>, H: Hessian, J: Jacobian + Erase<Erased = E>, for<'a> &'a J: Div<H, Output = X>, X: Erase<Erased = E> + Solution, E: Tensor, <X as Tensor>::Unit: UnitDiv<<X as Tensor>::Unit, Output = Dimensionless>, for<'a> &'a X: Mul<Quantity<Dimensionless>, Output = X> + Mul<Scalar, Output = X>, for<'a> &'a Matrix: Mul<&'a X, Output = Vector>,