Closed baggepinnen closed 1 year ago
Patch and project coverage have no change.
Comparison is base (
737a925
) 92.72% compared to head (5cbf7ce
) 92.72%.
:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.
This is an automated message. Plots were compared to references. 11/11 images have changed, see differences below. After pulling this PR, please update the reference images by creating a PR to ControlExamplePlots.jl here. Difference | Reference Image | New Image |
---|---|---|
:x: 0.047 | ![]() |
![]() |
:heavy_check_mark: 0.011 | ![]() |
![]() |
:heavy_check_mark: 0.001 | ![]() |
![]() |
:heavy_check_mark: 0.001 | ![]() |
![]() |
:heavy_check_mark: 0.007 | ![]() |
![]() |
:heavy_check_mark: 0.003 | ![]() |
![]() |
:heavy_check_mark: 0.0 | ![]() |
![]() |
:warning: 0.028 | ![]() |
![]() |
:x: 0.06 | ![]() |
![]() |
:heavy_check_mark: 0.0 | ![]() |
![]() |
:warning: 0.017 | ![]() |
![]() |
This is an automated message. Plots were compared to references. 11/11 images have changed, see differences below. After pulling this PR, please update the reference images by creating a PR to ControlExamplePlots.jl here. Difference | Reference Image | New Image |
---|---|---|
:x: 0.047 | ![]() |
![]() |
:heavy_check_mark: 0.011 | ![]() |
![]() |
:heavy_check_mark: 0.001 | ![]() |
![]() |
:heavy_check_mark: 0.001 | ![]() |
![]() |
:heavy_check_mark: 0.007 | ![]() |
![]() |
:heavy_check_mark: 0.003 | ![]() |
![]() |
:heavy_check_mark: 0.0 | ![]() |
![]() |
:warning: 0.028 | ![]() |
![]() |
:x: 0.06 | ![]() |
![]() |
:heavy_check_mark: 0.0 | ![]() |
![]() |
:warning: 0.017 | ![]() |
![]() |
This is an automated message. Plots were compared to references. 11/11 images have changed, see differences below. After pulling this PR, please update the reference images by creating a PR to ControlExamplePlots.jl here. Difference | Reference Image | New Image |
---|---|---|
:x: 0.047 | ![]() |
![]() |
:heavy_check_mark: 0.011 | ![]() |
![]() |
:heavy_check_mark: 0.001 | ![]() |
![]() |
:heavy_check_mark: 0.001 | ![]() |
![]() |
:heavy_check_mark: 0.007 | ![]() |
![]() |
:heavy_check_mark: 0.003 | ![]() |
![]() |
:heavy_check_mark: 0.0 | ![]() |
![]() |
:warning: 0.028 | ![]() |
![]() |
:x: 0.06 | ![]() |
![]() |
:heavy_check_mark: 0.0 | ![]() |
![]() |
:warning: 0.017 | ![]() |
![]() |
good job @baggepinnen! I'll use them in my package :)
I would move the check for square matrix before eigenvalue computation.
In a strict sense, the function controllabiliy
checks the reachability of a LTI system. While for continuous-time systems the two notions are equivalent, for discrete-time systems there is a subtle difference between them. In general reachability implies controllability, but the reverse is not true. The controllability property is defined as the ability of a system to drive any state into the origin, while reachability is the ability to drive any state into another arbitrary state, in finite time. For example, discrete-time systems with B = 0 and A nillpotent are controllable! In MATLAB this aspect is handled incorrectly, so there is a chance to address it in a rigourous manner in Julia! The function observability
checks the right property!
Thanks for the comment! Is your proposed change to rename the implemented function to reachability
, or to change the implementation to distinguish between controllability and reachability for discrete-time systems? If the latter, do you know of a reference that can be used to guide the implementation?
A pertinent discussion of this aspect is, for example, in the book of Kailath (1980), starting with page 95, where also the dual concepts observability and constructibility are discussed. See also the picture on page 100, which illustrates the equivalence of these notions in discrete case if A is nonsingular. I would suggest to keep the function controllability
as it is now, but add a remark, that it concerns with “controllability from the origin (also called reachability)”.
See discussion in #865
@franckgaga