OMDc  1.0.0
created from c01aff8 on deploy-documentation
OMDc Namespace Reference

Optimal Mode Decomposition for control. More...

Classes

class  DataStore
 interface to internal representation of OMDc data More...
 
class  LineSearchFunctor
 Functor for linesearch along geodesic. More...
 

Enumerations

enum  ImplementationType { kDirect, kPrecondQR }
 defines how the implementation More...
 

Functions

template<ImplementationType T>
int compute (std::ostream &out, Eigen::Ref< Eigen::MatrixXd > L, Eigen::Ref< Eigen::MatrixXd > M, Eigen::Ref< Eigen::MatrixXd > P, const Eigen::Ref< const Eigen::MatrixXd > S, const Eigen::Ref< const Eigen::MatrixXd > U, const Eigen::Index r, const GrManifold::CGOptions< double > *opt=nullptr)
 template for the computation of OMDc The Optimal Mode Decomposition for control computes iteratively the solution to More...
 
template<>
int compute< kDirect > (std::ostream &out, Eigen::Ref< Eigen::MatrixXd > L, Eigen::Ref< Eigen::MatrixXd > M, Eigen::Ref< Eigen::MatrixXd > P, const Eigen::Ref< const Eigen::MatrixXd > S, const Eigen::Ref< const Eigen::MatrixXd > U, const Eigen::Index r, const GrManifold::CGOptions< double > *opt)
 computes OMDc for given data set More...
 
template<>
int compute< kPrecondQR > (std::ostream &out, Eigen::Ref< Eigen::MatrixXd > L, Eigen::Ref< Eigen::MatrixXd > M, Eigen::Ref< Eigen::MatrixXd > P, const Eigen::Ref< const Eigen::MatrixXd > S, const Eigen::Ref< const Eigen::MatrixXd > U, const Eigen::Index r, const GrManifold::CGOptions< double > *opt)
 computes OMDc for given data set More...
 

Detailed Description

Optimal Mode Decomposition for control.

The original identification problem is

\[ \min_{L,M,P} \Vert Y - LML^\top X - LPU \Vert_F^2 \qquad X = [s_0 \cdots s_{m-2}], \,\, Y = [s_1 \cdots s_{m-1}] \]

where the low-rank model

\[ L\in\mathbb{R}^{n\times r}, \,\, M\in\mathbb{R}^{r\times r} \,\, P\in\mathbb{R}^{r\times p} \]

shall approximate the given data set $S\in\mathbb{R}^{n\times m}$ for inputs $U\in\mathbb{R}^{p\times (m-1)} $. The original problem can be transformed into

\[ \min_L \Vert (I-LL^\top)Y +LL^\top \hat{Y} \big( I - \hat{X}^\top L ( L^\top \hat{X}\hat{X}^\top L )^{-1} L\top \hat{X} \big) \Vert_F^2 \quad \mathrm{s.t.} \,\,L^\top L = I \]

where

\[ \hat{X} = X \big(I - U^\top (U U^\top)^{-1} U\big) \qquad \hat{Y} = Y \big(I - U^\top (U U^\top)^{-1} U\big) \]

Enumeration Type Documentation

◆ ImplementationType

defines how the implementation

Enumerator
kDirect 

direct computation, no pre-conditioning

kPrecondQR 

pre-condition with QR decomposition

Function Documentation

◆ compute()

template<ImplementationType T>
int OMDc::compute ( std::ostream &  out,
Eigen::Ref< Eigen::MatrixXd >  L,
Eigen::Ref< Eigen::MatrixXd >  M,
Eigen::Ref< Eigen::MatrixXd >  P,
const Eigen::Ref< const Eigen::MatrixXd >  S,
const Eigen::Ref< const Eigen::MatrixXd >  U,
const Eigen::Index  r,
const GrManifold::CGOptions< double > *  opt = nullptr 
)

template for the computation of OMDc The Optimal Mode Decomposition for control computes iteratively the solution to

\[ \begin{aligned} \min_{L,M,P} & \Vert Y - L M L^\top X - LPU \Vert_F \\ \mathrm{s.t.}\,L^\top L = I, \,&\, X = [s_0 \cdots s_{m-2}], Y = [s_1 \cdots s_{m-1}] \end{aligned} \]

on the Grassmann manifold

Template Parameters
Tdeclares implementation type
Warning
Find the explicit specializations for the implementation types below. This template does not have a generic implementation.
Parameters
outreference to output stream
Lresulting orthonormal bases
Mresulting system matrix
Presulting input matrix
Ssnapshot data
Uinput data
rsystem dimension
opt(optional) set of options
Returns
0 on success

◆ compute< kDirect >()

template<>
int OMDc::compute< kDirect > ( std::ostream &  out,
Eigen::Ref< Eigen::MatrixXd >  L,
Eigen::Ref< Eigen::MatrixXd >  M,
Eigen::Ref< Eigen::MatrixXd >  P,
const Eigen::Ref< const Eigen::MatrixXd >  S,
const Eigen::Ref< const Eigen::MatrixXd >  U,
const Eigen::Index  r,
const GrManifold::CGOptions< double > *  opt 
)

computes OMDc for given data set

Note
direct computation on the given data
Parameters
outreference to output stream
Lresulting orthonormal bases
Mresulting system matrix
Presulting input matrix
Ssnapshot data
Uinput data
rsystem dimension
optnecessary set of options
Returns
0 on success

◆ compute< kPrecondQR >()

template<>
int OMDc::compute< kPrecondQR > ( std::ostream &  out,
Eigen::Ref< Eigen::MatrixXd >  L,
Eigen::Ref< Eigen::MatrixXd >  M,
Eigen::Ref< Eigen::MatrixXd >  P,
const Eigen::Ref< const Eigen::MatrixXd >  S,
const Eigen::Ref< const Eigen::MatrixXd >  U,
const Eigen::Index  r,
const GrManifold::CGOptions< double > *  opt 
)

computes OMDc for given data set

Note
decomposes data set S by QR (usually more efficient), then calls compute<kDirect>()
Parameters
outreference to output stream
Lresulting orthonormal bases
Mresulting system matrix
Presulting input matrix
Ssnapshot data
Uinput data
rsystem dimension
opt(optional) set of options
Returns
0 on success
{}