Scilab Function
Last update : 16/12/2004

trzeros - transmission zeros and normal rank

### Calling Sequence

  `[tr]=trzeros(Sl)`
  `[nt,dt,rk]=trzeros(Sl)`

### Parameters

- `Sl`: linear system (`syslin` list)
- `nt`: complex vectors
- `dt`: real vector
- `rk`: integer (normal rank of Sl)

### Description

Called with one output argument, `trzeros(Sl)` returns the transmission zeros of the linear system `Sl`.

`Sl` may have a polynomial (but square) `D` matrix.

Called with 2 output arguments, `trzeros` returns the transmission zeros of the linear system `Sl` as `tr=nt./dt`;

(Note that some components of `dt` may be zeros)

Called with 3 output arguments, `rk` is the normal rank of `Sl`

Transfer matrices are converted to state-space.

If `Sl` is a (square) polynomial matrix `trzeros` returns the roots of its determinant.

For usual state-space system `trzeros` uses the state-space algorithm of Emami-Naeni and Van Dooren.

If `D` is invertible the transmission zeros are the eigenvalues of the "`A` matrix" of the inverse system : `A - B*inv(D)*C`;

If `C*B` is invertible the transmission zeros are the eigenvalues of `N*A*M` where `M*N` is a full rank factorization of `eye(A)-B*inv(C*B)*C`;

For systems with a polynomial `D` matrix zeros are calculated as the roots of the determinant of the system matrix.

Caution: the computed zeros are not always reliable, in particular in case of repeated zeros.

### Examples

    W1=ssrand(2,2,5);trzeros(W1)    //call trzeros
    roots(det(systmat(W1)))         //roots of det(system matrix)
    s=poly(0,'s');W=[1/(s+1);1/(s-2)];W2=(s-3)*W*W';[nt,dt,rk]=trzeros(W2);
    St=systmat(tf2ss(W2));[Q,Z,Qd,Zd,numbeps,numbeta]=kroneck(St);
    St1=Q*St*Z;rowf=(Qd(1)+Qd(2)+1):(Qd(1)+Qd(2)+Qd(3));
    colf=(Zd(1)+Zd(2)+1):(Zd(1)+Zd(2)+Zd(3));
    roots(St1(rowf,colf)), nt./dt     //By Kronecker form

### See Also

`gspec`, `kroneck`,