mpc/gpc_col.py
changeset 0 0efde00f9229
equal deleted inserted replaced
-1:000000000000 0:0efde00f9229
       
     1 #!/usr/bin/env python
       
     2 # 12.2
       
     3 
       
     4 import os, sys
       
     5 sys.path += [os.getcwdu() + os.sep + ".." + os.sep + "python"]
       
     6 
       
     7 import pylab as pl
       
     8 from xdync import xdync
       
     9 from polyfuncs import polmul, poladd
       
    10 
       
    11 def gpc_col(A, dA, B, dB, C, dC, N, k, rho):
       
    12     D, dD = pl.array([1, -1]), 1
       
    13     AD, dAD = pl.convolve(A, D), dA+1
       
    14     Nu = N+1
       
    15     zj, dzj = 1, 0
       
    16     G = pl.zeros((Nu, 1))
       
    17     H1 = pl.zeros((Nu, 2*k+N-2+dB))
       
    18     H2 = pl.zeros((Nu, k+N+dA))
       
    19 
       
    20     for j in range(Nu):
       
    21         zj = pl.convolve(zj, [0,1])
       
    22         dzj = dzj + 1
       
    23         Fj, dFj, Ej, dEj = xdync(zj, dzj, AD, dAD, C, dC)[:4]
       
    24         Nj, dNj, Mj, dMj = xdync(zj, dzj, C, dC, 1, 0)[:4]
       
    25         Gj, dGj = polmul(Mj, dMj, Ej, dEj)
       
    26         Gj, dGj = polmul(Gj, dGj, B, dB)
       
    27         Pj, dPj = polmul(Mj, dMj, Fj, dFj)
       
    28         Pj, dPj = poladd(Nj, dNj, Pj, dPj)
       
    29 
       
    30         m, n = G.shape
       
    31         G = pl.column_stack((G, pl.zeros((m, j+1-n))))
       
    32         G[j, :j+1] = Gj[j::-1]
       
    33         H1[j,:dGj-j] = Gj[j+1:dGj+1]
       
    34         H2[j,:dPj+1] = Pj
       
    35 
       
    36     K = pl.dot(pl.inv(pl.dot(G.T, G) + rho*pl.eye(Nu,Nu)), G.T)
       
    37     KH1 = pl.dot(K, H1)
       
    38     KH2 = pl.dot(K, H2)
       
    39     R1 = pl.concatenate(([1], KH1[0,:]))
       
    40     dR1 = len(R1)-1
       
    41     Sc = KH2[0,:]
       
    42     dSc = len(Sc)-1;
       
    43     Tc = K[0,:]
       
    44     dTc = len(Tc)-1;
       
    45         
       
    46     return K, KH1, KH2, Tc, dTc, Sc, dSc, R1, dR1