clear all
A=[-1, 0; 0, -2]
B=[1, -1; 0, 2]
C=[1, 0; 1, 1]
D=zeros(2,2)
% Calcolo della matrice di trasferimento G(s),
% fatto per colonne di G(s)
[numG1,denG1]=ss2tf(A,B,C,D,1)
[numG2,denG2]=ss2tf(A,B,C,D,2)

% Calcolo dell'evoluzione libera dello stato xl(t)
x0=[1; 2]
n=size(A,1), p=size(B,2), q=size(C,1)
[numXl,denXl]=ss2tf(A,x0,eye(n),zeros(n,1),1)
[rXl1,pXl1,kXl1]=residue(numXl(1,:),denXl)
[rXl2,pXl2,kXl2]=residue(numXl(2,:),denXl)

% Calcolo dell'evoluzione libera dell'uscita yl(t)
[numYl,denYl]=ss2tf(A,x0,C,zeros(q,1),1)
[rYl1,pYl1,kYl1]=residue(numYl(1,:),denYl)
[rYl2,pYl2,kYl2]=residue(numYl(2,:),denYl)

% Calcolo dell'evoluzione forzata dello stato xf(t), 
% mediante il principio di sovrapposizione degli effetti 
% degli ingressi u1(t) ed u2(t)
[numXf1_,denXf1_]=ss2tf(A,B(:,1),eye(n),zeros(n,1),1)
[numXf2_,denXf2_]=ss2tf(A,B(:,2),eye(n),zeros(n,1),1)

numU1=1, denU1=[1, 0]
[r,p,k]=residue(conv(numXf1_(1,:),numU1),conv(denXf1_,denU1))
[r,p,k]=residue(conv(numXf1_(2,:),numU1),conv(denXf1_,denU1))

numU2=2, denU2=[1, 0]
[r,p,k]=residue(conv(numXf2_(1,:),numU2),conv(denXf2_,denU2))
[r,p,k]=residue(conv(numXf2_(2,:),numU2),conv(denXf2_,denU2))

% Calcolo dell'evoluzione forzata dell'uscita yf(t) 
% a partire dalle colonne di G(s)
[r,p,k]=residue(conv(numG1(1,:),numU1),conv(denG1,denU1))
[r,p,k]=residue(conv(numG1(2,:),numU1),conv(denG1,denU1))
[r,p,k]=residue(conv(numG2(1,:),numU2),conv(denG2,denU2))
[r,p,k]=residue(conv(numG2(2,:),numU2),conv(denG2,denU2))