43
43
"""
44
44
45
45
import unittest
46
- from numpy import array
46
+ from numpy import matrix
47
47
from numpy .testing import assert_array_almost_equal
48
48
from numpy .linalg import inv
49
49
from scipy import zeros ,dot
@@ -55,175 +55,172 @@ class TestMatrixEquations(unittest.TestCase):
55
55
"""These are tests for the matrix equation solvers in mateqn.py"""
56
56
57
57
def test_lyap (self ):
58
- A = array ([[- 1 , 1 ],[- 1 , 0 ]])
59
- Q = array ([[1 ,0 ],[0 ,1 ]])
58
+ A = matrix ([[- 1 , 1 ],[- 1 , 0 ]])
59
+ Q = matrix ([[1 ,0 ],[0 ,1 ]])
60
60
X = lyap (A ,Q )
61
61
# print("The solution obtained is ", X)
62
- assert_array_almost_equal (dot ( A , X ) + dot ( X , A .T ) + Q , zeros ((2 ,2 )))
62
+ assert_array_almost_equal (A * X + X * A .T + Q , zeros ((2 ,2 )))
63
63
64
- A = array ([[1 , 2 ],[- 3 , - 4 ]])
65
- Q = array ([[3 , 1 ],[1 , 1 ]])
64
+ A = matrix ([[1 , 2 ],[- 3 , - 4 ]])
65
+ Q = matrix ([[3 , 1 ],[1 , 1 ]])
66
66
X = lyap (A ,Q )
67
67
# print("The solution obtained is ", X)
68
- assert_array_almost_equal (dot ( A , X ) + dot ( X , A .T ) + Q , zeros ((2 ,2 )))
68
+ assert_array_almost_equal (A * X + X * A .T + Q , zeros ((2 ,2 )))
69
69
70
70
def test_lyap_sylvester (self ):
71
71
A = 5
72
- B = array ([[4 , 3 ], [4 , 3 ]])
73
- C = array ([2 , 1 ])
72
+ B = matrix ([[4 , 3 ], [4 , 3 ]])
73
+ C = matrix ([2 , 1 ])
74
74
X = lyap (A ,B ,C )
75
75
# print("The solution obtained is ", X)
76
- assert_array_almost_equal (dot ( A , X ) + dot ( X , B ) + C , zeros ((1 ,2 )))
76
+ assert_array_almost_equal (A * X + X * B + C , zeros ((1 ,2 )))
77
77
78
- A = array ([[2 ,1 ],[1 ,2 ]])
79
- B = array ([[1 ,2 ],[0.5 ,0.1 ]])
80
- C = array ([[1 ,0 ],[0 ,1 ]])
78
+ A = matrix ([[2 ,1 ],[1 ,2 ]])
79
+ B = matrix ([[1 ,2 ],[0.5 ,0.1 ]])
80
+ C = matrix ([[1 ,0 ],[0 ,1 ]])
81
81
X = lyap (A ,B ,C )
82
82
# print("The solution obtained is ", X)
83
- assert_array_almost_equal (dot ( A , X ) + dot ( X , B ) + C , zeros ((2 ,2 )))
83
+ assert_array_almost_equal (A * X + X * B + C , zeros ((2 ,2 )))
84
84
85
85
def test_lyap_g (self ):
86
- A = array ([[- 1 , 2 ],[- 3 , - 4 ]])
87
- Q = array ([[3 , 1 ],[1 , 1 ]])
88
- E = array ([[1 ,2 ],[2 ,1 ]])
86
+ A = matrix ([[- 1 , 2 ],[- 3 , - 4 ]])
87
+ Q = matrix ([[3 , 1 ],[1 , 1 ]])
88
+ E = matrix ([[1 ,2 ],[2 ,1 ]])
89
89
X = lyap (A ,Q ,None ,E )
90
90
# print("The solution obtained is ", X)
91
- assert_array_almost_equal (dot (A ,dot (X ,E .T )) + dot (E ,dot (X ,A .T )) + Q , \
92
- zeros ((2 ,2 )))
91
+ assert_array_almost_equal (A * X * E .T + E * X * A .T + Q , zeros ((2 ,2 )))
93
92
94
93
def test_dlyap (self ):
95
- A = array ([[- 0.6 , 0 ],[- 0.1 , - 0.4 ]])
96
- Q = array ([[1 ,0 ],[0 ,1 ]])
94
+ A = matrix ([[- 0.6 , 0 ],[- 0.1 , - 0.4 ]])
95
+ Q = matrix ([[1 ,0 ],[0 ,1 ]])
97
96
X = dlyap (A ,Q )
98
97
# print("The solution obtained is ", X)
99
- assert_array_almost_equal (dot ( A , dot ( X , A .T )) - X + Q , zeros ((2 ,2 )))
98
+ assert_array_almost_equal (A * X * A .T - X + Q , zeros ((2 ,2 )))
100
99
101
- A = array ([[- 0.6 , 0 ],[- 0.1 , - 0.4 ]])
102
- Q = array ([[3 , 1 ],[1 , 1 ]])
100
+ A = matrix ([[- 0.6 , 0 ],[- 0.1 , - 0.4 ]])
101
+ Q = matrix ([[3 , 1 ],[1 , 1 ]])
103
102
X = dlyap (A ,Q )
104
103
# print("The solution obtained is ", X)
105
- assert_array_almost_equal (dot ( A , dot ( X , A .T )) - X + Q , zeros ((2 ,2 )))
104
+ assert_array_almost_equal (A * X * A .T - X + Q , zeros ((2 ,2 )))
106
105
107
106
def test_dlyap_g (self ):
108
- A = array ([[- 0.6 , 0 ],[- 0.1 , - 0.4 ]])
109
- Q = array ([[3 , 1 ],[1 , 1 ]])
110
- E = array ([[1 , 1 ],[2 , 1 ]])
107
+ A = matrix ([[- 0.6 , 0 ],[- 0.1 , - 0.4 ]])
108
+ Q = matrix ([[3 , 1 ],[1 , 1 ]])
109
+ E = matrix ([[1 , 1 ],[2 , 1 ]])
111
110
X = dlyap (A ,Q ,None ,E )
112
111
# print("The solution obtained is ", X)
113
- assert_array_almost_equal (dot (A ,dot (X ,A .T ))- dot (E ,dot (X ,E .T ))+ Q , \
114
- zeros ((2 ,2 )))
112
+ assert_array_almost_equal (A * X * A .T - E * X * E .T + Q , zeros ((2 ,2 )))
115
113
116
114
def test_dlyap_sylvester (self ):
117
115
A = 5
118
- B = array ([[4 , 3 ], [4 , 3 ]])
119
- C = array ([2 , 1 ])
116
+ B = matrix ([[4 , 3 ], [4 , 3 ]])
117
+ C = matrix ([2 , 1 ])
120
118
X = dlyap (A ,B ,C )
121
119
# print("The solution obtained is ", X)
122
- assert_array_almost_equal (dot ( A , dot ( X , B .T )) - X + C , zeros ((1 ,2 )))
120
+ assert_array_almost_equal (A * X * B .T - X + C , zeros ((1 ,2 )))
123
121
124
- A = array ([[2 ,1 ],[1 ,2 ]])
125
- B = array ([[1 ,2 ],[0.5 ,0.1 ]])
126
- C = array ([[1 ,0 ],[0 ,1 ]])
122
+ A = matrix ([[2 ,1 ],[1 ,2 ]])
123
+ B = matrix ([[1 ,2 ],[0.5 ,0.1 ]])
124
+ C = matrix ([[1 ,0 ],[0 ,1 ]])
127
125
X = dlyap (A ,B ,C )
128
126
# print("The solution obtained is ", X)
129
- assert_array_almost_equal (dot ( A , dot ( X , B .T )) - X + C , zeros ((2 ,2 )))
127
+ assert_array_almost_equal (A * X * B .T - X + C , zeros ((2 ,2 )))
130
128
131
129
def test_care (self ):
132
- A = array ([[- 2 , - 1 ],[- 1 , - 1 ]])
133
- Q = array ([[0 , 0 ],[0 , 1 ]])
134
- B = array ([[1 , 0 ],[0 , 4 ]])
130
+ A = matrix ([[- 2 , - 1 ],[- 1 , - 1 ]])
131
+ Q = matrix ([[0 , 0 ],[0 , 1 ]])
132
+ B = matrix ([[1 , 0 ],[0 , 4 ]])
135
133
136
134
X ,L ,G = care (A ,B ,Q )
137
135
E377
# print("The solution obtained is", X)
138
- assert_array_almost_equal (dot ( A .T , X ) + dot ( X , A ) - \
139
- dot ( X , dot ( B , dot ( B . T , X ))) + Q , zeros ((2 ,2 )))
140
- assert_array_almost_equal (dot ( B .T , X ) , G )
136
+ assert_array_almost_equal (A .T * X + X * A - X * B * B . T * X + Q ,
137
+ zeros ((2 ,2 )))
138
+ assert_array_almost_equal (B .T * X , G )
141
139
142
140
def test_care_g (self ):
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 ]])
141
+ A = matrix ([[- 2 , - 1 ],[- 1 , - 1 ]])
142
+ Q = matrix ([[0 , 0 ],[0 , 1 ]])
143
+ B = matrix ([[1 , 0 ],[0 , 4 ]])
144
+ R = matrix ([[2 , 0 ],[0 , 1 ]])
145
+ S = matrix ([[0 , 0 ],[0 , 0 ]])
146
+ E = matrix ([[2 , 1 ],[1 , 2 ]])
149
147
150
148
X ,L ,G = care (A ,B ,Q ,R ,S ,E )
151
149
# print("The solution obtained is", X)
152
- assert_array_almost_equal (dot (A .T ,dot (X ,E )) + dot (E .T ,dot (X ,A )) - \
153
- dot (dot (dot (E .T ,dot (X ,B ))+ S ,inv (R ) ) ,
154
- dot (B .T ,dot (X ,E ))+ S .T ) + Q , \
155
- zeros ((2 ,2 )))
156
- assert_array_almost_equal (dot ( inv (R ) , dot (B .T ,dot (X ,E )) + S .T ) , G )
157
-
158
- A = array ([[- 2 , - 1 ],[- 1 , - 1 ]])
159
- Q = array ([[0 , 0 ],[0 , 1 ]])
160
- B = array ([[1 ],[0 ]])
150
+ assert_array_almost_equal (
151
+ A .T * X * E + E .T * X * A -
152
+ (E .T * X * B + S ) * inv (R ) * (B .T * X * E + S .T ) + Q , zeros ((2 ,2)))
153
+ assert_array_almost_equal (inv (R ) * (B .T * X * E + S .T ), G )
154
+
155
+ A = matrix ([[- 2 , - 1 ],[- 1 , - 1 ]])
156
+ Q = matrix ([[0 , 0 ],[0 , 1 ]])
157
+ B = matrix ([[1 ],[0 ]])
161
158
R = 1
162
- S = array ([[1 ],[0 ]])
163
- E = array ([[2 , 1 ],[1 , 2 ]])
159
+ S = matrix ([[1 ],[0 ]])
160
+ E = matrix ([[2 , 1 ],[1 , 2 ]])
164
161
165
162
X ,L ,G = care (A ,B ,Q ,R ,S ,E )
166
163
# print("The solution obtained is", X)
167
- assert_array_almost_equal (dot ( A . T , dot ( X , E )) + dot ( E . T , dot ( X , A )) - \
168
- dot ( dot ( dot ( E . T , dot ( X , B )) + S , 1 / R ) , dot ( B . T , dot ( X , E )) + S .T ) \
169
- + Q , zeros ((2 ,2 )))
164
+ assert_array_almost_equal (
165
+ A . T * X * E + E .T * X * A -
166
+ ( E . T * X * B + S ) / R * ( B . T * X * E + S . T ) + Q , zeros ((2 ,2 )))
170
167
assert_array_almost_equal (dot ( 1 / R , dot (B .T ,dot (X ,E )) + S .T ) , G )
171
168
172
169
def test_dare (self ):
173
- A = array ([[- 0.6 , 0 ],[- 0.1 , - 0.4 ]])
174
- Q = array ([[2 , 1 ],[1 , 0 ]])
175
- B = array ([[2 , 1 ],[0 , 1 ]])
176
- R = array ([[1 , 0 ],[0 , 1 ]])
170
+ A = matrix ([[- 0.6 , 0 ],[- 0.1 , - 0.4 ]])
171
+ Q = matrix ([[2 , 1 ],[1 , 0 ]])
172
+ B = matrix ([[2 , 1 ],[0 , 1 ]])
173
+ R = matrix ([[1 , 0 ],[0 , 1 ]])
177
174
178
175
X ,L ,G = dare (A ,B ,Q ,R )
179
176
# print("The solution obtained is", X)
180
- assert_array_almost_equal (dot ( A . T , dot ( X , A )) - X - dot ( dot ( dot ( A . T , dot ( X , B )) , \
181
- inv ( dot ( B . T , dot ( X , B )) + R )) , dot ( B . T , dot ( X , A ))) + Q , zeros (( 2 , 2 )) )
182
- assert_array_almost_equal ( dot ( inv ( dot ( B .T , dot ( X , B )) + R ) , \
183
- dot ( B . T , dot ( X , A )) ) , G )
184
-
185
- A = array ([[1 , 0 ],[- 1 , 1 ]])
186
- Q = array ([[0 , 1 ],[1 , 1 ]])
187
- B = array ([[1 ],[0 ]])
177
+ assert_array_almost_equal (
178
+ A . T * X * A - X -
179
+ A . T * X * B * inv (B .T * X * B + R ) * B . T * X * A + Q , zeros (( 2 , 2 )))
180
+ assert_array_almost_equal ( inv ( B . T * X * B + R ) * B . T * X * A , G )
181
+
182
+ A = matrix ([[1 , 0 ],[- 1 , 1 ]])
183
+ Q = matrix ([[0 , 1 ],[1 , 1 ]])
184
+ B = matrix ([[1 ],[0 ]])
188
185
R = 2
189
186
190
187
X ,L ,G = dare (A ,B ,Q ,R )
191
188
# print("The solution obtained is", X)
192
- assert_array_almost_equal (dot ( A . T , dot ( X , A )) - X - dot ( dot ( dot ( A . T , dot ( X , B )) , \
193
- inv ( dot ( B . T , dot ( X , B )) + R )) , dot ( B . T , dot ( X , A ))) + Q , zeros (( 2 , 2 )) )
194
- assert_array_almost_equal ( dot ( 1 / ( dot (B .T , dot ( X , B )) + R ) , \
195
- dot (B .T , dot ( X , A )) ) , G )
189
+ assert_array_almost_equal (
190
+ A . T * X * A - X -
191
+ A . T * X * B * inv (B .T * X * B + R ) * B . T * X * A + Q , zeros (( 2 , 2 )))
192
+ assert_array_almost_equal ( B . T * X * A / (B .T * X * B + R ) , G )
196
193
197
194
def test_dare_g (self ):
198
- A = array ([[- 0.6 , 0 ],[- 0.1 , - 0.4 ]])
199
- Q = array ([[2 , 1 ],[1 , 3 ]])
200
- B = array ([[1 , 5 ],[2 , 4 ]])
201
- R = array ([[1 , 0 ],[0 , 1 ]])
202
- S = array ([[1 , 0 ],[2 , 0 ]])
203
- E = array ([[2 , 1 ],[1 , 2 ]])
195
+ A = matrix ([[- 0.6 , 0 ],[- 0.1 , - 0.4 ]])
196
+ Q = matrix ([[2 , 1 ],[1 , 3 ]])
197
+ B = matrix ([[1 , 5 ],[2 , 4 ]])
198
+ R = matrix ([[1 , 0 ],[0 , 1 ]])
199
+ S = matrix ([[1 , 0 ],[2 , 0 ]])
200
+ E = matrix ([[2 , 1 ],[1 , 2 ]])
204
201
205
202
X ,L ,G = dare (A ,B ,Q ,R ,S ,E )
206
203
# print("The solution obtained is", X)
207
- assert_array_almost_equal (dot ( A . T , dot ( X , A )) - dot ( E . T , dot ( X , E )) - \
208
- dot ( dot ( A .T , dot ( X , B )) + S , dot ( inv ( dot ( B . T , dot ( X , B )) + R ) ,
209
- dot ( B . T , dot ( X , A )) + S .T )) + Q , zeros (( 2 , 2 )) )
210
- assert_array_almost_equal ( dot ( inv ( dot ( B . T , dot ( X , B )) + R ) , \
211
- dot (B .T , dot ( X , A )) + S .T ) , G )
212
-
213
- A = array ([[- 0.6 , 0 ],[- 0.1 , - 0.4 ]])
214
- Q = array ([[2 , 1 ],[1 , 3 ]])
215
- B = array ([[1 ],[2 ]])
204
+ assert_array_almost_equal (
205
+ A .T * X * A - E . T * X * E -
206
+ ( A . T * X * B + S ) * inv ( B . T * X * B + R ) * ( B . T * X * A + S .T ) + Q ,
207
+ zeros (( 2 , 2 )) )
208
+ assert_array_almost_equal ( inv ( B . T * X * B + R ) * (B .T * X * A + S .T ) , G )
209
+
210
+ A = matrix ([[- 0.6 , 0 ],[- 0.1 , - 0.4 ]])
211
+ Q = matrix ([[2 , 1 ],[1 , 3 ]])
212
+ B = matrix ([[1 ],[2 ]])
216
213
R = 1
217
- S = array ([[1 ],[2 ]])
218
- E = array ([[2 , 1 ],[1 , 2 ]])
214
+ S = matrix ([[1 ],[2 ]])
215
+ E = matrix ([[2 , 1 ],[1 , 2 ]])
219
216
220
217
X ,L ,G = dare (A ,B ,Q ,R ,S ,E )
221
218
# print("The solution obtained is", X)
222
- assert_array_almost_equal (dot ( A . T , dot ( X , A )) - dot ( E . T , dot ( X , E )) - \
223
- dot ( dot ( A .T , dot ( X , B )) + S , dot ( inv ( dot ( B . T , dot ( X , B )) + R ) ,
224
- dot ( B . T , dot ( X , A )) + S .T )) + Q , zeros (( 2 , 2 )) )
225
- assert_array_almost_equal ( dot ( 1 / ( dot ( B . T , dot ( X , B )) + R ) , \
226
- dot ( B .T , dot ( X , A )) + S .T ) , G )
219
+ assert_array_almost_equal (
220
+ A .T * X * A - E . T * X * E -
221
+ ( A . T * X * B + S ) * inv ( B . T * X * B + R ) * ( B . T * X * A + S .T ) + Q ,
222
+ zeros (( 2 , 2 )) )
223
+ assert_array_almost_equal (( B .T * X * A + S .T ) / ( B . T * X * B + R ) , G )
227
224
228
225
def suite ():
229
226
return unittest .TestLoader ().loadTestsFromTestCase (TestMatrixEquations )
0 commit comments