INDEX

Function: FF_ASSGN


Purpose. Multivariable pole / zero cancellation with ``assignment'' of the right eigenvectors corresponding to the new poles.

Synopsis.

dff=ff_assgn(sys,k,pol_old,zer,pol,key,def_pb[,cc,dd[,ee]]);
dff=ff_assgn(sys,k,pol_old,zer,pol); <- single-input case

Description. This function computes a feedforward gain which cancels some poles (of sys controlled by k) by assigning zeros at the same location. The cancelled poles (pol_old) are replaced by new ones (pol) that are chosen by the designer. If the zeros (zer) coincide exactly with pol_old, the cancellation is exact otherwise it is made approximately. Note that:

  • the three vectors pol_old, zer and pol must have entries of the same nature (i.e. real or nonreal, without repeated conjugate values).
  • zer must be close enough to pol_old.
  • the entries of pol_old must be almost coincide with some entries of eig_fb(sys,k).

Input arguments.

 sys LTI system (see syslin).
 k Proportional feedback (k=0 means that k is the zero matrix with appropriate size) or LTI dynamic feedback. The function closes the feedback loop before cancellations.
 pol_old Is a q by 1 vector of cancelled eigenvalues.
 zer Is a q by 1 vector of zeros close to pol_old.
 pol,key,def_pb Similar to input arguments of defin_vw.

Output argument.

 dff Dynamic feedforward (LTI system, see ssdata.m).

See also: fb_prop, defin_vw, ff_stat


Example. It is expected to replace the poles the closest to -0.1 + 1j and to -2 by poles at -1 + 1j and -5 (pol_o = [-0.1+1*j;-2] and pol_n = [-1+1*j;-5]). The poles at -0.1 + 1j is almost cancelled by a zero at -0.2 + 1j and the pole at -2 is exactly cancelled (zer = [-0.2+1*j;-2]). The eigenvector corresponding to the new pole -1 + 1j must have its first and second entries equal to zero, the other eigenvector must have its first and fourth entries equal to zero (option 'z' for both assignments and d_p = [[1;2] [1;4]]).
   a=[-1 0 0 0;0 -.1 -1 0;0 1 -.1 0; 0 0 0 -2];
   b=[0 0 1;1 1 1;0 1 0;1 0 1];
   sys = syslin('c',a,b,eye(4,4));
   key = 'z';
   d_p = [[1;2]  [1;4]];
   pol_o = [-0.1+1*%i;-2];
   zer   = [-0.2+1*%i;-2];
   pol_n = [-1+1*%i;-5];
   dff = ff_assgn(sys,0,pol_o,zer,pol_n,key,d_p);

The results can be checked by computing the eigenvectors after connection of dff and sys in series. On the diagonal basis, the entries of the ``B-matrix'' in front of eigenvalues of pol_o must be close to zero (poles made almost uncontrollable).