def h2syn(P, nmeas, ncon): """H_2 control synthesis for plant P. Parameters ---------- P: partitioned lti plant (State-space sys) nmeas: number of measurements (input to controller) ncon: number of control inputs (output from controller) Returns ------- K: controller to stabilize P (State-space sys) Raises ------ ImportError if slycot routine sb10hd is not loaded See Also -------- StateSpace Examples -------- >>> K = h2syn(P,nmeas,ncon) """ #Check for ss system object, need a utility for this? #TODO: Check for continous or discrete, only continuous supported right now # if isCont(): # dico = 'C' # elif isDisc(): # dico = 'D' # else: dico = 'C' try: from slycot import sb10hd except ImportError: raise ControlSlycot("can't find slycot subroutine sb10hd") n = np.size(P.A, 0) m = np.size(P.B, 1) np = np.size(P.C, 0) out = sb10hd(n, m, np, ncon, nmeas, P.A, P.B, P.C, P.D) Ak = out[0] Bk = out[1] Ck = out[2] Dk = out[3] K = StateSpace(Ak, Bk, Ck, Dk) return K
def h2syn(P,nmeas,ncon): """H_2 control synthesis for plant P. Parameters ---------- P: partitioned lti plant (State-space sys) nmeas: number of measurements (input to controller) ncon: number of control inputs (output from controller) Returns ------- K: controller to stabilize P (State-space sys) Raises ------ ImportError if slycot routine sb10hd is not loaded See Also -------- StateSpace Examples -------- >>> K = h2syn(P,nmeas,ncon) """ #Check for ss system object, need a utility for this? #TODO: Check for continous or discrete, only continuous supported right now # if isCont(): # dico = 'C' # elif isDisc(): # dico = 'D' # else: dico = 'C' try: from slycot import sb10hd except ImportError: raise ControlSlycot("can't find slycot subroutine sb10hd") n = np.size(P.A,0) m = np.size(P.B,1) np_ = np.size(P.C,0) out = sb10hd(n,m,np_,ncon,nmeas,P.A,P.B,P.C,P.D) Ak = out[0] Bk = out[1] Ck = out[2] Dk = out[3] K = StateSpace(Ak, Bk, Ck, Dk) return K