3737
3838function SymPy. Sym (sys:: StateSpace{<:Any,Sym} )
3939 A, B, C, D = ControlSystems. ssdata (sys)
40- if isdiscrete (sys)
41- (C* inv (z * I (size (A, 1 )) - A)* B+ D)[1 ]
40+ expr = if isdiscrete (sys)
41+ (C* inv (z * I (size (A, 1 )) - A)* B+ D)
42+ else
43+ (C* inv (s * I (size (A, 1 )) - A)* B+ D)
44+ end
45+ if size (expr) == (1 ,1 )
46+ return expr[]
4247 else
43- (C * inv (s * I ( size (A, 1 )) - A) * B + D)[ 1 ]
48+ return expr
4449 end
4550end
4651
@@ -56,7 +61,11 @@ function Num(sys::StateSpace{<:Any,Num})
5661 A, B, C, D = ControlSystems. ssdata (sys)
5762 λ = isdiscrete (sys) ? Symb. @variables (z) : Symb. @variables (s)
5863 λ = λ[]
59- Symb. simplify ((C* inv (λ * I (size (A, 1 )) - A)* B+ D)[1 ])
64+ ex = (C* inv (λ * I (size (A, 1 )) - A)* B+ D)[1 ]
65+ if sys. nx < 4
66+ ex = Symb. simplify (ex)
67+ end
68+ ex
6069end
6170
6271function Num (sys:: TransferFunction )
@@ -120,6 +129,12 @@ function ControlSystems.minreal(sys::StateSpace{<:Any,NumOrDiv})
120129 nsys = Symb. simplify_fractions .(nsys)
121130end
122131
132+ function ControlSystems. minreal (sys:: StateSpace{<:Any,Sym} )
133+ # sys |> Symb.Num .|> Symb.symbolics_to_sympy .|> sp.simplify
134+ nsys = Sym (sys)
135+ nsys = sp. simplify .(nsys)
136+ end
137+
123138function Num (x:: Sym )
124139 try
125140 return Float64 (x)
0 commit comments