diff -r 000000000000 -r 0efde00f9229 lqg/lqg_simple.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lqg/lqg_simple.py Fri May 27 14:24:59 2011 +0530 @@ -0,0 +1,34 @@ +#!/usr/bin/python +# 13.4 + +import os, sys +sys.path += [os.getcwdu() + os.sep + ".." + os.sep + "python"] + +import scipy as sp +from polyfuncs import polmul, putin, ext +from xdync import xdync +from zpowk import zpowk +from specfac import specfac + +def lqg_simple(A,dA,B,dB,C,dC,k,rho,V,dV,W,dW,F,dF): + """ LQG controller design by method of Ahlen and Sternad. """ + r, b, db = specfac(A,dA,B,dB,rho,V,dV,W,dW,F,dF) + D, dD = polmul(A, dA, F, dF) + zk, dzk = zpowk(k) + N, dN = polmul(zk, dzk, B, dB) + RHS, dRHS = polmul(C, dC, b, db) + S, dS, R1, dR1 = xdync(N, dN, D, dD, RHS, dRHS)[:4] + return R1, dR1, S, dS + +if __name__ == "__main__": + A, dA = sp.array([1, -0.44]), 1 + B, dB = sp.array([0.51, 1.21]), 1 + F, dF = sp.array([1, -1]), 1 + C, dC = sp.array([1, -0.44]),1 + k = 1 + V, W = 1, 1 + dV, dW = 0, 0 + rho = 1 + int1 = 1 + + print lqg_simple(A,dA,B,dB,C,dC,k,rho,V,dV,W,dW,F,dF)