37
37
38
38
function SymPy. Sym (sys:: StateSpace{<:Any,Sym} )
39
39
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[]
42
47
else
43
- (C * inv (s * I ( size (A, 1 )) - A) * B + D)[ 1 ]
48
+ return expr
44
49
end
45
50
end
46
51
@@ -56,7 +61,11 @@ function Num(sys::StateSpace{<:Any,Num})
56
61
A, B, C, D = ControlSystems. ssdata (sys)
57
62
λ = isdiscrete (sys) ? Symb. @variables (z) : Symb. @variables (s)
58
63
λ = λ[]
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
60
69
end
61
70
62
71
function Num (sys:: TransferFunction )
@@ -120,6 +129,12 @@ function ControlSystems.minreal(sys::StateSpace{<:Any,NumOrDiv})
120
129
nsys = Symb. simplify_fractions .(nsys)
121
130
end
122
131
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
+
123
138
function Num (x:: Sym )
124
139
try
125
140
return Float64 (x)
0 commit comments