From 1d560bf513b1f7265474342d35abbf05f56b2f94 Mon Sep 17 00:00:00 2001 From: Fredrik Bagge Carlson Date: Fri, 10 Jan 2025 11:41:14 +0100 Subject: [PATCH 1/2] widen the scope of ss*mat method --- lib/ControlSystemsBase/src/types/StateSpace.jl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/ControlSystemsBase/src/types/StateSpace.jl b/lib/ControlSystemsBase/src/types/StateSpace.jl index 16c311c16..16017d1c6 100644 --- a/lib/ControlSystemsBase/src/types/StateSpace.jl +++ b/lib/ControlSystemsBase/src/types/StateSpace.jl @@ -365,8 +365,8 @@ function Base.Broadcast.broadcasted(::typeof(*), M::AbstractArray{<:Number}, sys sminreal(basetype(ST)(Ae, Be, Ce, De, sys1.timeevol)) end -function *(sys1::ST, D::Diagonal) where {ST <: AbstractStateSpace} - if issiso(sys1) # This is a special case that falls back on broadcasting +function *(sys1::AbstractStateSpace, D::AbstractMatrix) where {ST <: AbstractStateSpace} + if issiso(sys1) && isdiag(D) # This is a special case that falls back on broadcasting return sys1 .* D else # This is the standard implementation but must be handled here since we special case diagonal matrices for the case above sys1 * ss(D, sys1.timeevol) From 8e9aeae158a6e27b55c4fe2357affdabcef6ecbc Mon Sep 17 00:00:00 2001 From: Fredrik Bagge Carlson Date: Fri, 10 Jan 2025 11:53:51 +0100 Subject: [PATCH 2/2] remove unbound type param --- lib/ControlSystemsBase/src/types/StateSpace.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/ControlSystemsBase/src/types/StateSpace.jl b/lib/ControlSystemsBase/src/types/StateSpace.jl index 16017d1c6..98e8006a9 100644 --- a/lib/ControlSystemsBase/src/types/StateSpace.jl +++ b/lib/ControlSystemsBase/src/types/StateSpace.jl @@ -365,7 +365,7 @@ function Base.Broadcast.broadcasted(::typeof(*), M::AbstractArray{<:Number}, sys sminreal(basetype(ST)(Ae, Be, Ce, De, sys1.timeevol)) end -function *(sys1::AbstractStateSpace, D::AbstractMatrix) where {ST <: AbstractStateSpace} +function *(sys1::AbstractStateSpace, D::AbstractMatrix) if issiso(sys1) && isdiag(D) # This is a special case that falls back on broadcasting return sys1 .* D else # This is the standard implementation but must be handled here since we special case diagonal matrices for the case above