def hinfsyn(P, nmeas, ncon): """H_{inf} control synthesis for plant P. Parameters ---------- P: partitioned lti plant nmeas: number of measurements (input to controller) ncon: number of control inputs (output from controller) Returns ------- K: controller to stabilize P (State-space sys) CL: closed loop system (State-space sys) gam: infinity norm of closed loop system rcond: 4-vector, reciprocal condition estimates of: 1: control transformation matrix 2: measurement transformation matrix 3: X-Ricatti equation 4: Y-Ricatti equation TODO: document significance of rcond Raises ------ ImportError if slycot routine sb10ad is not loaded See Also -------- StateSpace Examples -------- >>> K, CL, gam, rcond = hinfsyn(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 sb10ad except ImportError: raise ControlSlycot("can't find slycot subroutine sb10ad") n = np.size(P.A, 0) m = np.size(P.B, 1) np_ = np.size(P.C, 0) gamma = 1.e100 out = sb10ad(n, m, np_, ncon, nmeas, gamma, P.A, P.B, P.C, P.D) gam = out[0] Ak = out[1] Bk = out[2] Ck = out[3] Dk = out[4] Ac = out[5] Bc = out[6] Cc = out[7] Dc = out[8] rcond = out[9] K = StateSpace(Ak, Bk, Ck, Dk) CL = StateSpace(Ac, Bc, Cc, Dc) return K, CL, gam, rcond
def hinfsyn(P,nmeas,ncon): """H_{inf} control synthesis for plant P. Parameters ---------- P: partitioned lti plant nmeas: number of measurements (input to controller) ncon: number of control inputs (output from controller) Returns ------- K: controller to stabilize P (State-space sys) CL: closed loop system (State-space sys) gam: infinity norm of closed loop system rcond: 4-vector, reciprocal condition estimates of: 1: control transformation matrix 2: measurement transformation matrix 3: X-Ricatti equation 4: Y-Ricatti equation TODO: document significance of rcond Raises ------ ImportError if slycot routine sb10ad is not loaded See Also -------- StateSpace Examples -------- >>> K, CL, gam, rcond = hinfsyn(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 sb10ad except ImportError: raise ControlSlycot("can't find slycot subroutine sb10ad") n = np.size(P.A,0) m = np.size(P.B,1) np_ = np.size(P.C,0) gamma = 1.e100 out = sb10ad(n,m,np_,ncon,nmeas,gamma,P.A,P.B,P.C,P.D) gam = out[0] Ak = out[1] Bk = out[2] Ck = out[3] Dk = out[4] Ac = out[5] Bc = out[6] Cc = out[7] Dc = out[8] rcond = out[9] K = StateSpace(Ak, Bk, Ck, Dk) CL = StateSpace(Ac, Bc, Cc, Dc) return K, CL, gam, rcond