bayes_estimate 0.20.0

Bayesian estimation library. Kalman filter, Informatiom, Square root, Information root, Unscented and UD filters. Numerically and dimensionally generic implementation using nalgebra. Provides fast numerically stable estimation solutions.
Documentation
use nalgebra::constraint::{DimEq, ShapeConstraint};
use nalgebra::storage::{Storage, StorageMut};
use nalgebra::{Dim, Matrix, RealField, SquareMatrix, Vector};

/// Computes the quadratic form `mat = alpha * lhs * mid * lhs.transpose() + beta * mat`.
///
/// 'mid' is a diagonal matrix represented by a Vector.
pub fn quadform_tr<N: Copy + RealField, D1, S, R3, C3, S3, D4, S4>(
    mat: &mut SquareMatrix<N, D1, S>,
    alpha: N,
    lhs: &Matrix<N, R3, C3, S3>,
    mid: &Vector<N, D4, S4>,
    beta: N,
) where
    D1: Dim,
    S: StorageMut<N, D1, D1>,
    R3: Dim,
    C3: Dim,
    D4: Dim,
    S3: Storage<N, R3, C3>,
    S4: Storage<N, D4>,
    ShapeConstraint: DimEq<D1, R3> + DimEq<C3, D4>,
{
    mat.ger(alpha * mid[0], &lhs.column(0), &lhs.column(0), beta);

    for j in 1..mid.nrows() {
        mat.ger(alpha * mid[j], &lhs.column(j), &lhs.column(j), N::one());
    }
}

/// Computes the quadratic form `mat = alpha * lhs * lhs.transpose() + beta * mat`.
///
/// there is no 'mid'.
pub fn quadform_tr_x<N: Copy + RealField, D1, S, R3, C3, S3>(
    mat: &mut SquareMatrix<N, D1, S>,
    alpha: N,
    lhs: &Matrix<N, R3, C3, S3>,
    beta: N,
) where
    D1: Dim,
    S: StorageMut<N, D1, D1>,
    R3: Dim,
    C3: Dim,
    S3: Storage<N, R3, C3>,
    ShapeConstraint: DimEq<D1, R3>,
{
    mat.ger(alpha, &lhs.column(0), &lhs.column(0), beta);

    for j in 1..lhs.ncols() {
        mat.ger(alpha, &lhs.column(j), &lhs.column(j), N::one());
    }
}