algebraic_riccati_discrete.h
Go to the documentation of this file.
1 /*********************************************************************
2  *
3  * Software License Agreement
4  *
5  * Copyright (c) 2020,
6  * TU Dortmund - Institute of Control Theory and Systems Engineering.
7  * All rights reserved.
8  *
9  * This program is free software: you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation, either version 3 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program. If not, see <https://www.gnu.org/licenses/>.
21  *
22  * Authors: Christoph Rösmann
23  *********************************************************************/
24 
25 #ifndef SRC_NUMERICS_INCLUDE_CORBO_NUMERICS_ALGEBRAIC_RICCATI_DISCRETE_H_
26 #define SRC_NUMERICS_INCLUDE_CORBO_NUMERICS_ALGEBRAIC_RICCATI_DISCRETE_H_
27 
28 #include <corbo-core/types.h>
29 
30 #include <Eigen/Eigenvalues>
31 
32 namespace corbo {
33 
58 class AlgebraicRiccatiDiscrete
59 {
60  public:
86  const Eigen::Ref<const Eigen::MatrixXd>& Q, const Eigen::Ref<const Eigen::MatrixXd>& R, Eigen::MatrixXd& X,
87  Eigen::MatrixXd* G = nullptr);
88 
104 
105  protected:
129  static bool solveRiccatiHamiltonianSchur(const Eigen::MatrixXd& H, Eigen::MatrixXd& X);
130 
131  // Predicate for Schur block ordering (see solveRiccatiHamiltonianSchur())
132  static bool isInsideUnitCircle(const Eigen::Ref<const Eigen::MatrixXd>& block) { return std::abs(block.eigenvalues()[0]) < 1; }
133 };
134 
135 } // namespace corbo
136 
137 #endif // SRC_NUMERICS_INCLUDE_CORBO_NUMERICS_ALGEBRAIC_RICCATI_DISCRETE_H_
corbo
Definition: communication/include/corbo-communication/utilities.h:37
corbo::AlgebraicRiccatiDiscrete::isClosedLoopStable
static bool isClosedLoopStable(const Eigen::Ref< const Eigen::MatrixXd > &A, const Eigen::Ref< const Eigen::MatrixXd > &B, const Eigen::Ref< const Eigen::MatrixXd > &G)
Determine if the closed-loop system is stable.
Definition: algebraic_riccati_discrete.cpp:124
X
#define X
Definition: icosphere.cpp:20
abs
EIGEN_DEVICE_FUNC const EIGEN_STRONG_INLINE AbsReturnType abs() const
Definition: ArrayCwiseUnaryOps.h:43
B
MatrixType B(b, *n, *nrhs, *ldb)
corbo::AlgebraicRiccatiDiscrete::solve
static bool solve(const Eigen::Ref< const Eigen::MatrixXd > &A, const Eigen::Ref< const Eigen::MatrixXd > &B, const Eigen::Ref< const Eigen::MatrixXd > &Q, const Eigen::Ref< const Eigen::MatrixXd > &R, Eigen::MatrixXd &X, Eigen::MatrixXd *G=nullptr)
Solve discrete-time algebraic Riccati equation.
Definition: algebraic_riccati_discrete.cpp:62
block
EIGEN_DOC_BLOCK_ADDONS_NOT_INNER_PANEL EIGEN_DEVICE_FUNC BlockXpr block(Index startRow, Index startCol, Index blockRows, Index blockCols)
This is the const version of block(Index,Index,Index,Index). *‍/.
Definition: BlockMethods.h:64
Eigen::Ref
A matrix or vector expression mapping an existing expression.
Definition: Ref.h:192
types.h
A
MatrixType A(a, *n, *n, *lda)
corbo::AlgebraicRiccatiDiscrete::solveRiccatiHamiltonianSchur
static bool solveRiccatiHamiltonianSchur(const Eigen::MatrixXd &H, Eigen::MatrixXd &X)
Solve Hamiltonian via Schur method.
Definition: algebraic_riccati_discrete.cpp:93
corbo::AlgebraicRiccatiDiscrete::isInsideUnitCircle
static bool isInsideUnitCircle(const Eigen::Ref< const Eigen::MatrixXd > &block)
Definition: algebraic_riccati_discrete.h:176


control_box_rst
Author(s): Christoph Rösmann
autogenerated on Wed Mar 2 2022 00:05:36