|
From: <kk...@us...> - 2011-02-08 22:16:23
|
Revision: 80
http://python-control.svn.sourceforge.net/python-control/?rev=80&view=rev
Author: kkchen
Date: 2011-02-08 22:16:17 +0000 (Tue, 08 Feb 2011)
Log Message:
-----------
Added robust.py for robust control tools. Function h2syn added, based on slycot wrapper sb10hd. No tests in place, probably buggy.
Steven Brunton <sbr...@pr...>
Added Paths:
-----------
branches/control-0.4a/src/robust.py
Added: branches/control-0.4a/src/robust.py
===================================================================
--- branches/control-0.4a/src/robust.py (rev 0)
+++ branches/control-0.4a/src/robust.py 2011-02-08 22:16:17 UTC (rev 80)
@@ -0,0 +1,99 @@
+# robust.py - tools for robust control
+#
+# Author: Steve Brunton, Kevin Chen, Lauren Padilla
+# Date: 24 Dec 2010
+#
+# This file contains routines for obtaining reduced order models
+#
+# Copyright (c) 2010 by California Institute of Technology
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# 3. Neither the name of the California Institute of Technology nor
+# the names of its contributors may be used to endorse or promote
+# products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CALTECH
+# OR THE CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+# $Id$
+
+# External packages and modules
+import numpy as np
+import ctrlutil
+from control.exception import *
+from statefbk import *
+from statesp import StateSpace
+
+def h2syn(P,nmeas,ncon):
+ """H_2 control synthesis for plant.
+
+ Usage
+ =====
+ K, rcond, info = h2syn(plant,nmeas,ncon)
+
+ Inputs
+ ======
+ plant : partitioned lti plant
+ nmeas : number of measurements (input to controller)
+ ncon : number of control inputs (output from controller)
+
+ Outputs
+ =======
+ K : controller to stabilize P
+ """
+
+ #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'
+
+ #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:
+ 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
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|