Skip to content

Commit 7caf13e

Browse files
committed
test: modify LinModel construction tests
1 parent fb0b828 commit 7caf13e

File tree

3 files changed

+23
-17
lines changed

3 files changed

+23
-17
lines changed

src/model/linmodel.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -153,8 +153,8 @@ function LinModel(
153153
sysu = sminreal(sys[:,i_u]) # remove states associated to measured disturbances d
154154
sysd = sminreal(sys[:,i_d]) # remove states associated to manipulates inputs u
155155
if !iszero(sysu.D)
156-
error("LinModel only supports strictly proper systems (state matrix D must be 0 "*
157-
"for columns associated to manipulated inputs u)")
156+
error("LinModel only supports strictly proper systems (state-space matrix D must "*
157+
"be 0 for columns associated to manipulated inputs u)")
158158
end
159159
if iscontinuous(sys)
160160
isnothing(Ts) && error("Sample time Ts must be specified if sys is continuous")
@@ -176,7 +176,7 @@ function LinModel(
176176
end
177177
end
178178
# minreal to merge common poles if possible and ensure controllability/observability:
179-
sys_dis = minreal([sysu_dis sysd_dis]) # same realization if already minimal
179+
sys_dis = minreal([sysu_dis sysd_dis])
180180
nu = length(i_u)
181181
A = sys_dis.A
182182
Bu = sys_dis.B[:,1:nu]

test/0_test_module.jl

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,9 @@
33
Ts = 400.0
44
sys = [ tf(1.90,[1800.0,1]) tf(1.90,[1800.0,1]) tf(1.90,[1800.0,1]);
55
tf(-0.74,[800.0,1]) tf(0.74,[800.0,1]) tf(-0.74,[800.0,1]) ]
6-
sys_ss = minreal(ss(sys))
7-
Gss = c2d(sys_ss[:,1:2], Ts, :zoh)
8-
Gss2 = c2d(sys_ss[:,1:2], 0.5Ts, :zoh)
6+
sys_ss = ss(sys)
7+
sys_ss_u = sminreal(sys_ss[:,1:2])
8+
Gss = minreal(c2d(sys_ss_u, Ts, :zoh))
9+
Gss2 = minreal(c2d(sys_ss_u, 0.5Ts, :zoh))
910
export Ts, sys, sys_ss, Gss, Gss2
1011
end

test/1_test_sim_model.jl

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,9 @@
3737
@test linmodel5.nu == 2
3838
@test linmodel5.nd == 1
3939
@test linmodel5.ny == 2
40-
sysu_ss = sminreal(c2d(minreal(ss(sys))[:,1:2], Ts, :zoh))
41-
sysd_ss = sminreal(c2d(minreal(ss(sys))[:,3], Ts, :tustin))
42-
sys_ss = [sysu_ss sysd_ss]
40+
sysu_ss = c2d(sminreal(ss(sys)[:,1:2]), Ts, :zoh)
41+
sysd_ss = c2d(sminreal(ss(sys)[:,3]), Ts, :tustin)
42+
sys_ss = minreal([sysu_ss sysd_ss])
4343
@test linmodel5.A sys_ss.A
4444
@test linmodel5.Bu sys_ss.B[:,1:2]
4545
@test linmodel5.Bd sys_ss.B[:,3]
@@ -51,14 +51,19 @@
5151

5252
linmodel6 = LinModel([delay(Ts) delay(Ts)]*sys,Ts,i_d=[3])
5353
@test linmodel6.nx == 3
54-
@test sum(eigvals(linmodel6.A) .≈ 0) == 1
55-
56-
linmodel7 = LinModel(
57-
ss(diagm( .1: .1: .3), I(3), diagm( .4: .1: .6), 0, 1.0),
58-
i_u=[1, 2],
59-
i_d=[3])
60-
@test linmodel7.A diagm( .1: .1: .3)
61-
@test linmodel7.C diagm( .4: .1: .6)
54+
@test sum(isapprox.(eigvals(linmodel6.A), 0, atol=1e-15)) == 1
55+
56+
A = diagm( .1: .1: .3)
57+
Bu = [I(2); zeros(1,2)]
58+
C = diagm( .4: .1: .6)
59+
Bd = [zeros(2,1); I(1)]
60+
Dd = 0;
61+
linmodel7 = LinModel(A, Bu, C, Bd, Dd, 1.0)
62+
@test linmodel7.A A
63+
@test linmodel7.Bu Bu
64+
@test linmodel7.Bd Bd
65+
@test linmodel7.C C
66+
@test linmodel7.Dd zeros(3,1)
6267

6368
linmodel8 = LinModel(Gss.A, Gss.B, Gss.C, zeros(Float32, 2, 0), zeros(Float32, 2, 0), Ts)
6469
@test isa(linmodel8, LinModel{Float64})

0 commit comments

Comments
 (0)