Skip to content

Commit 17b9d60

Browse files
committed
still not perfect
1 parent bc949cf commit 17b9d60

File tree

2 files changed

+13
-18
lines changed

2 files changed

+13
-18
lines changed

src/frdata.py

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@
7575
# External function declarations
7676
from numpy import angle, any, array, empty, finfo, insert, ndarray, ones, \
7777
polyadd, polymul, polyval, roots, sort, sqrt, zeros, squeeze, inner, \
78-
real, imag, matrix, absolute, eye
78+
real, imag, matrix, absolute, eye, linalg
7979
from scipy.interpolate import splprep, splev
8080
from copy import deepcopy
8181
from lti import Lti
@@ -339,10 +339,8 @@ def evalfr(self, omega):
339339

340340
for i in range(self.outputs):
341341
for j in range(self.inputs):
342-
print array([1, 1j])
343-
print splev(omega, self.ifunc[i,j], der=0)
344-
out[i,j] = inner(array([1, 1j]),
345-
splev(omega, self.ifunc[i,j], der=0))
342+
frraw = splev(omega, self.ifunc[i,j], der=0)
343+
out[i,j] = frraw[0] + 1.0j*frraw[1]
346344

347345
return out
348346

@@ -366,7 +364,7 @@ def freqresp(self, omega):
366364
omega.sort()
367365

368366
for k, w in enumerate(omega):
369-
fresp = self.evalfr(omega)
367+
fresp = self.evalfr(w)
370368
mag[:, :, k] = abs(fresp)
371369
phase[:, :, k] = angle(fresp)
372370

@@ -386,10 +384,10 @@ def feedback(self, other, sign=-1):
386384
# TODO: vectorize this
387385
# TODO: handle omega re-mapping
388386
for k, w in enumerate(other.omega):
389-
fresp[:, :, k] = (
387+
fresp[:, :, k] = linalg.solve(
390388
eye(self.inputs) + other.fresp[:, :, k].view(type=matrix) *
391-
self.fresp[:, :, k].view(type=matrix)).I * \
392-
self.fresp[:, :, k].view(type=matrix)
389+
self.fresp[:, :, k].view(type=matrix),
390+
eye(self.inputs))*self.fresp[:, :, k].view(type=matrix)
393391

394392
# for i in range(self.inputs):
395393
# for j in range(self.outputs):

tests/frd_test.py

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -130,15 +130,12 @@ def testMIMOfb(self):
130130
omega = np.logspace(-1, 2, 10)
131131
f1 = FRD(sys, omega).feedback([[0.1, 0.3],[0.0, 1.0]])
132132
f2 = FRD(sys.feedback([[0.1, 0.3],[0.0, 1.0]]), omega)
133-
print f1 - f2
134-
print f1
135-
print f2
136-
#np.testing.assert_array_almost_equal(
137-
# sys.feedback([[0.1, 0.3],[0.0, 1.0]]).freqresp([0.1, 1.0, 10])[0],
138-
# f1.feedback([[0.1, 0.3],[0.0, 1.0]]).freqresp([0.1, 1.0, 10])[0])
139-
#np.testing.assert_array_almost_equal(
140-
# sys.feedback([[0.1, 0.3],[0.0, 1.0]]).freqresp([0.1, 1.0, 10])[1],
141-
# f1.feedback([[0.1, 0.3],[0.0, 1.0]]).freqresp([0.1, 1.0, 10])[1])
133+
np.testing.assert_array_almost_equal(
134+
f1.freqresp([0.1, 1.0, 10])[0],
135+
f2.freqresp([0.1, 1.0, 10])[0])
136+
np.testing.assert_array_almost_equal(
137+
f1.freqresp([0.1, 1.0, 10])[1],
138+
f2.freqresp([0.1, 1.0, 10])[1])
142139
if __name__ == "__main__":
143140
unittest.main()
144141
sys.exit(0)

0 commit comments

Comments
 (0)