spantwo soma e interseção de subespaços

## Seqüência de Chamamento

    [Xp,dima,dimb,dim]=spantwo(A,B, [tol])

## Parâmetros

A, B

  duas matrizes de reais ou complexos com igual número de linhas

Xp

  matriz quadrada não-singular

dima, dimb, dim

  inteiros, dimensões dos subespaços

tol

  número real não-negativo

## Descrição

Dadas duas matrizes `A` e `B` com o mesmo número de linhas, retorna uma matriz quadrada `Xp` (não-singular, mas não necessariamente ortogonal) tal que :

             [A1, 0]    (dim-dimb linhas)
    Xp*[A,B]=[A2,B2]    (dima+dimb-dim linhas)
             [0, B3]    (dim-dima linha)
             [0 , 0]

As primeiras `dima` colunas de `inv(Xp)` geram Im(`A`).

As colunas de `dim-dimb+1` até `dima` de `inv(Xp)` geram a interseção de Im(A) e Im(B).

As primeiras `dim` colunas de `inv(Xp)` geram Im(`A`)+Im(`B`).

As colunas de `dim-dimb+1` até `dim` de `inv(Xp)` geram Im(`B`).

A matrix `[A1;A2]` tem posto-linha cheio (= posto(A)), a matrix `[B2;B3]` tem posto-linha cheio (=posto(B)), a matriz `[A2,B2]` tem posto-linha (=posto(A inter B)) e a matriz `[A1,0;A2,B2;0,B3]` tem posto-linha cheio (=posto(A+B)).

## Exemplos

    A=[1,0,0,4;
       5,6,7,8;
       0,0,11,12;
       0,0,0,16];
    B=[1,2,0,0]';C=[4,0,0,1];
    Sl=ss2ss(syslin('c',A,B,C),rand(A));
    [no,X]=contr(Sl('A'),Sl('B'));CO=X(:,1:no);  //Parte controlável
    [uo,Y]=unobs(Sl('A'),Sl('C'));UO=Y(:,1:uo);  //Parte inobservável
    [Xp,dimc,dimu,dim]=spantwo(CO,UO);    //Decomposição de Kalman
    Slcan=ss2ss(Sl,inv(Xp));

## Ver Também

- spanplus
- spaninter