@@ -5,60 +5,49 @@ C_212 = ss([-5 -3; 2 -9], [1; 2], [1 0; 0 1], [0; 0])
55C_221 = ss ([- 5 - 3 ; 2 - 9 ], [1 0 ; 0 2 ], [1 0 ], [0 0 ])
66C_222_d = ss ([- 5 - 3 ; 2 - 9 ], [1 0 ; 0 2 ], [1 0 ; 0 1 ], [1 0 ; 0 1 ])
77
8- @test c2d (ss (4 * [1 0 ; 0 1 ]), 0.5 , :zoh ) == (ss (4 * [1 0 ; 0 1 ], 0.5 ), zeros (0 , 2 ))
9- @test c2d (ss (4 * [1 0 ; 0 1 ]), 0.5 , :foh ) == (ss (4 * [1 0 ; 0 1 ], 0.5 ), zeros (0 , 2 ))
10- @test_c2d ( c2d (C_111, 0.01 , :zoh ),
11- ss ([0.951229424500714 ], [0.019508230199714396 ], [3 ], [0 ], 0.01 ), [1 0 ], true )
12- @test_c2d ( c2d (C_111, 0.01 , :foh ),
8+ @test c2d_x0map (ss (4 * [1 0 ; 0 1 ]), 0.5 , :zoh ) == (ss (4 * [1 0 ; 0 1 ], 0.5 ), zeros (0 , 2 ))
9+ @test c2d_x0map (ss (4 * [1 0 ; 0 1 ]), 0.5 , :foh ) == (ss (4 * [1 0 ; 0 1 ], 0.5 ), zeros (0 , 2 ))
10+ @test_tupleapprox ( c2d_x0map (C_111, 0.01 , :zoh ),
11+ ss ([0.951229424500714 ], [0.019508230199714396 ], [3 ], [0 ], 0.01 ), [1 0 ])
12+ @test_tupleapprox ( c2d_x0map (C_111, 0.01 , :foh ),
1313 ss ([0.951229424500714 ], [0.01902855227625244 ], [3 ], [0.029506188017136226 ], 0.01 ),
14- [1 - 0.009835396005712075 ], true )
15- @test_c2d ( c2d (C_212, 0.01 , :zoh ),
14+ [1 - 0.009835396005712075 ])
15+ @test_tupleapprox ( c2d_x0map (C_212, 0.01 , :zoh ),
1616 ss ([0.9509478368863918 - 0.027970882212682433 ; 0.018647254808454958 0.9136533272694819 ],
1717 [0.009466805409666932 ; 0.019219966830212765 ], [1 0 ; 0 1 ], [0 ; 0 ], 0.01 ),
18- [1 0 0 ; 0 1 0 ], true )
19- @test_c2d ( c2d (C_212, 0.01 , :foh ),
18+ [1 0 0 ; 0 1 0 ])
19+ @test_tupleapprox ( c2d_x0map (C_212, 0.01 , :foh ),
2020 ss ([0.9509478368863921 - 0.027970882212682433 ; 0.018647254808454954 0.913653327269482 ],
2121 [0.008957940478201584 ; 0.018468989584974498 ], [1 0 ; 0 1 ], [0.004820885889482196 ;
22- 0.009738343195298675 ], 0.01 ), [1 0 - 0.004820885889482196 ; 0 1 - 0.009738343195298675 ], true )
23- @test_c2d ( c2d (C_221, 0.01 , :zoh ),
22+ 0.009738343195298675 ], 0.01 ), [1 0 - 0.004820885889482196 ; 0 1 - 0.009738343195298675 ])
23+ @test_tupleapprox ( c2d_x0map (C_221, 0.01 , :zoh ),
2424 ss ([0.9509478368863918 - 0.027970882212682433 ; 0.018647254808454958 0.9136533272694819 ],
2525 [0.009753161420545834 - 0.0002863560108789034 ; 9.54520036263011e-5 0.019124514826586465 ],
26- [1.0 0.0 ], [0.0 0.0 ], 0.01 ), [1 0 0 0 ; 0 1 0 0 ], true )
27- @test_c2d ( c2d (C_221, 0.01 , :foh ),
26+ [1.0 0.0 ], [0.0 0.0 ], 0.01 ), [1 0 0 0 ; 0 1 0 0 ])
27+ @test_tupleapprox ( c2d_x0map (C_221, 0.01 , :foh ),
2828 ss ([0.9509478368863921 - 0.027970882212682433 ; 0.018647254808454954 0.913653327269482 ],
2929 [0.009511049106772921 - 0.0005531086285713394 ; 0.00018436954285711309 0.018284620042117387 ],
3030 [1 0 ], [0.004917457305816479 - 9.657141633428213e-5 ], 0.01 ),
3131 [1 0 - 0.004917457305816479 9.657141633428213e-5 ;
32- 0 1 - 3.219047211142736e-5 - 0.009706152723187249 ], true )
33- @test_c2d ( c2d (C_222_d, 0.01 , :zoh ),
32+ 0 1 - 3.219047211142736e-5 - 0.009706152723187249 ])
33+ @test_tupleapprox ( c2d_x0map (C_222_d, 0.01 , :zoh ),
3434 ss ([0.9509478368863918 - 0.027970882212682433 ; 0.018647254808454958 0.9136533272694819 ],
3535 [0.009753161420545834 - 0.0002863560108789034 ; 9.54520036263011e-5 0.019124514826586465 ],
36- [1 0 ; 0 1 ], [1 0 ; 0 1 ], 0.01 ), [1 0 0 0 ; 0 1 0 0 ], true )
37- @test_c2d ( c2d (C_222_d, 0.01 , :foh ),
36+ [1 0 ; 0 1 ], [1 0 ; 0 1 ], 0.01 ), [1 0 0 0 ; 0 1 0 0 ])
37+ @test_tupleapprox ( c2d_x0map (C_222_d, 0.01 , :foh ),
3838 ss ([0.9509478368863921 - 0.027970882212682433 ; 0.018647254808454954 0.913653327269482 ],
3939 [0.009511049106772921 - 0.0005531086285713394 ; 0.00018436954285711309 0.018284620042117387 ],
4040 [1 0 ; 0 1 ], [1.0049174573058164 - 9.657141633428213e-5 ; 3.219047211142736e-5 1.0097061527231872 ], 0.01 ),
41- [1 0 - 0.004917457305816479 9.657141633428213e-5 ; 0 1 - 3.219047211142736e-5 - 0.009706152723187249 ], true )
42-
43- # Test some false
44- @test_c2d (c2d (2 C_111, 0.01 , :zoh ), # Factor 2
45- ss ([0.951229424500714 ], [0.019508230199714396 ], [3 ], [0 ], 0.01 ), [1 0 ], false )
46- @test_c2d (c2d (C_111, 0.01 , :foh ), # Wrong C
47- ss ([0.951229424500714 ], [0.01902855227625244 ], [3 * 3 ], [0.029506188017136226 ], 0.01 ),
48- [1 - 0.009835396005712075 ], false )
49- @test_c2d (c2d (C_212, 0.1 , :zoh ), # Wrong Ts
50- ss ([0.9509478368863918 - 0.027970882212682433 ; 0.018647254808454958 0.9136533272694819 ],
51- [0.009466805409666932 ; 0.019219966830212765 ], [1 0 ; 0 1 ], [0 ; 0 ], 0.01 ),
52- [1 0 0 ; 0 1 0 ], false )
41+ [1 0 - 0.004917457305816479 9.657141633428213e-5 ; 0 1 - 3.219047211142736e-5 - 0.009706152723187249 ])
5342
5443# Test c2d for transfer functions
5544G = tf ([1 , 1 ], [1 , 3 , 1 ])
5645Gd = c2d (G, 0.2 )
5746@test Gd ≈ tf ([0 , 0.165883310712090 , - 0.135903621603238 ], [1.0 , - 1.518831946985175 , 0.548811636094027 ], 0.2 ) rtol= 1e-14
5847
5948# Issue #391
60- @test c2d (tf (C_111), 0.01 , :zoh ) ≈ tf (c2d (C_111, 0.01 , :zoh )[ 1 ] )
61- @test c2d (tf (C_111), 0.01 , :foh ) ≈ tf (c2d (C_111, 0.01 , :foh )[ 1 ] )
49+ @test c2d (tf (C_111), 0.01 , :zoh ) ≈ tf (c2d (C_111, 0.01 , :zoh ))
50+ @test c2d (tf (C_111), 0.01 , :foh ) ≈ tf (c2d (C_111, 0.01 , :foh ))
6251
6352# c2d on a zpk model should arguably return a zpk model
6453@test_broken typeof (c2d (zpk (G), 1 )) <: TransferFunction{<:ControlSystems.SisoZpk}
@@ -72,27 +61,27 @@ Gd = c2d(G, 0.2)
7261
7362# d2c
7463@static if VERSION > v " 1.4" # log(matrix) is buggy on previous versions, should be fixed in 1.4 and back-ported to 1.0.6
75- @test d2c (c2d (C_111, 0.01 )[ 1 ] ) ≈ C_111
76- @test d2c (c2d (C_212, 0.01 )[ 1 ] ) ≈ C_212
77- @test d2c (c2d (C_221, 0.01 )[ 1 ] ) ≈ C_221
78- @test d2c (c2d (C_222_d, 0.01 )[ 1 ] ) ≈ C_222_d
64+ @test d2c (c2d (C_111, 0.01 )) ≈ C_111
65+ @test d2c (c2d (C_212, 0.01 )) ≈ C_212
66+ @test d2c (c2d (C_221, 0.01 )) ≈ C_221
67+ @test d2c (c2d (C_222_d, 0.01 )) ≈ C_222_d
7968 @test d2c (Gd) ≈ G
8069
8170 sys = ss ([0 1 ; 0 0 ], [0 ;1 ], [1 0 ], 0 )
82- sysd = c2d (sys, 1 )[ 1 ]
71+ sysd = c2d (sys, 1 )
8372 @test d2c (sysd) ≈ sys
8473end
8574
8675# forward euler
87- @test c2d (C_111, 1 , :fwdeuler )[ 1 ] . A == I + C_111. A
88- @test d2c (c2d (C_111, 0.01 , :fwdeuler )[ 1 ] , :fwdeuler ) ≈ C_111
89- @test d2c (c2d (C_212, 0.01 , :fwdeuler )[ 1 ] , :fwdeuler ) ≈ C_212
90- @test d2c (c2d (C_221, 0.01 , :fwdeuler )[ 1 ] , :fwdeuler ) ≈ C_221
91- @test d2c (c2d (C_222_d, 0.01 , :fwdeuler )[ 1 ] , :fwdeuler ) ≈ C_222_d
76+ @test c2d (C_111, 1 , :fwdeuler ). A == I + C_111. A
77+ @test d2c (c2d (C_111, 0.01 , :fwdeuler ), :fwdeuler ) ≈ C_111
78+ @test d2c (c2d (C_212, 0.01 , :fwdeuler ), :fwdeuler ) ≈ C_212
79+ @test d2c (c2d (C_221, 0.01 , :fwdeuler ), :fwdeuler ) ≈ C_221
80+ @test d2c (c2d (C_222_d, 0.01 , :fwdeuler ), :fwdeuler ) ≈ C_222_d
9281@test d2c (c2d (G, 0.01 , :fwdeuler ), :fwdeuler ) ≈ G
9382
9483
95- Cd = c2d (C_111, 0.001 , :fwdeuler )[ 1 ]
84+ Cd = c2d (C_111, 0.001 , :fwdeuler )
9685t = 0 : 0.001 : 2
9786y,_ = step (C_111, t)
9887yd,_ = step (Cd, t)
@@ -130,4 +119,3 @@ p = pole(Gcl)
130119
131120
132121end
133-
0 commit comments