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
78+ real , imag , matrix , absolute , eye
7979from scipy .interpolate import splprep , splev
8080from copy import deepcopy
8181from lti import Lti
@@ -339,6 +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 )
342344 out [i ,j ] = inner (array ([1 , 1j ]),
343345 splev (omega , self .ifunc [i ,j ], der = 0 ))
344346
@@ -363,11 +365,10 @@ def freqresp(self, omega):
363365
364366 omega .sort ()
365367
366- for i in range (self .outputs ):
367- for j in range (self .inputs ):
368- fresp = matrix ([[1 ,1j ]])* splev (omega , self .ifunc [i ,j ])
369- mag [i , j , :] = abs (fresp )
370- phase [i , j , :] = angle (fresp )
368+ for k , w in enumerate (omega ):
369+ fresp = self .evalfr (omega )
370+ mag [:, :, k ] = abs (fresp )
371+ phase [:, :, k ] = angle (fresp )
371372
372373 return mag , phase , omega
373374
@@ -385,12 +386,17 @@ def feedback(self, other, sign=-1):
385386 # TODO: vectorize this
386387 # TODO: handle omega re-mapping
387388 for k , w in enumerate (other .omega ):
388- for i in range (self .inputs ):
389- for j in range (self .outputs ):
390- fresp [i , j , k ] = \
391- self .fresp [i , j , k ] / \
392- (1.0 - sign * inner (self .fresp [:, j , k ],
393- other .fresp [i , :, k ]))
389+ fresp [:, :, k ] = (
390+ eye (self .inputs ) + other .fresp [:, :, k ].view (type = matrix ) *
391+ self .fresp [:, :, k ].view (type = matrix )).I * \
392+ self .fresp [:, :, k ].view (type = matrix )
393+
394+ # for i in range(self.inputs):
395+ # for j in range(self.outputs):
396+ # fresp[i, j, k] = \
397+ # self.fresp[i, j, k] / \
398+ # (1.0-sign*inner(self.fresp[:, j, k],
399+ # other.fresp[i, :, k]))
394400
395401 return FRD (fresp , other .omega )
396402
0 commit comments