@@ -51,122 +51,126 @@ def testOperators(self):
51
51
h1 = TransferFunction ([1 ], [1 , 2 , 2 ])
52
52
h2 = TransferFunction ([1 ], [0.1 , 1 ])
53
53
omega = np .logspace (- 1 , 2 , 10 )
54
+ chkpts = omega [::3 ]
54
55
f1 = FRD (h1 , omega )
55
56
f2 = FRD (h2 , omega )
56
57
57
58
np .testing .assert_array_almost_equal (
58
- (f1 + f2 ).frequency_response ([ 0.1 , 1.0 , 10 ] )[0 ],
59
- (h1 + h2 ).frequency_response ([ 0.1 , 1.0 , 10 ] )[0 ])
59
+ (f1 + f2 ).frequency_response (chkpts )[0 ],
60
+ (h1 + h2 ).frequency_response (chkpts )[0 ])
60
61
np .testing .assert_array_almost_equal (
61
- (f1 + f2 ).frequency_response ([ 0.1 , 1.0 , 10 ] )[1 ],
62
- (h1 + h2 ).frequency_response ([ 0.1 , 1.0 , 10 ] )[1 ])
62
+ (f1 + f2 ).frequency_response (chkpts )[1 ],
63
+ (h1 + h2 ).frequency_response (chkpts )[1 ])
63
64
np .testing .assert_array_almost_equal (
64
- (f1 - f2 ).frequency_response ([ 0.1 , 1.0 , 10 ] )[0 ],
65
- (h1 - h2 ).frequency_response ([ 0.1 , 1.0 , 10 ] )[0 ])
65
+ (f1 - f2 ).frequency_response (chkpts )[0 ],
66
+ (h1 - h2 ).frequency_response (chkpts )[0 ])
66
67
np .testing .assert_array_almost_equal (
67
- (f1 - f2 ).frequency_response ([ 0.1 , 1.0 , 10 ] )[1 ],
68
- (h1 - h2 ).frequency_response ([ 0.1 , 1.0 , 10 ] )[1 ])
68
+ (f1 - f2 ).frequency_response (chkpts )[1 ],
69
+ (h1 - h2 ).frequency_response (chkpts )[1 ])
69
70
70
71
# multiplication and division
71
72
np .testing .assert_array_almost_equal (
72
- (f1 * f2 ).frequency_response ([ 0.1 , 1.0 , 10 ] )[1 ],
73
- (h1 * h2 ).frequency_response ([ 0.1 , 1.0 , 10 ] )[1 ])
73
+ (f1 * f2 ).frequency_response (chkpts )[1 ],
74
+ (h1 * h2 ).frequency_response (chkpts )[1 ])
74
75
np .testing .assert_array_almost_equal (
75
- (f1 / f2 ).frequency_response ([ 0.1 , 1.0 , 10 ] )[1 ],
76
- (h1 / h2 ).frequency_response ([ 0.1 , 1.0 , 10 ] )[1 ])
76
+ (f1 / f2 ).frequency_response (chkpts )[1 ],
77
+ (h1 / h2 ).frequency_response (chkpts )[1 ])
77
78
78
79
# with default conversion from scalar
79
80
np .testing .assert_array_almost_equal (
80
- (f1 * 1.5 ).frequency_response ([ 0.1 , 1.0 , 10 ] )[1 ],
81
- (h1 * 1.5 ).frequency_response ([ 0.1 , 1.0 , 10 ] )[1 ])
81
+ (f1 * 1.5 ).frequency_response (chkpts )[1 ],
82
+ (h1 * 1.5 ).frequency_response (chkpts )[1 ])
82
83
np .testing .assert_array_almost_equal (
83
- (f1 / 1.7 ).frequency_response ([ 0.1 , 1.0 , 10 ] )[1 ],
84
- (h1 / 1.7 ).frequency_response ([ 0.1 , 1.0 , 10 ] )[1 ])
84
+ (f1 / 1.7 ).frequency_response (chkpts )[1 ],
85
+ (h1 / 1.7 ).frequency_response (chkpts )[1 ])
85
86
np .testing .assert_array_almost_equal (
86
- (2.2 * f2 ).frequency_response ([ 0.1 , 1.0 , 10 ] )[1 ],
87
- (2.2 * h2 ).frequency_response ([ 0.1 , 1.0 , 10 ] )[1 ])
87
+ (2.2 * f2 ).frequency_response (chkpts )[1 ],
88
+ (2.2 * h2 ).frequency_response (chkpts )[1 ])
88
89
np .testing .assert_array_almost_equal (
89
- (1.3 / f2 ).frequency_response ([ 0.1 , 1.0 , 10 ] )[1 ],
90
- (1.3 / h2 ).frequency_response ([ 0.1 , 1.0 , 10 ] )[1 ])
90
+ (1.3 / f2 ).frequency_response (chkpts )[1 ],
91
+ (1.3 / h2 ).frequency_response (chkpts )[1 ])
91
92
92
93
def testOperatorsTf (self ):
93
94
# get two SISO transfer functions
94
95
h1 = TransferFunction ([1 ], [1 , 2 , 2 ])
95
96
h2 = TransferFunction ([1 ], [0.1 , 1 ])
96
97
omega = np .logspace (- 1 , 2 , 10 )
98
+ chkpts = omega [::3 ]
97
99
f1 = FRD (h1 , omega )
98
100
f2 = FRD (h2 , omega )
99
101
f2 # reference to avoid pyflakes error
100
102
101
103
np .testing .assert_array_almost_equal (
102
- (f1 + h2 ).frequency_response ([ 0.1 , 1.0 , 10 ] )[0 ],
103
- (h1 + h2 ).frequency_response ([ 0.1 , 1.0 , 10 ] )[0 ])
104
+ (f1 + h2 ).frequency_response (chkpts )[0 ],
105
+ (h1 + h2 ).frequency_response (chkpts )[0 ])
104
106
np .testing .assert_array_almost_equal (
105
- (f1 + h2 ).frequency_response ([ 0.1 , 1.0 , 10 ] )[1 ],
106
- (h1 + h2 ).frequency_response ([ 0.1 , 1.0 , 10 ] )[1 ])
107
+ (f1 + h2 ).frequency_response (chkpts )[1 ],
108
+ (h1 + h2 ).frequency_response (chkpts )[1 ])
107
109
np .testing .assert_array_almost_equal (
108
- (f1 - h2 ).frequency_response ([ 0.1 , 1.0 , 10 ] )[0 ],
109
- (h1 - h2 ).frequency_response ([ 0.1 , 1.0 , 10 ] )[0 ])
110
+ (f1 - h2 ).frequency_response (chkpts )[0 ],
111
+ (h1 - h2 ).frequency_response (chkpts )[0 ])
110
112
np .testing .assert_array_almost_equal (
111
- (f1 - h2 ).frequency_response ([ 0.1 , 1.0 , 10 ] )[1 ],
112
- (h1 - h2 ).frequency_response ([ 0.1 , 1.0 , 10 ] )[1 ])
113
+ (f1 - h2 ).frequency_response (chkpts )[1 ],
114
+ (h1 - h2 ).frequency_response (chkpts )[1 ])
113
115
# multiplication and division
114
116
np .testing .assert_array_almost_equal (
115
- (f1 * h2 ).frequency_response ([ 0.1 , 1.0 , 10 ] )[1 ],
116
- (h1 * h2 ).frequency_response ([ 0.1 , 1.0 , 10 ] )[1 ])
117
+ (f1 * h2 ).frequency_response (chkpts )[1 ],
118
+ (h1 * h2 ).frequency_response (chkpts )[1 ])
117
119
np .testing .assert_array_almost_equal (
118
- (f1 / h2 ).frequency_response ([ 0.1 , 1.0 , 10 ] )[1 ],
119
- (h1 / h2 ).frequency_response ([ 0.1 , 1.0 , 10 ] )[1 ])
120
+ (f1 / h2 ).frequency_response (chkpts )[1 ],
121
+ (h1 / h2 ).frequency_response (chkpts )[1 ])
120
122
# the reverse does not work
121
123
122
124
def testbdalg (self ):
123
125
# get two SISO transfer functions
124
126
h1 = TransferFunction ([1 ], [1 , 2 , 2 ])
125
127
h2 = TransferFunction ([1 ], [0.1 , 1 ])
126
128
omega = np .logspace (- 1 , 2 , 10 )
129
+ chkpts = omega [::3 ]
127
130
f1 = FRD (h1 , omega )
128
131
f2 = FRD (h2 , omega )
129
132
130
133
np .testing .assert_array_almost_equal (
131
- (bdalg .series (f1 , f2 )).frequency_response ([ 0.1 , 1.0 , 10 ] )[0 ],
132
- (bdalg .series (h1 , h2 )).frequency_response ([ 0.1 , 1.0 , 10 ] )[0 ])
134
+ (bdalg .series (f1 , f2 )).frequency_response (chkpts )[0 ],
135
+ (bdalg .series (h1 , h2 )).frequency_response (chkpts )[0 ])
133
136
134
137
np .testing .assert_array_almost_equal (
135
- (bdalg .parallel (f1 , f2 )).frequency_response ([ 0.1 , 1.0 , 10 ] )[0 ],
136
- (bdalg .parallel (h1 , h2 )).frequency_response ([ 0.1 , 1.0 , 10 ] )[0 ])
138
+ (bdalg .parallel (f1 , f2 )).frequency_response (chkpts )[0 ],
139
+ (bdalg .parallel (h1 , h2 )).frequency_response (chkpts )[0 ])
137
140
138
141
np .testing .assert_array_almost_equal (
139
- (bdalg .feedback (f1 , f2 )).frequency_response ([ 0.1 , 1.0 , 10 ] )[0 ],
140
- (bdalg .feedback (h1 , h2 )).frequency_response ([ 0.1 , 1.0 , 10 ] )[0 ])
142
+ (bdalg .feedback (f1 , f2 )).frequency_response (chkpts )[0 ],
143
+ (bdalg .feedback (h1 , h2 )).frequency_response (chkpts )[0 ])
141
144
142
145
np .testing .assert_array_almost_equal (
143
- (bdalg .negate (f1 )).frequency_response ([ 0.1 , 1.0 , 10 ] )[0 ],
144
- (bdalg .negate (h1 )).frequency_response ([ 0.1 , 1.0 , 10 ] )[0 ])
146
+ (bdalg .negate (f1 )).frequency_response (chkpts )[0 ],
147
+ (bdalg .negate (h1 )).frequency_response (chkpts )[0 ])
145
148
146
149
# append() and connect() not implemented for FRD objects
147
150
# np.testing.assert_array_almost_equal(
148
- # (bdalg.append(f1, f2)).frequency_response([0.1, 1.0, 10] )[0],
149
- # (bdalg.append(h1, h2)).frequency_response([0.1, 1.0, 10] )[0])
151
+ # (bdalg.append(f1, f2)).frequency_response(chkpts )[0],
152
+ # (bdalg.append(h1, h2)).frequency_response(chkpts )[0])
150
153
#
151
154
# f3 = bdalg.append(f1, f2, f2)
152
155
# h3 = bdalg.append(h1, h2, h2)
153
156
# Q = np.mat([ [1, 2], [2, -1] ])
154
157
# np.testing.assert_array_almost_equal(
155
- # (bdalg.connect(f3, Q, [2], [1])).frequency_response([0.1, 1.0, 10] )[0],
156
- # (bdalg.connect(h3, Q, [2], [1])).frequency_response([0.1, 1.0, 10] )[0])
158
+ # (bdalg.connect(f3, Q, [2], [1])).frequency_response(chkpts )[0],
159
+ # (bdalg.connect(h3, Q, [2], [1])).frequency_response(chkpts )[0])
157
160
158
161
def testFeedback (self ):
159
162
h1 = TransferFunction ([1 ], [1 , 2 , 2 ])
160
163
omega = np .logspace (- 1 , 2 , 10 )
164
+ chkpts = omega [::3 ]
161
165
f1 = FRD (h1 , omega )
162
166
np .testing .assert_array_almost_equal (
163
- f1 .feedback (1 ).frequency_response ([ 0.1 , 1.0 , 10 ] )[0 ],
164
- h1 .feedback (1 ).frequency_response ([ 0.1 , 1.0 , 10 ] )[0 ])
167
+ f1 .feedback (1 ).frequency_response (chkpts )[0 ],
168
+ h1 .feedback (1 ).frequency_response (chkpts )[0 ])
165
169
166
170
# Make sure default argument also works
167
171
np .testing .assert_array_almost_equal (
168
- f1 .feedback ().frequency_response ([ 0.1 , 1.0 , 10 ] )[0 ],
169
- h1 .feedback ().frequency_response ([ 0.1 , 1.0 , 10 ] )[0 ])
172
+ f1 .feedback ().frequency_response (chkpts )[0 ],
173
+ h1 .feedback ().frequency_response (chkpts )[0 ])
170
174
171
175
def testFeedback2 (self ):
172
176
h2 = StateSpace ([[- 1.0 , 0 ], [0 , - 2.0 ]], [[0.4 ], [0.1 ]],
@@ -197,13 +201,14 @@ def testMIMO(self):
197
201
[[1.0 , 0.0 ], [0.0 , 1.0 ]],
198
202
[[0.0 , 0.0 ], [0.0 , 0.0 ]])
199
203
omega = np .logspace (- 1 , 2 , 10 )
204
+ chkpts = omega [::3 ]
200
205
f1 = FRD (sys , omega )
201
206
np .testing .assert_array_almost_equal (
202
- sys .frequency_response ([ 0.1 , 1.0 , 10 ] )[0 ],
203
- f1 .frequency_response ([ 0.1 , 1.0 , 10 ] )[0 ])
207
+ sys .frequency_response (chkpts )[0 ],
208
+ f1 .frequency_response (chkpts )[0 ])
204
209
np .testing .assert_array_almost_equal (
205
- sys .frequency_response ([ 0.1 , 1.0 , 10 ] )[1 ],
206
- f1 .frequency_response ([ 0.1 , 1.0 , 10 ] )[1 ])
210
+ sys .frequency_response (chkpts )[1 ],
211
+ f1 .frequency_response (chkpts )[1 ])
207
212
208
213
@slycotonly
209
214
def testMIMOfb (self ):
@@ -212,14 +217,15 @@ def testMIMOfb(self):
212
217
[[1.0 , 0.0 ], [0.0 , 1.0 ]],
213
218
[[0.0 , 0.0 ], [0.0 , 0.0 ]])
214
219
omega = np .logspace (- 1 , 2 , 10 )
220
+ chkpts = omega [::3 ]
215
221
f1 = FRD (sys , omega ).feedback ([[0.1 , 0.3 ], [0.0 , 1.0 ]])
216
222
f2 = FRD (sys .feedback ([[0.1 , 0.3 ], [0.0 , 1.0 ]]), omega )
217
223
np .testing .assert_array_almost_equal (
218
- f1 .frequency_response ([ 0.1 , 1.0 , 10 ] )[0 ],
219
- f2 .frequency_response ([ 0.1 , 1.0 , 10 ] )[0 ])
224
+ f1 .frequency_response (chkpts )[0 ],
225
+ f2 .frequency_response (chkpts )[0 ])
220
226
np .testing .assert_array_almost_equal (
221
- f1 .frequency_response ([ 0.1 , 1.0 , 10 ] )[1 ],
222
- f2 .frequency_response ([ 0.1 , 1.0 , 10 ] )[1 ])
227
+ f1 .frequency_response (chkpts )[1 ],
228
+ f2 .frequency_response (chkpts )[1 ])
223
229
224
230
@slycotonly
225
231
def testMIMOfb2 (self ):
@@ -229,15 +235,16 @@ def testMIMOfb2(self):
229
235
np .array ([[1.0 , 0 ], [0 , 0 ], [0 , 1 ]]),
230
236
np .eye (3 ), np .zeros ((3 , 2 )))
231
237
omega = np .logspace (- 1 , 2 , 10 )
238
+ chkpts = omega [::3 ]
232
239
K = np .array ([[1 , 0.3 , 0 ], [0.1 , 0 , 0 ]])
233
240
f1 = FRD (sys , omega ).feedback (K )
234
241
f2 = FRD (sys .feedback (K ), omega )
235
242
np .testing .assert_array_almost_equal (
236
- f1 .frequency_response ([ 0.1 , 1.0 , 10 ] )[0 ],
237
- f2 .frequency_response ([ 0.1 , 1.0 , 10 ] )[0 ])
243
+ f1 .frequency_response (chkpts )[0 ],
244
+ f2 .frequency_response (chkpts )[0 ])
238
245
np .testing .assert_array_almost_equal (
239
- f1 .frequency_response ([ 0.1 , 1.0 , 10 ] )[1 ],
240
- f2 .frequency_response ([ 0.1 , 1.0 , 10 ] )[1 ])
246
+ f1 .frequency_response (chkpts )[1 ],
247
+ f2 .frequency_response (chkpts )[1 ])
241
248
242
249
@slycotonly
243
250
def testMIMOMult (self ):
@@ -246,14 +253,15 @@ def testMIMOMult(self):
246
253
[[1.0 , 0.0 ], [0.0 , 1.0 ]],
247
254
[[0.0 , 0.0 ], [0.0 , 0.0 ]])
248
255
omega = np .logspace (- 1 , 2 , 10 )
256
+ chkpts = omega [::3 ]
249
257
f1 = FRD (sys , omega )
250
258
f2 = FRD (sys , omega )
251
259
np .testing .assert_array_almost_equal (
252
- (f1 * f2 ).frequency_response ([ 0.1 , 1.0 , 10 ] )[0 ],
253
- (sys * sys ).frequency_response ([ 0.1 , 1.0 , 10 ] )[0 ])
260
+ (f1 * f2 ).frequency_response (chkpts )[0 ],
261
+ (sys * sys ).frequency_response (chkpts )[0 ])
254
262
np .testing .assert_array_almost_equal (
255
- (f1 * f2 ).frequency_response ([ 0.1 , 1.0 , 10 ] )[1 ],
256
- (sys * sys ).frequency_response ([ 0.1 , 1.0 , 10 ] )[1 ])
263
+ (f1 * f2 ).frequency_response (chkpts )[1 ],
264
+ (sys * sys ).frequency_response (chkpts )[1 ])
257
265
258
266
@slycotonly
259
267
def testMIMOSmooth (self ):
@@ -263,17 +271,18 @@ def testMIMOSmooth(self):
263
271
[[0.0 , 0.0 ], [0.0 , 0.0 ], [0.0 , 0.0 ]])
264
272
sys2 = np .array ([[1 , 0 , 0 ], [0 , 1 , 0 ]]) * sys
265
273
omega = np .logspace (- 1 , 2 , 10 )
274
+ chkpts = omega [::3 ]
266
275
f1 = FRD (sys , omega , smooth = True )
267
276
f2 = FRD (sys2 , omega , smooth = True )
268
277
np .testing .assert_array_almost_equal (
269
- (f1 * f2 ).frequency_response ([ 0.1 , 1.0 , 10 ] )[0 ],
270
- (sys * sys2 ).frequency_response ([ 0.1 , 1.0 , 10 ] )[0 ])
278
+ (f1 * f2 ).frequency_response (chkpts )[0 ],
279
+ (sys * sys2 ).frequency_response (chkpts )[0 ])
271
280
np .testing .assert_array_almost_equal (
272
- (f1 * f2 ).frequency_response ([ 0.1 , 1.0 , 10 ] )[1 ],
273
- (sys * sys2 ).frequency_response ([ 0.1 , 1.0 , 10 ] )[1 ])
281
+ (f1 * f2 ).frequency_response (chkpts )[1 ],
282
+ (sys * sys2 ).frequency_response (chkpts )[1 ])
274
283
np .testing .assert_array_almost_equal (
275
- (f1 * f2 ).frequency_response ([ 0.1 , 1.0 , 10 ] )[2 ],
276
- (sys * sys2 ).frequency_response ([ 0.1 , 1.0 , 10 ] )[2 ])
284
+ (f1 * f2 ).frequency_response (chkpts )[2 ],
285
+ (sys * sys2 ).frequency_response (chkpts )[2 ])
277
286
278
287
def testAgainstOctave (self ):
279
288
# with data from octave:
@@ -284,6 +293,7 @@ def testAgainstOctave(self):
284
293
np .array ([[1.0 , 0 ], [0 , 0 ], [0 , 1 ]]),
285
294
np .eye (3 ), np .zeros ((3 , 2 )))
286
295
omega = np .logspace (- 1 , 2 , 10 )
296
+ chkpts = omega [::3 ]
287
297
f1 = FRD (sys , omega )
288
298
np .testing .assert_array_almost_equal (
289
299
(f1 .frequency_response ([1.0 ])[0 ] *
0 commit comments