Static Public Member Functions | List of all members
corbo::SylvesterDiscrete Class Reference

Methods for dealing with discrete-time Sylvester equations. More...

#include <sylvester_discrete.h>

Static Public Member Functions

static bool hasUniqueSolution (const Eigen::Ref< const Eigen::MatrixXd > &A, const Eigen::Ref< const Eigen::MatrixXd > &B)
 Determine if the Sylvester equation exhibits a unique solution. More...
 
static bool solve (const Eigen::Ref< const Eigen::MatrixXd > &A, const Eigen::Ref< const Eigen::MatrixXd > &B, const Eigen::Ref< const Eigen::MatrixXd > &C, Eigen::MatrixXd &X)
 Solve discrete-time Sylvester equation. More...
 

Detailed Description

Methods for dealing with discrete-time Sylvester equations.

The discrete-time Sylvester equation is given by

\[ A X B - X + C = 0 \]

A, B and C are not required to be square, but must be compatible to each other. In particular if size(C) = m x n, then size(A) = n x n and size(B) = m x m.

Remarks
If you want to deal with a Lyapunov equation $ A X A^T - X + Q = 0 $ you might want to refer to our specialized implementation in order to improve efficency.
See also
SylvesterDiscrete LyapunovContinuous LyapunovDiscrete
Author
Christoph Rösmann (chris.nosp@m.toph.nosp@m..roes.nosp@m.mann.nosp@m.@tu-d.nosp@m.ortm.nosp@m.und.d.nosp@m.e)
Todo:

Add support for the generalized Sylvester equations $ A X A^T - E X E^T + C = 0 $.

Allow the user to precompute the Schur decomposition for subsequent calls of solve() with varying $ C $.

Definition at line 56 of file sylvester_discrete.h.

Member Function Documentation

◆ hasUniqueSolution()

bool corbo::SylvesterDiscrete::hasUniqueSolution ( const Eigen::Ref< const Eigen::MatrixXd > &  A,
const Eigen::Ref< const Eigen::MatrixXd > &  B 
)
static

Determine if the Sylvester equation exhibits a unique solution.

The solution is unique if for Eigenvalues of A and B it is: $ \alpha_i \beta_j \neq 1, \forall i,j. $

Parameters
[in]AMatrix (might be non-square)
[in]BMatrix (might be non-square)
Returns
true if the solution is unique, false otherwise (also if A and B are not square)

Definition at line 95 of file sylvester_discrete.cpp.

◆ solve()

bool corbo::SylvesterDiscrete::solve ( const Eigen::Ref< const Eigen::MatrixXd > &  A,
const Eigen::Ref< const Eigen::MatrixXd > &  B,
const Eigen::Ref< const Eigen::MatrixXd > &  C,
Eigen::MatrixXd &  X 
)
static

Solve discrete-time Sylvester equation.

Solve $ A X B - X + C = 0 $ w.r.t. $ X $. A, B and C are not required to be square, but must be compatible to each other. In particular if size(C) = m x n, then size(A) = n x n and size(B) = m x m. The solution is unique if for Eigenvalues of A and B it is: $ \alpha_i \beta_j \neq 1, \forall i,j. $

The solution is obtained via Schur decomposition [1-3].

[1] A. Y. Barraud. "A numerical algorithm to solve AT XA − X = Q". IEEE Trans. Automat. Control, AC-22, pp. 883–885, 1977. [2] V. Simoncini. "Computational Methods for Linear Matrix Equations". SIAM Review 58 (3): 377-441, 2016. [3] G. Kitagawa. "An Algorithm for Solving the Matrix Equation X = F X F' + S". International Journal of Control. 25 (5): 745–753, 1977.

Parameters
[in]AMatrix (might be non-square)
[in]BMatrix (might be non-square)
[in]CMatrix (might be non-square)
[out]XSolution with same size as C (size(X) must not be preallocated a-priori)
Returns
true if a finite solution is found, false otherwise.

Definition at line 36 of file sylvester_discrete.cpp.


The documentation for this class was generated from the following files:


control_box_rst
Author(s): Christoph Rösmann
autogenerated on Mon Feb 28 2022 22:08:03