7575# External function declarations
7676from 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
7979from scipy .interpolate import splprep , splev
8080from copy import deepcopy
8181from 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):
0 commit comments