Skip to content

Commit e69d2fc

Browse files
committed
test differentiability of tf2ss conversion
1 parent 455e14b commit e69d2fc

File tree

2 files changed

+17
-3
lines changed

2 files changed

+17
-3
lines changed

lib/ControlSystemsBase/src/timeresp.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ end
7171

7272
Base.step(sys::LTISystem, tfinal::Real; kwargs...) = step(sys, _default_time_vector(sys, tfinal); kwargs...)
7373
Base.step(sys::LTISystem; kwargs...) = step(sys, _default_time_vector(sys); kwargs...)
74-
Base.step(sys::TransferFunction, t::AbstractVector; kwargs...) = step(ss(sys, balance=true, minimal=true), t::AbstractVector; kwargs...)
74+
Base.step(sys::TransferFunction, t::AbstractVector; kwargs...) = step(ss(sys, minimal=numeric_type(sys) isa BlasFloat), t::AbstractVector; kwargs...)
7575

7676
"""
7777
y, t, x = impulse(sys[, tfinal])
@@ -119,7 +119,7 @@ end
119119

120120
impulse(sys::LTISystem, tfinal::Real; kwargs...) = impulse(sys, _default_time_vector(sys, tfinal); kwargs...)
121121
impulse(sys::LTISystem; kwargs...) = impulse(sys, _default_time_vector(sys); kwargs...)
122-
impulse(sys::TransferFunction, t::AbstractVector; kwargs...) = impulse(ss(sys, balance=true, minimal=true), t; kwargs...)
122+
impulse(sys::TransferFunction, t::AbstractVector; kwargs...) = impulse(ss(sys, minimal=numeric_type(sys) isa BlasFloat), t; kwargs...)
123123

124124
"""
125125
result = lsim(sys, u[, t]; x0, method])
@@ -301,7 +301,7 @@ function lsim(sys::AbstractStateSpace, u::Function, t::AbstractVector;
301301
end
302302

303303

304-
lsim(sys::TransferFunction, args...; kwargs...) = lsim(ss(sys, balance=true, minimal=true), args...; kwargs...)
304+
lsim(sys::TransferFunction, args...; kwargs...) = lsim(ss(sys, minimal=numeric_type(sys) isa BlasFloat), args...; kwargs...)
305305

306306

307307
"""

lib/ControlSystemsBase/test/test_implicit_diff.jl

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,3 +212,17 @@ J2 = fdgrad(difffun, pars)[:]
212212
# @show norm(J1-J2)
213213
@test J1 J2 rtol = 1e-5
214214

215+
## Test differentiation of tf 2 ss conversion
216+
217+
function difffun(pars)
218+
P = tf(1, pars)
219+
sum(abs2, step(P, 0:0.1:10, method=:tustin).y +
220+
impulse(P, 0:0.1:10, method=:tustin).y
221+
)
222+
end
223+
224+
pars = [1.0, 2, 1]
225+
226+
g1 = ForwardDiff.gradient(difffun, pars)
227+
g2 = fdgrad(difffun, pars)
228+
@test g1 g2 rtol = 1e-5

0 commit comments

Comments
 (0)