@@ -6,124 +6,124 @@ Gss = c2d(sys_ss[:,1:2], Ts, :zoh)
66Gss2 = c2d (sys_ss[:,1 : 2 ], 0.5 Ts, :zoh )
77
88@testset " LinModel construction" begin
9- linmodel1 = LinModel (sys, Ts, i_u= 1 : 2 )
10- @test linmodel1. nx == 2
11- @test linmodel1. nu == 2
12- @test linmodel1. nd == 0
13- @test linmodel1. ny == 2
14- @test linmodel1. A ≈ Gss. A
15- @test linmodel1. Bu ≈ Gss. B
16- @test linmodel1. Bd ≈ zeros (2 ,0 )
17- @test linmodel1. C ≈ Gss. C
18- @test linmodel1. Dd ≈ zeros (2 ,0 )
19-
20- linmodel2 = LinModel (Gss)
21- setop! (linmodel2, uop= [10 ,50 ], yop= [50 ,30 ])
22- @test linmodel2. A ≈ Gss. A
23- @test linmodel2. Bu ≈ Gss. B
24- @test linmodel2. Bd ≈ zeros (2 ,0 )
25- @test linmodel2. C ≈ Gss. C
26- @test linmodel2. Dd ≈ zeros (2 ,0 )
27- @test linmodel2. uop ≈ [10 ,50 ]
28- @test linmodel2. yop ≈ [50 ,30 ]
29- @test linmodel2. dop ≈ zeros (0 ,1 )
30-
31- linmodel3 = LinModel (Gss, 0.5 Ts)
32- @test linmodel3. Ts == 2.0
33- @test linmodel3. A ≈ Gss2. A
34- @test linmodel3. C ≈ Gss2. C
35-
36- linmodel4 = LinModel (Gss)
37- setstate! (linmodel4, [1 ;- 1 ])
38- @test linmodel4. x ≈ [1 ;- 1 ]
39-
40- linmodel5 = LinModel (sys,Ts,i_d= [3 ])
41- @test linmodel5. nx == 4
42- @test linmodel5. nu == 2
43- @test linmodel5. nd == 1
44- @test linmodel5. ny == 2
45- sysu_ss = sminreal (c2d (minreal (ss (sys))[:,1 : 2 ], Ts, :zoh ))
46- sysd_ss = sminreal (c2d (minreal (ss (sys))[:,3 ], Ts, :tustin ))
47- sys_ss = [sysu_ss sysd_ss]
48- @test linmodel5. A ≈ sys_ss. A
49- @test linmodel5. Bu ≈ sys_ss. B[:,1 : 2 ]
50- @test linmodel5. Bd ≈ sys_ss. B[:,3 ]
51- @test linmodel5. C ≈ sys_ss. C
52- @test linmodel5. Dd ≈ sys_ss. D[:,3 ]
53-
54- linmodel6 = LinModel ([delay (4 ) delay (4 )]* sys,Ts,i_d= [3 ])
55- @test linmodel6. nx == 6
56- @test sum (eigvals (linmodel6. A) .≈ 0 ) == 2
57-
58- @test_throws ErrorException LinModel (sys)
59- @test_throws ErrorException LinModel (sys,- Ts)
60- @test_throws ErrorException LinModel (sys,Ts,i_u= [1 ,1 ])
61- @test_throws ErrorException LinModel (sys_ss,Ts+ 1 )
62- @test_throws ErrorException setop! (linmodel5, uop= [0 ,0 ,0 ,0 ,0 ])
63- @test_throws ErrorException setop! (linmodel5, yop= [0 ,0 ,0 ,0 ,0 ])
64- @test_throws ErrorException setop! (linmodel5, dop= [0 ,0 ,0 ,0 ,0 ])
65- sys_ss. D .= 1
66- @test_throws ErrorException LinModel (sys_ss,Ts)
9+ linmodel1 = LinModel (sys, Ts, i_u= 1 : 2 )
10+ @test linmodel1. nx == 2
11+ @test linmodel1. nu == 2
12+ @test linmodel1. nd == 0
13+ @test linmodel1. ny == 2
14+ @test linmodel1. A ≈ Gss. A
15+ @test linmodel1. Bu ≈ Gss. B
16+ @test linmodel1. Bd ≈ zeros (2 ,0 )
17+ @test linmodel1. C ≈ Gss. C
18+ @test linmodel1. Dd ≈ zeros (2 ,0 )
19+
20+ linmodel2 = LinModel (Gss)
21+ setop! (linmodel2, uop= [10 ,50 ], yop= [50 ,30 ])
22+ @test linmodel2. A ≈ Gss. A
23+ @test linmodel2. Bu ≈ Gss. B
24+ @test linmodel2. Bd ≈ zeros (2 ,0 )
25+ @test linmodel2. C ≈ Gss. C
26+ @test linmodel2. Dd ≈ zeros (2 ,0 )
27+ @test linmodel2. uop ≈ [10 ,50 ]
28+ @test linmodel2. yop ≈ [50 ,30 ]
29+ @test linmodel2. dop ≈ zeros (0 ,1 )
30+
31+ linmodel3 = LinModel (Gss, 0.5 Ts)
32+ @test linmodel3. Ts == 2.0
33+ @test linmodel3. A ≈ Gss2. A
34+ @test linmodel3. C ≈ Gss2. C
35+
36+ linmodel4 = LinModel (Gss)
37+ setstate! (linmodel4, [1 ;- 1 ])
38+ @test linmodel4. x ≈ [1 ;- 1 ]
39+
40+ linmodel5 = LinModel (sys,Ts,i_d= [3 ])
41+ @test linmodel5. nx == 4
42+ @test linmodel5. nu == 2
43+ @test linmodel5. nd == 1
44+ @test linmodel5. ny == 2
45+ sysu_ss = sminreal (c2d (minreal (ss (sys))[:,1 : 2 ], Ts, :zoh ))
46+ sysd_ss = sminreal (c2d (minreal (ss (sys))[:,3 ], Ts, :tustin ))
47+ sys_ss = [sysu_ss sysd_ss]
48+ @test linmodel5. A ≈ sys_ss. A
49+ @test linmodel5. Bu ≈ sys_ss. B[:,1 : 2 ]
50+ @test linmodel5. Bd ≈ sys_ss. B[:,3 ]
51+ @test linmodel5. C ≈ sys_ss. C
52+ @test linmodel5. Dd ≈ sys_ss. D[:,3 ]
53+
54+ linmodel6 = LinModel ([delay (4 ) delay (4 )]* sys,Ts,i_d= [3 ])
55+ @test linmodel6. nx == 6
56+ @test sum (eigvals (linmodel6. A) .≈ 0 ) == 2
57+
58+ @test_throws ErrorException LinModel (sys)
59+ @test_throws ErrorException LinModel (sys,- Ts)
60+ @test_throws ErrorException LinModel (sys,Ts,i_u= [1 ,1 ])
61+ @test_throws ErrorException LinModel (sys_ss,Ts+ 1 )
62+ @test_throws ErrorException setop! (linmodel5, uop= [0 ,0 ,0 ,0 ,0 ])
63+ @test_throws ErrorException setop! (linmodel5, yop= [0 ,0 ,0 ,0 ,0 ])
64+ @test_throws ErrorException setop! (linmodel5, dop= [0 ,0 ,0 ,0 ,0 ])
65+ sys_ss. D .= 1
66+ @test_throws ErrorException LinModel (sys_ss,Ts)
6767end
6868
6969@testset " LinModel sim methods" begin
70- linmodel1 = setop! (LinModel (Gss), uop= [10 ,50 ], yop= [50 ,30 ])
70+ linmodel1 = setop! (LinModel (Gss), uop= [10 ,50 ], yop= [50 ,30 ])
7171
72- @test updatestate! (linmodel1, [10 , 50 ]) ≈ zeros (2 )
73- @test updatestate! (linmodel1, [10 , 50 ], Float64[]) ≈ zeros (2 )
74- @test linmodel1. x ≈ zeros (2 )
75- @test evaloutput (linmodel1) ≈ linmodel1 () ≈ [50 ,30 ]
76- @test evaloutput (linmodel1, Float64[]) ≈ linmodel1 (Float64[]) ≈ [50 ,30 ]
72+ @test updatestate! (linmodel1, [10 , 50 ]) ≈ zeros (2 )
73+ @test updatestate! (linmodel1, [10 , 50 ], Float64[]) ≈ zeros (2 )
74+ @test linmodel1. x ≈ zeros (2 )
75+ @test evaloutput (linmodel1) ≈ linmodel1 () ≈ [50 ,30 ]
76+ @test evaloutput (linmodel1, Float64[]) ≈ linmodel1 (Float64[]) ≈ [50 ,30 ]
7777
78- @test_throws DimensionMismatch updatestate! (linmodel1, zeros (2 ), zeros (1 ))
79- @test_throws DimensionMismatch evaloutput (linmodel1, zeros (1 ))
78+ @test_throws DimensionMismatch updatestate! (linmodel1, zeros (2 ), zeros (1 ))
79+ @test_throws DimensionMismatch evaloutput (linmodel1, zeros (1 ))
8080end
8181
8282
8383@testset " NonLinModel construction" begin
84- linmodel1 = LinModel (sys,Ts,i_u= [1 ,2 ])
85- f1 (x,u,_) = linmodel1. A* x + linmodel1. Bu* u
86- h1 (x,_) = linmodel1. C* x
87- nonlinmodel1 = NonLinModel (f1,h1,Ts,2 ,2 ,2 )
88- @test nonlinmodel1. nx == 2
89- @test nonlinmodel1. nu == 2
90- @test nonlinmodel1. nd == 0
91- @test nonlinmodel1. ny == 2
92- @test nonlinmodel1. f ([0 ,0 ],[0 ,0 ],[1 ]) ≈ zeros (2 ,)
93- @test nonlinmodel1. h ([0 ,0 ],[1 ]) ≈ zeros (2 ,)
94-
95- linmodel2 = LinModel (sys,Ts,i_d= [3 ])
96- f2 (x,u,d) = linmodel2. A* x + linmodel2. Bu* u + linmodel2. Bd* d
97- h2 (x,_) = linmodel2. C* x
98- nonlinmodel2 = NonLinModel (f2,h2,Ts,2 ,4 ,2 ,1 )
99-
100- @test nonlinmodel2. nx == 4
101- @test nonlinmodel2. nu == 2
102- @test nonlinmodel2. nd == 1
103- @test nonlinmodel2. ny == 2
104- @test nonlinmodel2. f ([0 ,0 ,0 ,0 ],[0 ,0 ],[0 ]) ≈ zeros (4 ,)
105- @test nonlinmodel2. h ([0 ,0 ,0 ,0 ],[0 ]) ≈ zeros (2 ,)
106-
107- @test_throws ErrorException NonLinModel (
108- (x,u)-> linmodel1. A* x + linmodel1. Bu* u,
109- (x,_)-> linmodel1. C* x, Ts, 2 , 4 , 2 , 1 )
110- @test_throws ErrorException NonLinModel (
111- (x,u,_)-> linmodel1. A* x + linmodel1. Bu* u,
112- (x)-> linmodel1. C* x, Ts, 2 , 4 , 2 , 1 )
84+ linmodel1 = LinModel (sys,Ts,i_u= [1 ,2 ])
85+ f1 (x,u,_) = linmodel1. A* x + linmodel1. Bu* u
86+ h1 (x,_) = linmodel1. C* x
87+ nonlinmodel1 = NonLinModel (f1,h1,Ts,2 ,2 ,2 )
88+ @test nonlinmodel1. nx == 2
89+ @test nonlinmodel1. nu == 2
90+ @test nonlinmodel1. nd == 0
91+ @test nonlinmodel1. ny == 2
92+ @test nonlinmodel1. f ([0 ,0 ],[0 ,0 ],[1 ]) ≈ zeros (2 ,)
93+ @test nonlinmodel1. h ([0 ,0 ],[1 ]) ≈ zeros (2 ,)
94+
95+ linmodel2 = LinModel (sys,Ts,i_d= [3 ])
96+ f2 (x,u,d) = linmodel2. A* x + linmodel2. Bu* u + linmodel2. Bd* d
97+ h2 (x,_) = linmodel2. C* x
98+ nonlinmodel2 = NonLinModel (f2,h2,Ts,2 ,4 ,2 ,1 )
99+
100+ @test nonlinmodel2. nx == 4
101+ @test nonlinmodel2. nu == 2
102+ @test nonlinmodel2. nd == 1
103+ @test nonlinmodel2. ny == 2
104+ @test nonlinmodel2. f ([0 ,0 ,0 ,0 ],[0 ,0 ],[0 ]) ≈ zeros (4 ,)
105+ @test nonlinmodel2. h ([0 ,0 ,0 ,0 ],[0 ]) ≈ zeros (2 ,)
106+
107+ @test_throws ErrorException NonLinModel (
108+ (x,u)-> linmodel1. A* x + linmodel1. Bu* u,
109+ (x,_)-> linmodel1. C* x, Ts, 2 , 4 , 2 , 1 )
110+ @test_throws ErrorException NonLinModel (
111+ (x,u,_)-> linmodel1. A* x + linmodel1. Bu* u,
112+ (x)-> linmodel1. C* x, Ts, 2 , 4 , 2 , 1 )
113113end
114114
115115@testset " NonLinModel sim methods" begin
116- linmodel1 = LinModel (sys,Ts,i_u= [1 ,2 ])
117- f1 (x,u,_) = linmodel1. A* x + linmodel1. Bu* u
118- h1 (x,_) = linmodel1. C* x
119- nonlinmodel = NonLinModel (f1,h1,Ts,2 ,2 ,2 )
120-
121- @test updatestate! (nonlinmodel, zeros (2 ,)) ≈ zeros (2 )
122- @test updatestate! (nonlinmodel, zeros (2 ,), Float64[]) ≈ zeros (2 )
123- @test nonlinmodel. x ≈ zeros (2 )
124- @test evaloutput (nonlinmodel) ≈ nonlinmodel () ≈ zeros (2 )
125- @test evaloutput (nonlinmodel, Float64[]) ≈ nonlinmodel (Float64[]) ≈ zeros (2 )
126-
127- @test_throws DimensionMismatch updatestate! (nonlinmodel, zeros (2 ), zeros (1 ))
128- @test_throws DimensionMismatch evaloutput (nonlinmodel, zeros (1 ))
116+ linmodel1 = LinModel (sys,Ts,i_u= [1 ,2 ])
117+ f1 (x,u,_) = linmodel1. A* x + linmodel1. Bu* u
118+ h1 (x,_) = linmodel1. C* x
119+ nonlinmodel = NonLinModel (f1,h1,Ts,2 ,2 ,2 )
120+
121+ @test updatestate! (nonlinmodel, zeros (2 ,)) ≈ zeros (2 )
122+ @test updatestate! (nonlinmodel, zeros (2 ,), Float64[]) ≈ zeros (2 )
123+ @test nonlinmodel. x ≈ zeros (2 )
124+ @test evaloutput (nonlinmodel) ≈ nonlinmodel () ≈ zeros (2 )
125+ @test evaloutput (nonlinmodel, Float64[]) ≈ nonlinmodel (Float64[]) ≈ zeros (2 )
126+
127+ @test_throws DimensionMismatch updatestate! (nonlinmodel, zeros (2 ), zeros (1 ))
128+ @test_throws DimensionMismatch evaloutput (nonlinmodel, zeros (1 ))
129129end
0 commit comments