From: <kk...@us...> - 2011-02-08 22:16:27
|
Revision: 81 http://python-control.svn.sourceforge.net/python-control/?rev=81&view=rev Author: kkchen Date: 2011-02-08 22:16:21 +0000 (Tue, 08 Feb 2011) Log Message: ----------- Added function hinfsyn to robust.py, based on slycot wrapper sb10ad. Steven Brunton <sbr...@pr...> Modified Paths: -------------- branches/control-0.4a/src/robust.py Modified: branches/control-0.4a/src/robust.py =================================================================== --- branches/control-0.4a/src/robust.py 2011-02-08 22:16:17 UTC (rev 80) +++ branches/control-0.4a/src/robust.py 2011-02-08 22:16:21 UTC (rev 81) @@ -47,15 +47,15 @@ from statesp import StateSpace def h2syn(P,nmeas,ncon): - """H_2 control synthesis for plant. + """H_2 control synthesis for plant P. Usage ===== - K, rcond, info = h2syn(plant,nmeas,ncon) + K = h2syn(P,nmeas,ncon) Inputs ====== - plant : partitioned lti plant + P : partitioned lti plant nmeas : number of measurements (input to controller) ncon : number of control inputs (output from controller) @@ -74,12 +74,6 @@ # else: dico = 'C' - #Check system is stable - D,V = np.linalg.eig(P.A) - for e in D: - if e.real >= 0: - raise ValueError, "Oops, the system is unstable!" - try: from slycot import sb10hd except ImportError: @@ -97,3 +91,63 @@ K = StateSpace(Ak, Bk, Ck, Dk) return K + +def hinfsyn(P,nmeas,ncon): + """H_{inf} control synthesis for plant P. + + Usage + ===== + K, CL, gam, info = hinfsyn(P,nmeas,ncon) + + Inputs + ====== + P : partitioned lti plant + nmeas : number of measurements (input to controller) + ncon : number of control inputs (output from controller) + + Outputs + ======= + K : controller to stabilize P + CL : closed loop system + gam : infinity norm of closed loop system + info : info returned from siycot routine + """ + + #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") + + job = 3 + n = np.size(P.A,0) + m = np.size(P.B,1) + np = np.size(P.C,0) + gamma = 1.e100 + out = sb10ad(job,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] + info = out[10] + + K = StateSpace(Ak, Bk, Ck, Dk) + CL = StateSpace(Ac, Bc, Cc, Dc) + + return K, CL, gam, info + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |