RiccatiSolve
✖
RiccatiSolve
gives the matrix that is the stabilizing solution of the continuous algebraic Riccati equation .
Details and Options
- In , denotes the conjugate transpose.
- The equation has a unique, symmetric, positive semidefinite solution if is stabilizable, is detectable, , and . Consequently, all eigenvalues of the matrix are negative and the solution is stabilizing.
- The solution is positive definite when is controllable and is observable.
- RiccatiSolve supports a Method option, with the following possible settings:
-
Automatic automatically determined method "Eigensystem" based on eigen decomposition "GeneralizedEigensystem" based on generalized eigen decomposition "GeneralizedSchur" based on generalized Schur decomposition "InverseFree" a variant of "GeneralizedSchur" "MatrixSign" iterative method using the matrix sign function "Newton" iterative Newton method "Schur" based on Schur decomposition - All methods apply to approximate numeric matrices. "Eigensystem" also applies to exact matrices.
Examples
open allclose allBasic Examples (1)Summary of the most common use cases
Scope (3)Survey of the scope of standard use cases
Solve a continuous Riccati equation:
https://wolfram.com/xid/0cps5bgkads2aq-69ykbf
Solve a Riccati equation with state-control coupling:
https://wolfram.com/xid/0cps5bgkads2aq-s066ib
Solve the Riccati equation by extracting appropriate matrices from a state-space model object:
https://wolfram.com/xid/0cps5bgkads2aq-quaez5
https://wolfram.com/xid/0cps5bgkads2aq-2u38a0
https://wolfram.com/xid/0cps5bgkads2aq-kwvc9l
Options (7)Common values & functionality for each option
Method (7)
Automatic and "Eigensystem" methods can be used for exact systems:
https://wolfram.com/xid/0cps5bgkads2aq-gzisjh
https://wolfram.com/xid/0cps5bgkads2aq-h3bfhe
https://wolfram.com/xid/0cps5bgkads2aq-5l65n
As well as for inexact systems:
https://wolfram.com/xid/0cps5bgkads2aq-euclxo
https://wolfram.com/xid/0cps5bgkads2aq-8aswh
https://wolfram.com/xid/0cps5bgkads2aq-o8dqbr
"Schur" method can be used for inexact systems:
https://wolfram.com/xid/0cps5bgkads2aq-2t3oo4
"Newton" applies to inexact systems and may be more accurate than Automatic:
https://wolfram.com/xid/0cps5bgkads2aq-sf05i2
Compute the solution and absolute error:
https://wolfram.com/xid/0cps5bgkads2aq-k98jd
https://wolfram.com/xid/0cps5bgkads2aq-18gih4
Compare to the default method:
https://wolfram.com/xid/0cps5bgkads2aq-hraxg3
https://wolfram.com/xid/0cps5bgkads2aq-8hla6k
"Newton" takes suboptions "StartingMatrix", "MaxIterations", and "Tolerance":
https://wolfram.com/xid/0cps5bgkads2aq-chotur
https://wolfram.com/xid/0cps5bgkads2aq-bne7x6
The "Newton" method may not converge even if a stabilizing solution exists:
https://wolfram.com/xid/0cps5bgkads2aq-3eruf1
Compare with the Automatic method:
https://wolfram.com/xid/0cps5bgkads2aq-70w956
"MatrixSign" is typically used as an initial approximation for the "Newton" method:
https://wolfram.com/xid/0cps5bgkads2aq-b7adqz
https://wolfram.com/xid/0cps5bgkads2aq-j7hfz
Use xinit to initialize the "Newton" method:
https://wolfram.com/xid/0cps5bgkads2aq-hrte0g
https://wolfram.com/xid/0cps5bgkads2aq-t46shq
"MatrixSign" takes suboptions "MaxIterations" and "Tolerance":
https://wolfram.com/xid/0cps5bgkads2aq-g5rt30
https://wolfram.com/xid/0cps5bgkads2aq-gz2you
"GeneralizedSchur" and "GeneralizedEigensystem" applies when a is singular:
https://wolfram.com/xid/0cps5bgkads2aq-1os0qs
https://wolfram.com/xid/0cps5bgkads2aq-jctdks
These two methods work for a singular a:
https://wolfram.com/xid/0cps5bgkads2aq-cz4349
https://wolfram.com/xid/0cps5bgkads2aq-mav5mn
"InverseFree" can be used when r is ill-conditioned:
https://wolfram.com/xid/0cps5bgkads2aq-ir0x7r
The matrix r has a high condition number:
https://wolfram.com/xid/0cps5bgkads2aq-box861
https://wolfram.com/xid/0cps5bgkads2aq-evjyg
Compare to the default method:
https://wolfram.com/xid/0cps5bgkads2aq-sywqv8
The absolute error is higher for the default method in this case:
https://wolfram.com/xid/0cps5bgkads2aq-75e18i
Applications (3)Sample problems that can be solved with this function
Compute the cost associated with an optimal trajectory for a linearized inverted pendulum:
https://wolfram.com/xid/0cps5bgkads2aq-d2o1cy
https://wolfram.com/xid/0cps5bgkads2aq-fhyyrn
https://wolfram.com/xid/0cps5bgkads2aq-5jx6xi
https://wolfram.com/xid/0cps5bgkads2aq-gq0gvg
https://wolfram.com/xid/0cps5bgkads2aq-utulio
Obtain the cost by numerical integration:
https://wolfram.com/xid/0cps5bgkads2aq-oadk6q
https://wolfram.com/xid/0cps5bgkads2aq-pp2z80
https://wolfram.com/xid/0cps5bgkads2aq-erntkq
https://wolfram.com/xid/0cps5bgkads2aq-xlwmht
Track the "cost to go" at each instant along the optimal trajectory:
https://wolfram.com/xid/0cps5bgkads2aq-vjzsk9
Compute an optimal state-feedback gain that places all closed-loop poles to the left of :
https://wolfram.com/xid/0cps5bgkads2aq-l4imyn
https://wolfram.com/xid/0cps5bgkads2aq-300j0m
https://wolfram.com/xid/0cps5bgkads2aq-ccpow5
https://wolfram.com/xid/0cps5bgkads2aq-3mv8z3
The closed-loop poles without any prescribed degree of stability:
https://wolfram.com/xid/0cps5bgkads2aq-yydz9r
Compute the minimum error covariance for a Kalman estimator:
https://wolfram.com/xid/0cps5bgkads2aq-8sfljj
https://wolfram.com/xid/0cps5bgkads2aq-1lutlx
https://wolfram.com/xid/0cps5bgkads2aq-lsg5mg
https://wolfram.com/xid/0cps5bgkads2aq-yx0toq
Properties & Relations (8)Properties of the function, and connections to other functions
Find the optimal gains with cross-coupling matrix p:
https://wolfram.com/xid/0cps5bgkads2aq-eae5d9
https://wolfram.com/xid/0cps5bgkads2aq-n0ffox
https://wolfram.com/xid/0cps5bgkads2aq-xlfds6
An equivalent result can be found be incorporating p into the a and q matrices:
https://wolfram.com/xid/0cps5bgkads2aq-1sai50
https://wolfram.com/xid/0cps5bgkads2aq-1e4ggg
If {a,b} is controllable and {a,g} is observable, and q=Transpose[g].g, then the solution to the Riccati equation is positive definite:
https://wolfram.com/xid/0cps5bgkads2aq-mj1k06
https://wolfram.com/xid/0cps5bgkads2aq-qhnx08
https://wolfram.com/xid/0cps5bgkads2aq-5ys8x
The eigenvalues of the Hamiltonian matrix are pairs of the form {λ,-λ}:
https://wolfram.com/xid/0cps5bgkads2aq-x26fjl
https://wolfram.com/xid/0cps5bgkads2aq-mw8imo
https://wolfram.com/xid/0cps5bgkads2aq-yeuhzv
The ability to obtain a stabilizing solution depends on the Hamiltonian matrix:
https://wolfram.com/xid/0cps5bgkads2aq-i2qow0
https://wolfram.com/xid/0cps5bgkads2aq-cugw12
The Hamiltonian matrix must satisfy the stability property:
https://wolfram.com/xid/0cps5bgkads2aq-8n47up
As well as the complementarity property:
https://wolfram.com/xid/0cps5bgkads2aq-ossmkp
https://wolfram.com/xid/0cps5bgkads2aq-oyt829
https://wolfram.com/xid/0cps5bgkads2aq-b6tdvp
https://wolfram.com/xid/0cps5bgkads2aq-62adf3
https://wolfram.com/xid/0cps5bgkads2aq-tukmvh
Find the eigenvalues of the feedback system with :
https://wolfram.com/xid/0cps5bgkads2aq-h35ps0
https://wolfram.com/xid/0cps5bgkads2aq-io37tk
These are also the stable eigenvalues of the Hamiltonian matrix:
https://wolfram.com/xid/0cps5bgkads2aq-iswyl3
https://wolfram.com/xid/0cps5bgkads2aq-cgki6y
Compute optimal state feedback gains using RiccatiSolve:
https://wolfram.com/xid/0cps5bgkads2aq-uym2d3
https://wolfram.com/xid/0cps5bgkads2aq-ggki1x
Use LQRegulatorGains to compute the same result directly:
https://wolfram.com/xid/0cps5bgkads2aq-285zka
Compute optimal output feedback gains using RiccatiSolve:
https://wolfram.com/xid/0cps5bgkads2aq-43m490
https://wolfram.com/xid/0cps5bgkads2aq-0c1x0w
LQOutputRegulatorGains gives the same result:
https://wolfram.com/xid/0cps5bgkads2aq-k5ad2z
Compute optimal estimator gains using RiccatiSolve:
https://wolfram.com/xid/0cps5bgkads2aq-b455li
https://wolfram.com/xid/0cps5bgkads2aq-vetyb3
https://wolfram.com/xid/0cps5bgkads2aq-b6um8u
Use LQEstimatorGains to compute this result directly:
https://wolfram.com/xid/0cps5bgkads2aq-e8u348
Possible Issues (1)Common pitfalls and unexpected behavior
Wolfram Research (2010), RiccatiSolve, Wolfram Language function, https://reference.wolfram.com/language/ref/RiccatiSolve.html (updated 2014).
Text
Wolfram Research (2010), RiccatiSolve, Wolfram Language function, https://reference.wolfram.com/language/ref/RiccatiSolve.html (updated 2014).
Wolfram Research (2010), RiccatiSolve, Wolfram Language function, https://reference.wolfram.com/language/ref/RiccatiSolve.html (updated 2014).
CMS
Wolfram Language. 2010. "RiccatiSolve." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2014. https://reference.wolfram.com/language/ref/RiccatiSolve.html.
Wolfram Language. 2010. "RiccatiSolve." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2014. https://reference.wolfram.com/language/ref/RiccatiSolve.html.
APA
Wolfram Language. (2010). RiccatiSolve. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/RiccatiSolve.html
Wolfram Language. (2010). RiccatiSolve. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/RiccatiSolve.html
BibTeX
@misc{reference.wolfram_2024_riccatisolve, author="Wolfram Research", title="{RiccatiSolve}", year="2014", howpublished="\url{https://reference.wolfram.com/language/ref/RiccatiSolve.html}", note=[Accessed: 08-January-2025
]}
BibLaTeX
@online{reference.wolfram_2024_riccatisolve, organization={Wolfram Research}, title={RiccatiSolve}, year={2014}, url={https://reference.wolfram.com/language/ref/RiccatiSolve.html}, note=[Accessed: 08-January-2025
]}