Skip to content

Commit b0ab5ba

Browse files
author
Benjamin Greiner
committed
mateqn_test array instead of deprecated matrix
1 parent 37aacb7 commit b0ab5ba

File tree

1 file changed

+100
-92
lines changed

1 file changed

+100
-92
lines changed

control/tests/mateqn_test.py

Lines changed: 100 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,9 @@
4343
"""
4444

4545
import unittest
46-
from numpy import matrix
47-
from numpy.testing import assert_array_almost_equal, assert_array_less
46+
from numpy import array
47+
from numpy.testing import assert_array_almost_equal, assert_array_less, \
48+
assert_raises
4849
# need scipy version of eigvals for generalized eigenvalue problem
4950
from scipy.linalg import eigvals, solve
5051
from scipy import zeros,dot
@@ -56,183 +57,190 @@ class TestMatrixEquations(unittest.TestCase):
5657
"""These are tests for the matrix equation solvers in mateqn.py"""
5758

5859
def test_lyap(self):
59-
A = matrix([[-1, 1],[-1, 0]])
60-
Q = matrix([[1,0],[0,1]])
60+
A = array([[-1, 1],[-1, 0]])
61+
Q = array([[1,0],[0,1]])
6162
X = lyap(A,Q)
6263
# print("The solution obtained is ", X)
63-
assert_array_almost_equal(A * X + X * A.T + Q, zeros((2,2)))
64+
assert_array_almost_equal(A.dot(X) + X.dot(A.T) + Q, zeros((2,2)))
6465

65-
A = matrix([[1, 2],[-3, -4]])
66-
Q = matrix([[3, 1],[1, 1]])
66+
A = array([[1, 2],[-3, -4]])
67+
Q = array([[3, 1],[1, 1]])
6768
X = lyap(A,Q)
6869
# print("The solution obtained is ", X)
69-
assert_array_almost_equal(A * X + X * A.T + Q, zeros((2,2)))
70+
assert_array_almost_equal(A.dot(X) + X.dot(A.T) + Q, zeros((2,2)))
7071

7172
def test_lyap_sylvester(self):
7273
A = 5
73-
B = matrix([[4, 3], [4, 3]])
74-
C = matrix([2, 1])
74+
B = array([[4, 3], [4, 3]])
75+
C = array([2, 1])
7576
X = lyap(A,B,C)
7677
# print("The solution obtained is ", X)
77-
assert_array_almost_equal(A * X + X * B + C, zeros((1,2)))
78+
assert_array_almost_equal(A * X + X.dot(B) + C, zeros((1,2)))
7879

79-
A = matrix([[2,1],[1,2]])
80-
B = matrix([[1,2],[0.5,0.1]])
81-
C = matrix([[1,0],[0,1]])
80+
A = array([[2,1],[1,2]])
81+
B = array([[1,2],[0.5,0.1]])
82+
C = array([[1,0],[0,1]])
8283
X = lyap(A,B,C)
8384
# print("The solution obtained is ", X)
84-
assert_array_almost_equal(A * X + X * B + C, zeros((2,2)))
85+
assert_array_almost_equal(A.dot(X) + X.dot(B) + C, zeros((2,2)))
8586

8687
def test_lyap_g(self):
87-
A = matrix([[-1, 2],[-3, -4]])
88-
Q = matrix([[3, 1],[1, 1]])
89-
E = matrix([[1,2],[2,1]])
88+
A = array([[-1, 2],[-3, -4]])
89+
Q = array([[3, 1],[1, 1]])
90+
E = array([[1,2],[2,1]])
9091
X = lyap(A,Q,None,E)
9192
# print("The solution obtained is ", X)
92-
assert_array_almost_equal(A * X * E.T + E * X * A.T + Q, zeros((2,2)))
93+
assert_array_almost_equal(A.dot(X).dot(E.T) + E.dot(X).dot(A.T) + Q, zeros((2,2)))
9394

9495
def test_dlyap(self):
95-
A = matrix([[-0.6, 0],[-0.1, -0.4]])
96-
Q = matrix([[1,0],[0,1]])
96+
A = array([[-0.6, 0],[-0.1, -0.4]])
97+
Q = array([[1,0],[0,1]])
9798
X = dlyap(A,Q)
9899
# print("The solution obtained is ", X)
99-
assert_array_almost_equal(A * X * A.T - X + Q, zeros((2,2)))
100+
assert_array_almost_equal(A.dot(X).dot(A.T) - X + Q, zeros((2,2)))
100101

101-
A = matrix([[-0.6, 0],[-0.1, -0.4]])
102-
Q = matrix([[3, 1],[1, 1]])
102+
A = array([[-0.6, 0],[-0.1, -0.4]])
103+
Q = array([[3, 1],[1, 1]])
103104
X = dlyap(A,Q)
104105
# print("The solution obtained is ", X)
105-
assert_array_almost_equal(A * X * A.T - X + Q, zeros((2,2)))
106+
assert_array_almost_equal(A.dot(X).dot(A.T) - X + Q, zeros((2,2)))
106107

107108
def test_dlyap_g(self):
108-
A = matrix([[-0.6, 0],[-0.1, -0.4]])
109-
Q = matrix([[3, 1],[1, 1]])
110-
E = matrix([[1, 1],[2, 1]])
109+
A = array([[-0.6, 0],[-0.1, -0.4]])
110+
Q = array([[3, 1],[1, 1]])
111+
E = array([[1, 1],[2, 1]])
111112
X = dlyap(A,Q,None,E)
112113
# print("The solution obtained is ", X)
113-
assert_array_almost_equal(A * X * A.T - E * X * E.T + Q, zeros((2,2)))
114+
assert_array_almost_equal(A.dot(X).dot(A.T) - E.dot(X).dot(E.T) + Q, zeros((2,2)))
114115

115116
def test_dlyap_sylvester(self):
116117
A = 5
117-
B = matrix([[4, 3], [4, 3]])
118-
C = matrix([2, 1])
118+
B = array([[4, 3], [4, 3]])
119+
C = array([2, 1])
119120
X = dlyap(A,B,C)
120121
# print("The solution obtained is ", X)
121-
assert_array_almost_equal(A * X * B.T - X + C, zeros((1,2)))
122+
assert_array_almost_equal(A * X.dot(B.T) - X + C, zeros((1,2)))
122123

123-
A = matrix([[2,1],[1,2]])
124-
B = matrix([[1,2],[0.5,0.1]])
125-
C = matrix([[1,0],[0,1]])
124+
A = array([[2,1],[1,2]])
125+
B = array([[1,2],[0.5,0.1]])
126+
C = array([[1,0],[0,1]])
126127
X = dlyap(A,B,C)
127128
# print("The solution obtained is ", X)
128-
assert_array_almost_equal(A * X * B.T - X + C, zeros((2,2)))
129+
assert_array_almost_equal(A.dot(X).dot(B.T) - X + C, zeros((2,2)))
129130

130131
def test_care(self):
131-
A = matrix([[-2, -1],[-1, -1]])
132-
Q = matrix([[0, 0],[0, 1]])
133-
B = matrix([[1, 0],[0, 4]])
132+
A = array([[-2, -1],[-1, -1]])
133+
Q = array([[0, 0],[0, 1]])
134+
B = array([[1, 0],[0, 4]])
134135

135136
X,L,G = care(A,B,Q)
136137
# print("The solution obtained is", X)
137-
assert_array_almost_equal(A.T * X + X * A - X * B * B.T * X + Q,
138+
assert_array_almost_equal(A.T.dot(X) + X.dot(A) - X.dot(B).dot(B.T).dot(X) + Q,
138139
zeros((2,2)))
139-
assert_array_almost_equal(B.T * X, G)
140+
assert_array_almost_equal(B.T.dot(X), G)
140141

141142
def test_care_g(self):
142-
A = matrix([[-2, -1],[-1, -1]])
143-
Q = matrix([[0, 0],[0, 1]])
144-
B = matrix([[1, 0],[0, 4]])
145-
R = matrix([[2, 0],[0, 1]])
146-
S = matrix([[0, 0],[0, 0]])
147-
E = matrix([[2, 1],[1, 2]])
143+
A = array([[-2, -1],[-1, -1]])
144+
Q = array([[0, 0],[0, 1]])
145+
B = array([[1, 0],[0, 4]])
146+
R = array([[2, 0],[0, 1]])
147+
S = array([[0, 0],[0, 0]])
148+
E = array([[2, 1],[1, 2]])
148149

149150
X,L,G = care(A,B,Q,R,S,E)
150151
# print("The solution obtained is", X)
152+
Gref = solve(R, B.T.dot(X).dot(E) + S.T)
153+
assert_array_almost_equal(Gref, G)
151154
assert_array_almost_equal(
152-
A.T * X * E + E.T * X * A -
153-
(E.T * X * B + S) * solve(R, B.T * X * E + S.T) + Q, zeros((2,2)))
154-
assert_array_almost_equal(solve(R, B.T * X * E + S.T), G)
155+
A.T.dot(X).dot(E) + E.T.dot(X).dot(A)
156+
- (E.T.dot(X).dot(B) + S).dot(Gref) + Q,
157+
zeros((2,2)))
155158

156-
A = matrix([[-2, -1],[-1, -1]])
157-
Q = matrix([[0, 0],[0, 1]])
158-
B = matrix([[1],[0]])
159+
A = array([[-2, -1],[-1, -1]])
160+
Q = array([[0, 0],[0, 1]])
161+
B = array([[1],[0]])
159162
R = 1
160-
S = matrix([[1],[0]])
161-
E = matrix([[2, 1],[1, 2]])
163+
S = array([[1],[0]])
164+
E = array([[2, 1],[1, 2]])
162165

163166
X,L,G = care(A,B,Q,R,S,E)
164167
# print("The solution obtained is", X)
168+
Gref = 1/R * (B.T.dot(X).dot(E) + S.T)
165169
assert_array_almost_equal(
166-
A.T * X * E + E.T * X * A -
167-
(E.T * X * B + S) / R * (B.T * X * E + S.T) + Q , zeros((2,2)))
168-
assert_array_almost_equal(dot( 1/R , dot(B.T,dot(X,E)) + S.T) , G)
170+
A.T.dot(X).dot(E) + E.T.dot(X).dot(A)
171+
- (E.T.dot(X).dot(B) + S).dot(Gref) + Q ,
172+
zeros((2,2)))
173+
assert_array_almost_equal(Gref , G)
169174

170175
def test_dare(self):
171-
A = matrix([[-0.6, 0],[-0.1, -0.4]])
172-
Q = matrix([[2, 1],[1, 0]])
173-
B = matrix([[2, 1],[0, 1]])
174-
R = matrix([[1, 0],[0, 1]])
176+
A = array([[-0.6, 0],[-0.1, -0.4]])
177+
Q = array([[2, 1],[1, 0]])
178+
B = array([[2, 1],[0, 1]])
179+
R = array([[1, 0],[0, 1]])
175180

176181
X,L,G = dare(A,B,Q,R)
177182
# print("The solution obtained is", X)
183+
Gref = solve(B.T.dot(X).dot(B) + R, B.T.dot(X).dot(A))
184+
assert_array_almost_equal(Gref, G)
178185
assert_array_almost_equal(
179-
A.T * X * A - X -
180-
A.T * X * B * solve(B.T * X * B + R, B.T * X * A) + Q, zeros((2,2)))
181-
assert_array_almost_equal(solve(B.T * X * B + R, B.T * X * A), G)
186+
A.T.dot(X).dot(A) - X -
187+
A.T.dot(X).dot(B).dot(Gref) + Q,
188+
zeros((2,2)))
182189
# check for stable closed loop
183-
lam = eigvals(A - B * G)
190+
lam = eigvals(A - B.dot(G))
184191
assert_array_less(abs(lam), 1.0)
185192

186-
A = matrix([[1, 0],[-1, 1]])
187-
Q = matrix([[0, 1],[1, 1]])
188-
B = matrix([[1],[0]])
193+
A = array([[1, 0],[-1, 1]])
194+
Q = array([[0, 1],[1, 1]])
195+
B = array([[1],[0]])
189196
R = 2
190197

191198
X,L,G = dare(A,B,Q,R)
192199
# print("The solution obtained is", X)
193200
assert_array_almost_equal(
194-
A.T * X * A - X -
195-
A.T * X * B * solve(B.T * X * B + R, B.T * X * A) + Q, zeros((2,2)))
196-
assert_array_almost_equal(B.T * X * A / (B.T * X * B + R), G)
201+
A.T.dot(X).dot(A) - X -
202+
A.T.dot(X).dot(B) * solve(B.T.dot(X).dot(B) + R, B.T.dot(X).dot(A)) + Q, zeros((2,2)))
203+
assert_array_almost_equal(B.T.dot(X).dot(A) / (B.T.dot(X).dot(B) + R), G)
197204
# check for stable closed loop
198-
lam = eigvals(A - B * G)
205+
lam = eigvals(A - B.dot(G))
199206
assert_array_less(abs(lam), 1.0)
200207

201208
def test_dare_g(self):
202-
A = matrix([[-0.6, 0],[-0.1, -0.4]])
203-
Q = matrix([[2, 1],[1, 3]])
204-
B = matrix([[1, 5],[2, 4]])
205-
R = matrix([[1, 0],[0, 1]])
206-
S = matrix([[1, 0],[2, 0]])
207-
E = matrix([[2, 1],[1, 2]])
209+
A = array([[-0.6, 0],[-0.1, -0.4]])
210+
Q = array([[2, 1],[1, 3]])
211+
B = array([[1, 5],[2, 4]])
212+
R = array([[1, 0],[0, 1]])
213+
S = array([[1, 0],[2, 0]])
214+
E = array([[2, 1],[1, 2]])
208215

209216
X,L,G = dare(A,B,Q,R,S,E)
210217
# print("The solution obtained is", X)
218+
Gref = solve(B.T.dot(X).dot(B) + R, B.T.dot(X).dot(A) + S.T)
219+
assert_array_almost_equal(Gref,G)
211220
assert_array_almost_equal(
212-
A.T * X * A - E.T * X * E -
213-
(A.T * X * B + S) * solve(B.T * X * B + R, B.T * X * A + S.T) + Q,
221+
A.T.dot(X).dot(A) - E.T.dot(X).dot(E)
222+
- (A.T.dot(X).dot(B) + S).dot(Gref) + Q,
214223
zeros((2,2)) )
215-
assert_array_almost_equal(solve(B.T * X * B + R, B.T * X * A + S.T), G)
216224
# check for stable closed loop
217-
lam = eigvals(A - B * G, E)
225+
lam = eigvals(A - B.dot(G), E)
218226
assert_array_less(abs(lam), 1.0)
219227

220-
A = matrix([[-0.6, 0],[-0.1, -0.4]])
221-
Q = matrix([[2, 1],[1, 3]])
222-
B = matrix([[1],[2]])
228+
A = array([[-0.6, 0],[-0.1, -0.4]])
229+
Q = array([[2, 1],[1, 3]])
230+
B = array([[1],[2]])
223231
R = 1
224-
S = matrix([[1],[2]])
225-
E = matrix([[2, 1],[1, 2]])
232+
S = array([[1],[2]])
233+
E = array([[2, 1],[1, 2]])
226234

227235
X,L,G = dare(A,B,Q,R,S,E)
228236
# print("The solution obtained is", X)
229237
assert_array_almost_equal(
230-
A.T * X * A - E.T * X * E -
231-
(A.T * X * B + S) * solve(B.T * X * B + R, B.T * X * A + S.T) + Q,
238+
A.T.dot(X).dot(A) - E.T.dot(X).dot(E) -
239+
(A.T.dot(X).dot(B) + S).dot(solve(B.T.dot(X).dot(B) + R, B.T.dot(X).dot(A) + S.T)) + Q,
232240
zeros((2,2)) )
233-
assert_array_almost_equal((B.T * X * A + S.T) / (B.T * X * B + R), G)
241+
assert_array_almost_equal((B.T.dot(X).dot(A) + S.T) / (B.T.dot(X).dot(B) + R), G)
234242
# check for stable closed loop
235-
lam = eigvals(A - B * G, E)
243+
lam = eigvals(A - B.dot(G), E)
236244
assert_array_less(abs(lam), 1.0)
237245

238246
def suite():

0 commit comments

Comments
 (0)