Skip to content

Commit e616131

Browse files
authored
Merge pull request #939 from JuliaControl/resolvent
add functions returning the resolvent of a system
2 parents 637f5cb + 0a2f412 commit e616131

File tree

3 files changed

+43
-0
lines changed

3 files changed

+43
-0
lines changed

lib/ControlSystemsBase/src/ControlSystemsBase.jl

+2
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,8 @@ export LTISystem,
8080
output_comp_sensitivity,
8181
G_PS,
8282
G_CS,
83+
resolvent,
84+
input_resolvent,
8385
# Discrete
8486
c2d,
8587
c2d_x0map,

lib/ControlSystemsBase/src/sensitivity_functions.jl

+29
Original file line numberDiff line numberDiff line change
@@ -173,3 +173,32 @@ function extended_gangoffour(P, C, pos=true)
173173
end
174174
end
175175

176+
"""
177+
input_resolvent(sys::AbstractStateSpace)
178+
179+
Return the input-mapped resolvent of `sys`
180+
```math
181+
(sI - A)^{-1}B
182+
```
183+
i.e., the system `ss(A, B, I, 0)`.
184+
"""
185+
function input_resolvent(sys::AbstractStateSpace)
186+
A,B,C,D = ssdata(sys)
187+
ss(A, B, I, 0, timeevol(sys))
188+
end
189+
190+
"""
191+
resolvent(sys::AbstractStateSpace)
192+
193+
Return the resolvent of `sys`
194+
```math
195+
(sI - A)^{-1}
196+
```
197+
i.e., the system `ss(A, I, I, 0)`.
198+
199+
See also [`input_resolvent`](@ref).
200+
"""
201+
function resolvent(sys::AbstractStateSpace)
202+
A,B,C,D = ssdata(sys)
203+
ss(A, I(sys.nx), I, 0, timeevol(sys))
204+
end

lib/ControlSystemsBase/test/test_connections.jl

+12
Original file line numberDiff line numberDiff line change
@@ -416,4 +416,16 @@ function feedback_ctrl(G, K)
416416
end
417417
@test_throws ErrorException feedback_ctrl(tf([1], [0.1, 1]), delay(0.1))
418418

419+
Pr = resolvent(P)
420+
@test Pr.A == P.A
421+
@test Pr.B == I
422+
@test Pr.C == I
423+
@test iszero(Pr.D)
424+
425+
Pr = input_resolvent(P)
426+
@test Pr.A == P.A
427+
@test Pr.B == P.B
428+
@test Pr.C == I
429+
@test iszero(Pr.D)
430+
419431
end

0 commit comments

Comments
 (0)