function [NA,NC,V,W]=idarmax112(a,b,c1,c2,lambda_eta,lambda_u,N)
% function [NA,NC,V,W]=idarmax111(a,b,c,lambda_eta,lambda_u)
% Identificazione di un ARMAX(1,1,2) con un ARMAX(na,1,nc)
% Analisi di bianchezza del residuo
%
% Sistema:
% y(t) = a*y(t-1) + b*u(t-1) + eta(t) + c1*eta(t-1) + c2*eta(t-2)
% u(·)~WN(0,lambda_u^2), eta(·)~WN(0,lambda_eta^2)
% N = numero dati
%
% L'identificazione viene ripetuta al variare di na e nc.
% Parametri e risultati della prova i-esima:
% NA(i)  = ordine della parte autoregressiva
% NC(i)  = ordine della parte a media mobile
% V(i,1) = varianza del residuo
% V(i,2) = Final Prediction Error
% W(i)   = bianchezza del residuo

% Realizzazione del sistema vero
eta = randn(N,1)*lambda_eta;
u = randn(N,1)*lambda_u;
y = zeros(N,1);
y(1) = eta(1);
y(2) = a*y(1) + b*u(1) + eta(2) + c1*eta(1);
for t=3:N
  y(t) = a*y(t-1) + b*u(t-1) + eta(t) + c1*eta(t-1) + c2*eta(t-2);
end;

NA = zeros(25,1);
NC = zeros(25,1);
V  = zeros(25,2);
W  = zeros(25,1);

nb = 1;
nk = 1;
for na=1:5
  for nc=1:5
    NA((na-1)*5+nc,1) = na;
    NC((na-1)*5+nc,1) = nc;
    TH = armax([y u],[na nb nc nk]);
    V((na-1)*5+nc,1) = TH(1,1);
    V((na-1)*5+nc,2) = TH(2,1);
    prederr = PE([y u],TH);
    W((na-1)*5+nc) = whitenoisetest(prederr,0);
  end;
end;

[VV,ind] = sort(V(:,2));
V = V(ind,:);
W = W(ind);
NA = NA(ind);
NC = NC(ind);

disp(sprintf('| na | nc | Var(e)  |   FPE   | white |'))
disp(sprintf('|----|----|---------|---------|-------|'))
for i=1:25
   if W(i)==0
      disp(sprintf('| %2d | %2d | %0.5f | %0.5f |   N   |',NA(i),NC(i),V(i,1),V(i,2)))
   else
      disp(sprintf('| %2d | %2d | %0.5f | %0.5f |   Y   |',NA(i),NC(i),V(i,1),V(i,2)))
   end
end
disp(sprintf('|----|----|---------|---------|-------|'))
