Skip to content

Commit 387acad

Browse files
committed
add promotion for TF<->named_ss
1 parent 6e9eabe commit 387acad

File tree

3 files changed

+23
-1
lines changed

3 files changed

+23
-1
lines changed

src/hinfinity_design.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -566,7 +566,7 @@ function _scalematrix(A::AbstractMatrix; method = :QR)
566566
elseif method === :SVD
567567
return _coordinatetransformsvd(A)
568568
else
569-
error("The method $method is not supported, use 'QR' or 'SVD' instad.")
569+
error("The method $method is not supported, use `:QR` or `:SVD` instead.")
570570
end
571571
end
572572

src/named_systems2.jl

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,12 @@ function Base.promote_rule(::Type{NamedStateSpace{TE, StateSpace{TE, T1}}}, ::Ty
6464
NamedStateSpace{TE, StateSpace{TE, promote_type(T1,eltype(MT))}}
6565
end
6666

67+
function Base.promote_rule(::Type{U}, ::Type{NamedStateSpace{T, S}}) where
68+
{T, TF, U<:TransferFunction{<:Any, TF} , S<:AbstractStateSpace{T}}
69+
inner = promote_type(U,S)
70+
NamedStateSpace{T, inner}
71+
end
72+
6773

6874

6975
function Base.convert(::Type{NamedStateSpace{T, S}}, s::U) where {T, S <: AbstractStateSpace, U <: AbstractStateSpace}
@@ -82,6 +88,11 @@ function Base.convert(::Type{NamedStateSpace{T, S}}, s::NamedStateSpace{T, U}) w
8288
NamedStateSpace{T,typeof(sys)}(sys, s.x, s.u, s.y, s.name)
8389
end
8490

91+
function Base.convert(::Type{NamedStateSpace{T, S}}, s::U) where {T, S <: AbstractStateSpace, U <: TransferFunction}
92+
s2 = Base.convert(S, s)
93+
named_ss(s2, x = gensym("x"), u = gensym("u"), y = gensym("y"))
94+
end
95+
8596
# function Base.convert(::Type{TransferFunction{TE, S}}, s::U) where {TE, S, U <: NamedStateSpace{TE}}
8697
# convert(TransferFunction{TE, S}, s.sys)
8798
# end

test/test_named_systems2.jl

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,17 @@ s2 = named_ss(G2, x = [:z], u = [:u1], y=[:y2])
189189
G1 = named_ss(ssrand(1,1,1, Ts=1), "G1")
190190
G2 = named_ss(ssrand(1,1,1, Ts=1), "G2")
191191
gangoffourplot(G1, G2) # tests some convert methods for I to discrete
192+
193+
194+
G1 = named_ss(ssrand(1,1,1), "G1")
195+
# Scalars
196+
@test_nowarn G1*1
197+
@test_nowarn 1*G1
198+
199+
# Transfer function
200+
@test (G1*tf(1, [1,1])).sys == (G1*ss(tf(1, [1,1]))).sys
201+
@test (tf(1, [1,1])*G1).sys == (ss(tf(1, [1,1]))*G1).sys
202+
192203
end
193204

194205

0 commit comments

Comments
 (0)