|
50 | 50 | from scipy.linalg import eigvals, solve |
51 | 51 | from scipy import zeros,dot |
52 | 52 | from control.mateqn import lyap,dlyap,care,dare |
53 | | -from control.exception import slycot_check |
| 53 | +from control.exception import slycot_check, ControlArgument |
54 | 54 |
|
55 | 55 | @unittest.skipIf(not slycot_check(), "slycot not installed") |
56 | 56 | class TestMatrixEquations(unittest.TestCase): |
@@ -243,6 +243,62 @@ def test_dare_g(self): |
243 | 243 | lam = eigvals(A - B.dot(G), E) |
244 | 244 | assert_array_less(abs(lam), 1.0) |
245 | 245 |
|
| 246 | + def test_raise(self): |
| 247 | + """ Test exception raise for invalid inputs """ |
| 248 | + |
| 249 | + # correct shapes and forms |
| 250 | + A = array([[1, 0], [-1, -1]]) |
| 251 | + Q = array([[2, 1], [1, 2]]) |
| 252 | + C = array([[1, 0], [0, 1]]) |
| 253 | + E = array([[2, 1], [1, 2]]) |
| 254 | + |
| 255 | + # these fail |
| 256 | + Afq = array([[1, 0, 0], [-1, -1, 0]]) |
| 257 | + Qfq = array([[2, 1, 0], [1, 2, 0]]) |
| 258 | + Qfs = array([[2, 1], [-1, 2]]) |
| 259 | + Cfd = array([[1, 0, 0], [0, 1, 0]]) |
| 260 | + Efq = array([[2, 1, 0], [1, 2, 0]]) |
| 261 | + |
| 262 | + for cdlyap in [lyap, dlyap]: |
| 263 | + assert_raises(ControlArgument, cdlyap, Afq, Q) |
| 264 | + assert_raises(ControlArgument, cdlyap, A, Qfq) |
| 265 | + assert_raises(ControlArgument, cdlyap, A, Qfs) |
| 266 | + assert_raises(ControlArgument, cdlyap, Afq, Q, C) |
| 267 | + assert_raises(ControlArgument, cdlyap, A, Qfq, C) |
| 268 | + assert_raises(ControlArgument, cdlyap, A, Q, Cfd) |
| 269 | + assert_raises(ControlArgument, cdlyap, A, Qfq, None, E) |
| 270 | + assert_raises(ControlArgument, cdlyap, A, Q, None, Efq) |
| 271 | + assert_raises(ControlArgument, cdlyap, A, Qfs, None, E) |
| 272 | + assert_raises(ControlArgument, cdlyap, A, Q, C, E) |
| 273 | + |
| 274 | + B = array([[1, 0], [0, 1]]) |
| 275 | + Bf = array([[1, 0], [0, 1], [1, 1]]) |
| 276 | + R = Q |
| 277 | + Rfs = Qfs |
| 278 | + Rfq = Qfq |
| 279 | + S = array([[0, 0], [0, 0]]) |
| 280 | + Sf = array([[0, 0, 0], [0, 0, 0]]) |
| 281 | + E = array([[2, 1], [1, 2]]) |
| 282 | + Ef = array([[2, 1], [1, 2], [1, 2]]) |
| 283 | + |
| 284 | + assert_raises(ControlArgument, care, Afq, B, Q) |
| 285 | + assert_raises(ControlArgument, care, A, B, Qfq) |
| 286 | + assert_raises(ControlArgument, care, A, Bf, Q) |
| 287 | + assert_raises(ControlArgument, care, 1, B, 1) |
| 288 | + assert_raises(ControlArgument, care, A, B, Qfs) |
| 289 | + assert_raises(ValueError, dare, A, B, Q, Rfs) |
| 290 | + for cdare in [care, dare]: |
| 291 | + assert_raises(ControlArgument, cdare, Afq, B, Q, R, S, E) |
| 292 | + assert_raises(ControlArgument, cdare, A, B, Qfq, R, S, E) |
| 293 | + assert_raises(ControlArgument, cdare, A, Bf, Q, R, S, E) |
| 294 | + assert_raises(ControlArgument, cdare, A, B, Q, R, S, Ef) |
| 295 | + assert_raises(ControlArgument, cdare, A, B, Q, Rfq, S, E) |
| 296 | + assert_raises(ControlArgument, cdare, A, B, Q, R, Sf, E) |
| 297 | + assert_raises(ControlArgument, cdare, A, B, Qfs, R, S, E) |
| 298 | + assert_raises(ControlArgument, cdare, A, B, Q, Rfs, S, E) |
| 299 | + assert_raises(ControlArgument, cdare, A, B, Q, R, S) |
| 300 | + |
| 301 | + |
246 | 302 | def suite(): |
247 | 303 | return unittest.TestLoader().loadTestsFromTestCase(TestMatrixEquations) |
248 | 304 |
|
|
0 commit comments