75
75
# External function declarations
76
76
from numpy import angle , any , array , empty , finfo , insert , ndarray , ones , \
77
77
polyadd , polymul , polyval , roots , sort , sqrt , zeros , squeeze , inner , \
78
- real , imag , matrix , absolute , eye
78
+ real , imag , matrix , absolute , eye , linalg
79
79
from scipy .interpolate import splprep , splev
80
80
from copy import deepcopy
81
81
from lti import Lti
@@ -339,10 +339,8 @@ def evalfr(self, omega):
339
339
340
340
for i in range (self .outputs ):
341
341
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 ]
346
344
347
345
return out
348
346
@@ -366,7 +364,7 @@ def freqresp(self, omega):
366
364
omega .sort ()
367
365
368
366
for k , w in enumerate (omega ):
369
- fresp = self .evalfr (omega )
367
+ fresp = self .evalfr (w )
370
368
mag [:, :, k ] = abs (fresp )
371
369
phase [:, :, k ] = angle (fresp )
372
370
@@ -386,10 +384,10 @@ def feedback(self, other, sign=-1):
386
384
# TODO: vectorize this
387
385
# TODO: handle omega re-mapping
388
386
for k , w in enumerate (other .omega ):
389
- fresp [:, :, k ] = (
387
+ fresp [:, :, k ] = linalg . solve (
390
388
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 )
393
391
394
392
# for i in range(self.inputs):
395
393
# for j in range(self.outputs):
0 commit comments