From 2b41c291b1ce21ef8d78cd30ac740b5a915e26c3 Mon Sep 17 00:00:00 2001 From: Fredrik Bagge Carlson Date: Wed, 6 Dec 2023 14:12:29 +0100 Subject: [PATCH] better error messages for failed inversion --- lib/ControlSystemsBase/src/types/StateSpace.jl | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/ControlSystemsBase/src/types/StateSpace.jl b/lib/ControlSystemsBase/src/types/StateSpace.jl index 0a358387f..919db0c66 100644 --- a/lib/ControlSystemsBase/src/types/StateSpace.jl +++ b/lib/ControlSystemsBase/src/types/StateSpace.jl @@ -431,10 +431,11 @@ end function /(n::Number, sys::ST) where ST <: AbstractStateSpace # Ensure s.D is invertible A, B, C, D = ssdata(sys) + LinearAlgebra.checksquare(D) || error("The inverted system must have the same number of inputs and outputs") Dinv = try inv(D) catch - error("D isn't invertible") + error("D isn't invertible. If you are trying to form a quotient between two systems `N(s) / D(s)` where the quotient is proper but the inverse of `D(s)` isn't, consider calling `N / D` instead of `N * inv(D)") end return basetype(ST)(A - B*Dinv*C, B*Dinv, -n*Dinv*C, n*Dinv, sys.timeevol) end