
% usa la funzione ssspline2 in cui si possono vincolare degli ingressi
% attraverso il vettore index (1 i-esima componente -> i-esimo ingresso vincolato)
% id della casa di chiuso


clc
clear


load Dati_Matrice_chiuso.mat; %  QUI SI CARICANO I DATI PER L'IDENTIFICAZIONE


str=['Dati_Matrice_Punto3_provaAndrea'];%  Nome del file di salvataggio



% NORMALIZZAZIONE DATI PER L'IDENTIFICAZIONE VAR1 med0
% prendo i dati di Dati_Matrice e creo Dati_Matrice_norm che contiene i
% dati normalizzati per poter poi usare il parfor nelle simulazioni

for f=1:1
% UMIDITA' MEDIA 0 VAR 1
for k=1:length(Dati)
  
    y = Dati(k).h.y_org; 
    U = Dati(k).h.Udati_org;   
    
    %%%%%%%%%%%%%%%%%%%%%%%%%%%      
    varU = var(U);
    meanU = mean(U);

    for i=1:size(U,2)
       u(:,i) = (U(:,i)-meanU(i))/sqrt(varU(i));    
    end
    Dati(k).h.Udati_norm = u(:,:); % <- aggiunta del campo

    varY = var(y);
    meanY = mean(y);
    
    Dati(k).h.y_norm=(y(:,1)-meanY(1))/sqrt(varY(1));  % <- aggiunta del campo
end

save(str,'Dati')

% TEMPERATURA MEDIA 0 VAR 1
for k=1:length(Dati)
  
    y = Dati(k).t.y_org; 
    U = Dati(k).t.Udati_org;   
    
    %%%%%%%%%%%%%%%%%%%%%%%%%   
    varU = var(U);
    meanU = mean(U);

    for i=1:size(U,2)
       u(:,i) = (U(:,i)-meanU(i))/sqrt(varU(i));    
    end
    Dati(k).t.Udati_norm = u(:,:); % <- aggiunta del campo

    varY = var(y);
    meanY = mean(y);
    
    Dati(k).t.y_norm=(y(:,1)-meanY(1))/sqrt(varY(1));  % <- aggiunta del campo    
end

% ora salvo la Dati_Matrice a cui ho aggiunto i due campi.
save(str,'Dati')

% TEMPERATURA MEDIA 0 VAR !=1
% si aggiunge l'ident. sseh sulla temperatura con modello 'yy' e 'ny'
for k=1:length(Dati)
  
    y = Dati(k).t.y_org; 
    U = Dati(k).t.Udati_org;   
    
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
    meanU = mean(U);

    for i=1:size(U,2)
       u(:,i) = (U(:,i)-meanU(i));    
    end
    Dati(k).t.Udati= u(:,:); % <- aggiunta del campo

    meanY = mean(y);
    
    Dati(k).t.y = (y(:,1)-meanY(1));  % <- aggiunta del campo    
end

% ora salvo la Dati_Matrice a cui ho aggiunto i due campi.
save(str,'Dati')


% UMIDITA' MEDIA 0 VAR !=1
% si aggiunge l'ident. sseh sulla temperatura con modello 'yy' e 'ny'
for k=1:length(Dati)
  
    y = Dati(k).h.y_org; 
    U = Dati(k).h.Udati_org;   
    
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
    meanU = mean(U);

    for i=1:size(U,2)
       u(:,i) = (U(:,i)-meanU(i));    
    end
    Dati(k).h.Udati= u(:,:); % <- aggiunta del campo

    meanY = mean(y);
    
    Dati(k).h.y = (y(:,1)-meanY(1));  % <- aggiunta del campo    
    %%%%%%%%%%%%%%%%%%%%%%%%%%% 
end


save(str,'Dati')

end % for inutile. solo per chiudere questa parte di codice
% fine normalizzazione dei dati.
 

%% Inizio identificazione dei dati:


% contiene una struttura Dati che viene via via aggiornata con i risultati
% dei vari metodi di indentificazione. Poi però viene salvata in un fil
% chiamato Dati_Matrice_id

len = length(Dati);

i_end = 2406;    % fine dei dati utilizzati

Ts=60*5; % tempo di campionamento

TEM = true % mettere true se si vuole effettuare una id sulla temper 
HUM = false % mettere true se si vuole effettuare una id sulla umidità

%Per scegliere algoritmo di identificazione
SSEH = true

SSGLAR = false



% NOR 1: uso dati con media 0 e var 1 (con nome_norm)
% NOR 2: uso dati con media 0 e var!=1 (con nome )

NOR=1;
switch NOR
    case 1
        for k=1:len 
            Dati(k).t.y_id = Dati(k).t.y_norm;
            Dati(k).t.Udati_id = Dati(k).t.Udati_norm;   

            Dati(k).h.y_id = Dati(k).h.y_norm;
            Dati(k).h.Udati_id = Dati(k).h.Udati_norm;   
        end
    case 2
        for k=1:len 
            Dati(k).t.y_id = Dati(k).t.y;
            Dati(k).t.Udati_id = Dati(k).t.Udati;   

            Dati(k).h.y_id = Dati(k).h.y;
            Dati(k).h.Udati_id = Dati(k).h.Udati;   
        end
end
% da qui si usano solo i due nuovi campi che contengono i dati con media  e
% varianza a scelta



%% SSEH DI TEMPERATURA %%%%%%%%%%%%%%%%%%%%%%%%%%%

if (TEM && SSEH)
	cont_tmp = 0;
    for k= 2:2%1:length(Dati)    % SCELTA SENSORI

        y = Dati(k).t.y_id; 
        U = Dati(k).t.Udati_id;   


        i_start= 10;  % 800 per ident, 600 per validazione. si scartano gli ultimi.
        i_stop = 1550; % il  max è 1500
        
        
        Up=U(i_start:i_stop,:);     % p per passato
        yp=y(i_start:i_stop,:);

        Uf=U(i_stop+1:i_end,:);       % f per futuro (per validazione)
        yf=y(i_stop+1:i_end,:);

        dat_id = iddata(yp,Up,Ts);
        dat_val = iddata(yf,Uf,Ts);

    %%%%%%%%%%%% QUI SI IMPOSTANO p E n e index %%%%%%%%%%%%%%%%%%%%%%%
        p=[25];
        n=[500];
        
        ind_term = find (Dati(k).t.Colonne_U == 5);
        ind_est = find (Dati(k).t.Colonne_U == 8);
        
        index = zeros(1,23);
        
%         if ind_term(1) < 8 
%             index(1,ind_term(1)) = 1;
%         end
%         if ind_est(1) < 8
%             index(1,ind_est(1)) = 1;
%         end
        
        index = [0 index]; % aggiunta posiz y
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

        for j=1:length(n)
            for i=1:length(p)

                cont_tmp = cont_tmp+1;
                strt = [' sseh temperatura ' num2str(cont_tmp) ' di ' num2str(len*length(n)*length(p))];
                disp(strt)
                fid = fopen('stato.txt', 'w' );
                fprintf(fid, strt);
                fclose(fid);
                
                load iperf_sens2.mat;
                iperf = [iperf_sens2 -inf]; 
                iperff = iperf([1 2 3 4 29 29 29 29 9 29 29 29 13 14 15 16 29 29 29 20 29 22 23 29 25 26 27 28 ]);
                
                %%%% stima modello yy
                tic 
                try 
                    [Mnpf_yy,iperf,Mnpf_toc_yy,nvf] = stimanonparametrica_mod_punto2(yp,Up,p(i),n(j),'yy',index,iperff); % chiamata principale.stima sseh.
            
                catch exception
                Mnpf_yy = NaN; 
                iperf = NaN;
                Mnpe_yy = NaN;
                ipere = NaN;
                disp(['ite: sens ' num2str(k) ' n: ' num2str(j) 'p:' num2str(i) '. ' exception.message])                   
                end
                
                 
                
                Dati_id(1,k).id_t_sseh_yy(i,j).Mnpf = Mnpf_yy;   
                Dati_id(1,k).id_t_sseh_yy(i,j).iperf = iperf
                Dati_id(1,k).id_t_sseh_yy(i,j).iperff = iperff
                Dati_id(1,k).id_t_sseh_yy(i,j).p_ = p(i);
                Dati_id(1,k).id_t_sseh_yy(i,j).n_ = n(j);
                Dati_id(1,k).id_t_sseh_yy(i,j).dati_val = dat_val;
                Dati_id(1,k).id_t_sseh_yy(i,j).index=index;
                Dati_id(1,k).id_t_sseh_yy(i,j).Mnpf_toc_yy=Mnpf_toc_yy;

               
                toc
               
%                 %%%% stima modello ny
%                 tic
%                 try                   
%                     [Mnpf_ny,iperf,Mnpf_toc_ny,Mnpe_ny,ipere,Mnpe_toc_ny] = stimanonparametrica_mod(yp,Up,p(i),n(j),'ny',index); % chiamata principale.stima sseh.
%                 
%                 catch exception
%                 Mnpf_ny = NaN; 
%                 iperf = NaN;
%                 Mnpe_ny = NaN;
%                 ipere = NaN;
%                 disp(['ite: sens ' num2str(k) ' n: ' num2str(j) 'p:' num2str(i) '. ' exception.message])                   
%                 end
%                           
%                 
%                 Dati_id(1,k).id_t_sseh_ny(i,j).Mnpf = Mnpf_ny;   
%                 Dati_id(1,k).id_t_sseh_ny(i,j).Mnpe = Mnpe_ny;
%                 Dati_id(1,k).id_t_sseh_ny(i,j).p_ = p(i);
%                 Dati_id(1,k).id_t_sseh_ny(i,j).n_ = n(j);
%                 Dati_id(1,k).id_t_sseh_ny(i,j).dati_val = dat_val;
%                 Dati_id(1,k).id_t_sseh_ny(i,j).index = index;              
%                 Dati_id(1,k).id_t_sseh_ny(i,j).Mnpf_toc_ny = Mnpf_toc_ny;
%                 
%                 toc

            end
        end
    %     Dati_id(1,k).id_t_sseh_yy = id_t_sseh_yy;
    %     Dati_id(1,k).id_t_sseh_ny = id_t_sseh_ny;
        Dati_id(1,k).aName = ['sensore numero ' num2str(k)];

        display(' ')
    end
    

    %%%%%%%%%%%%%%%%% AGGIUNTA SSEH TEMPERATURA %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % aggiunge i campi dell' identificazione eseguita alla struttura Dati
    % si aggiunge l'ident. sseh sulla temperatura con modello 'yy' e 'ny'
    if NOR == 1 
        for i=1:len
            Dati(i).t.sseh_yy_norm = Dati_id(i).id_t_sseh_yy;
%             Dati(i).t.sseh_ny_norm = Dati_id(i).id_t_sseh_ny;
        end
    elseif NOR == 2
        for i=1:len
            Dati(i).t.sseh_yy = Dati_id(i).id_t_sseh_yy;
            Dati(i).t.sseh_ny = Dati_id(i).id_t_sseh_ny;
        end
    end

    save(str,'Dati')
    

end



%% SSGLAR TEMPERATURA

if (TEM && SSGLAR)
    
    %%%%%%%%% PARAMETRI DA CAMBIARE:  
    pRKHS_vet=[5 25 40]; % length of eigenfunctions
    n_vet=[1000];%input('# of measurements = ');%numero dati effettivi per la stima (50,300)
    %%%%%%%%%%
  
    frac=1/3;% fraction of data used for validation/selection
    cont_tmp = 0;
    for num_sens=1:len; %disp(['num_sens ' num2str(num_sens)])

        U = Dati(num_sens).t.Udati_id;
        y = Dati(num_sens).t.y_id;

        for num_n=1:length(n_vet)
            n=n_vet(num_n);     

            ntval=floor(frac*(n));%dimensione validation set

            for num_pRKHS=1:length(pRKHS_vet)
                
                cont_tmp = cont_tmp+1;
                strt = [' ssglar temperatura ' num2str(cont_tmp) ' di ' num2str(len*length(n_vet)*length(pRKHS_vet))];
                disp(strt)
                fid = fopen('stato.txt', 'w' );
                fprintf(fid, strt);
                fclose(fid);
                
                pRKHS=pRKHS_vet(num_pRKHS);  

                ya=y(1:(n-ntval+pRKHS),:);
                Ua=U(1:(n-ntval+pRKHS),:);
                yval=y((n-ntval+1+pRKHS):n,:);
                Uval=U((n-ntval+1+pRKHS):n,:);

                clear AIK 
                tic
                try

                    %%%%%%%%%%%% STIMA NONPARAMETRICA 2%%%%%%%%%%%%%%%%%%%%%%%
                    [Mnpg,beta,sigma,NT,Mnpc,beta2,sigma2,NT2] = RKHS_Pred_LARS_Validation_all_k_v2(ya,Ua,1,30,yval,Uval,pRKHS);
                    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

                catch exception                   
                    Mnpg = NaN;
                    beta = NaN;
                    sigma = NaN;
                    NT = NaN;
                    Mnpc = NaN;
                    beta2 = NaN;
                    sigma2 = NaN;
                    NT2 = NaN;
                    disp(['ite: sens ' num2str(num_sens) ' n: ' num2str(num_n) ' p ' num2str(pRKHS) '. ' exception.message])
                    
                end
                ssglar_toc = toc
                id_ssglar(1,num_sens).mod(num_pRKHS,num_n) = struct('Mnpg',Mnpg,'beta',beta,'sigma',sigma,'NT',NT,'Mnpc',Mnpc,'beta2',beta2,'sigma2',sigma2,'NT2',NT2,'n',n,'pRKHS',pRKHS,'toc',ssglar_toc);

            end       
        end

    % save('mod_RKHS_stand','mod_RKHS');
    end

    %%%%%%%%%% AGGIUNTA SSGLAR TEMPERATURA %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    if NOR == 1
        for i=1:len
            Dati(i).t.ssglar_norm = id_ssglar(i);
        end
    else
        for i=1:len
            Dati(i).t.ssglar = id_ssglar(i);
        end
    end

    save(str,'Dati')


end





%% sseh_norm validazione  Mnpf

% attenzione in fid ai / o \


%%%%%%%%%%%%%%%% intervallo dati di validazione
val_start=1400;
val_stop=2400;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


fid = fopen('ValidazioneChiuso/sseh_yy_norm_Mnpf_n500Mod.txt', 'w+');

str_spar = 'Sparsit�:\t';
str_num_np = '';
str_nome_dati = '';
str_dati = '';
str_dati_sim = 'Spar_sim\t';

for num_sens=1:length(Dati) % scelta sensore 
    
    yf = Dati(1,num_sens).t.y_norm(val_start:val_stop,:);
    Uf = Dati(1,num_sens).t.Udati_norm(val_start:val_stop,:);
    dat_val = iddata(yf,Uf);
    
    [len_p len_n] = size(Dati(1,num_sens).t.sseh_ny_norm);
    
    str_nome_id = ['\tDati(1,' num2str(num_sens) ').t.sseh_yy_norm(p,n).Mnpf'];
    fprintf(fid, [str_nome_id, '\n']);
    
    disp(['Sensore: Dati(1,' num2str(num_sens) ').t.sseh_yy_norm(p,n).Mnpf']);
    
    for k=1:30 % passo di predizione
        

        str_dati = [str_dati, num2str(k), '\t'];
        
        for num_n=1:len_n
            for num_p=1:len_p
                
                try
                if k==1
                    spars = sparsi(Dati(1,num_sens).t.sseh_yy_norm(num_p,num_n).Mnpf);
                    str_spar = [str_spar num2str(spars) '%%\t\t\t'];
                    str_num_np = [str_num_np 'n=' num2str(Dati(1,num_sens).t.sseh_yy_norm(num_p,num_n).n_) ' p=' num2str(Dati(1,num_sens).t.sseh_yy_norm(num_p,num_n).p_) '\t\t\t'];
                    str_nome_dati = [str_nome_dati 'fit\trms\tcod\t'];
                    
                    y_sim = sim(Dati(1,num_sens).t.sseh_yy_norm(num_p,num_n).Mnpf,dat_val.u);
                    y_sim = iddata(y_sim);
                    y_sim = y_sim.y;

                    %Calcolo indici
                    fit = (1 - norm(yf-y_sim)/norm(yf-mean(yf)));
                    rms = sqrt(mean((yf-y_sim).^2));
                    cod = 1-(rms^2/(mean((yf-mean(yf)).^2)));

                    str_dati_sim = [str_dati_sim, num2str(fit) '\t', num2str(rms) '\t', num2str(cod) '\t'];
                    
                end
                
                y_pred = predict(Dati(1,num_sens).t.sseh_yy_norm(num_p,num_n).Mnpf,dat_val,k);
                y_pred = iddata(y_pred);
                y_pred = y_pred.y;
                
                %Calcolo indici
                fit = (1 - norm(yf-y_pred)/norm(yf-mean(yf)));
                rms = sqrt(mean((yf-y_pred).^2));
                cod = 1-(rms^2/(mean((yf-mean(yf)).^2)));
                
                
                catch exception
                
                fit = NaN;
                rms = NaN;
                cod = NaN;
                
                if k==1
                    str_spar = [str_spar num2str(NaN) '%%\t\t\t'];
                    str_num_np = [str_num_np 'n=' num2str(Dati(1,num_sens).t.sseh_yy_norm(num_p,num_n).n_) ' p=' num2str(Dati(1,num_sens).t.sseh_yy_norm(num_p,num_n).p_) '\t\t\t'];
                    str_nome_dati = [str_nome_dati 'fit\trms\tcod\t'];
                    str_dati_sim = [str_dati_sim, num2str(fit) '\t', num2str(rms) '\t', num2str(cod) '\t'];
                end
                                   
                end
                
                str_dati = [str_dati, num2str(fit) '\t', num2str(rms) '\t', num2str(cod) '\t'];
                
            end
        end
        str_dati = [str_dati, '\n'];
    end
    
    fprintf(fid, ['\t' str_num_np, '\n']);    
    fprintf(fid, [str_spar '\n']);
    fprintf(fid, ['\t' str_nome_dati, '\n']);
    fprintf(fid, [str_dati]);
    fprintf(fid, [str_dati_sim, '\n \n \n' ]);
    
    str_spar = 'Sparsit�:\t';
    str_num_np = '';
    str_nome_dati = '';
    str_dati = '';
    str_dati_sim = 'Spar_sim\t';
    
end%% sseh_norm

fclose(fid);


%%%%%%%%%%%%%%% ny Mnpf  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
fid = fopen('ValidazioneChiuso/sseh_ny_norm_Mnpf_n1000.txt', 'w+');

str_spar = 'Sparsit�:\t';
str_num_np = '';
str_nome_dati = '';
str_dati = '';
str_dati_sim = 'Spar_sim\t';

for num_sens=1:length(Dati) % scelta sensore 
    
    yf = Dati(1,num_sens).t.y_norm(val_start:val_stop,:);
    Uf = Dati(1,num_sens).t.Udati_norm(val_start:val_stop,:);
    dat_val = iddata(yf,Uf);
    
    [len_p len_n] = size(Dati(1,num_sens).t.sseh_ny_norm);
    
    str_nome_id = ['\tDati(1,' num2str(num_sens) ').t.sseh_ny_norm(p,n).Mnpf'];
    fprintf(fid, [str_nome_id, '\n']);
    
    disp(['Sensore: Dati(1,' num2str(num_sens) ').t.sseh_ny_norm(p,n).Mnpf']);
    
    for k=1:30 % passo di predizione
        

        str_dati = [str_dati, num2str(k), '\t'];
        
        for num_n=1:len_n
            for num_p=1:len_p
                
                try
                if k==1
                    spars = sparsi(Dati(1,num_sens).t.sseh_ny_norm(num_p,num_n).Mnpf);
                    str_spar = [str_spar num2str(spars) '%%\t\t\t'];
                    str_num_np = [str_num_np 'n=' num2str(Dati(1,num_sens).t.sseh_ny_norm(num_p,num_n).n_) ' p=' num2str(Dati(1,num_sens).t.sseh_ny_norm(num_p,num_n).p_) '\t\t\t'];
                    str_nome_dati = [str_nome_dati 'fit\trms\tcod\t'];
                    
                    y_sim = sim(Dati(1,num_sens).t.sseh_ny_norm(num_p,num_n).Mnpf,dat_val.u);
                    y_sim = iddata(y_sim);
                    y_sim = y_sim.y;

                    %Calcolo indici
                    fit = (1 - norm(yf-y_sim)/norm(yf-mean(yf)));
                    rms = sqrt(mean((yf-y_sim).^2));
                    cod = 1-(rms^2/(mean((yf-mean(yf)).^2)));

                    str_dati_sim = [str_dati_sim, num2str(fit) '\t', num2str(rms) '\t', num2str(cod) '\t'];
                    
                end
                
                y_pred = predict(Dati(1,num_sens).t.sseh_ny_norm(num_p,num_n).Mnpf,dat_val,k);
                y_pred = iddata(y_pred);
                y_pred = y_pred.y;
                
                %Calcolo indici
                fit = (1 - norm(yf-y_pred)/norm(yf-mean(yf)));
                rms = sqrt(mean((yf-y_pred).^2));
                cod = 1-(rms^2/(mean((yf-mean(yf)).^2)));
                
                catch exception
                
                fit = NaN;
                rms = NaN;
                cod = NaN;    
                    
                if k==1
                    str_spar = [str_spar num2str(NaN) '%%\t\t\t'];
                    str_num_np = [str_num_np 'n=' num2str(Dati(1,num_sens).t.sseh_ny_norm(num_p,num_n).n_) ' p=' num2str(Dati(1,num_sens).t.sseh_ny_norm(num_p,num_n).p_) '\t\t\t'];
                    str_nome_dati = [str_nome_dati 'fit\trms\tcod\t'];
                    str_dati_sim = [str_dati_sim, num2str(fit) '\t', num2str(rms) '\t', num2str(cod) '\t'];
                end
                                   
                end
                
                str_dati = [str_dati, num2str(fit) '\t', num2str(rms) '\t', num2str(cod) '\t'];
                
            end
        end
        str_dati = [str_dati, '\n'];
    end
    
    fprintf(fid, ['\t' str_num_np, '\n']);    
    fprintf(fid, [str_spar '\n']);
    fprintf(fid, ['\t' str_nome_dati, '\n']);
    fprintf(fid, [str_dati]);
    fprintf(fid, [str_dati_sim, '\n \n \n' ]);
    
    str_spar = 'Sparsit�:\t';
    str_num_np = '';
    str_nome_dati = '';
    str_dati = '';
    str_dati_sim = 'Spar_sim\t';
    
end

fclose(fid);





%% sseh_norm validazione Mnpe

% attenzione in fid ai / o \


fid = fopen('ValidazioneChiuso/sseh_yy_norm_Mnpe_n1000.txt', 'w+');

str_spar = 'Sparsit�:\t';
str_num_np = '';
str_nome_dati = '';
str_dati = '';
str_dati_sim = 'Spar_sim\t';

for num_sens=1:length(Dati) % scelta sensore 
    
    yf = Dati(1,num_sens).t.y_norm(val_start:val_stop,:);
    Uf = Dati(1,num_sens).t.Udati_norm(val_start:val_stop,:);
    dat_val = iddata(yf,Uf);
    
    [len_p len_n] = size(Dati(1,num_sens).t.sseh_yy_norm);
    
    str_nome_id = ['\tDati(1,' num2str(num_sens) ').t.sseh_yy_norm(p,n).Mnpe'];
    fprintf(fid, [str_nome_id, '\n']);
    
    disp(['Sensore: Dati(1,' num2str(num_sens) ').t.sseh_yy_norm(p,n).Mnpe']);
    
    for k=1:30 % passo di predizione
        

        str_dati = [str_dati, num2str(k), '\t'];
        
        for num_n=1:len_n
            for num_p=1:len_p
                
                try
                if k==1
                    spars = sparsi(Dati(1,num_sens).t.sseh_yy_norm(num_p,num_n).Mnpe);
                    str_spar = [str_spar num2str(spars) '%%\t\t\t'];
                    str_num_np = [str_num_np 'n=' num2str(Dati(1,num_sens).t.sseh_yy_norm(num_p,num_n).n_) ' p=' num2str(Dati(1,num_sens).t.sseh_yy_norm(num_p,num_n).p_) '\t\t\t'];
                    str_nome_dati = [str_nome_dati 'fit\trms\tcod\t'];
                    
                    y_sim = sim(Dati(1,num_sens).t.sseh_yy_norm(num_p,num_n).Mnpe,dat_val.u);
                    y_sim = iddata(y_sim);
                    y_sim = y_sim.y;

                    %Calcolo indici
                    fit = (1 - norm(yf-y_sim)/norm(yf-mean(yf)));
                    rms = sqrt(mean((yf-y_sim).^2));
                    cod = 1-(rms^2/(mean((yf-mean(yf)).^2)));

                    str_dati_sim = [str_dati_sim, num2str(fit) '\t', num2str(rms) '\t', num2str(cod) '\t'];
                    
                end
                
                y_pred = predict(Dati(1,num_sens).t.sseh_yy_norm(num_p,num_n).Mnpe,dat_val,k);
                y_pred = iddata(y_pred);
                y_pred = y_pred.y;
                
                %Calcolo indici
                fit = (1 - norm(yf-y_pred)/norm(yf-mean(yf)));
                rms = sqrt(mean((yf-y_pred).^2));
                cod = 1-(rms^2/(mean((yf-mean(yf)).^2)));
                
                
                catch exception
                
                fit = NaN;
                rms = NaN;
                cod = NaN;
                
                if k==1
                    str_spar = [str_spar num2str(NaN) '%%\t\t\t'];
                    str_num_np = [str_num_np 'n=' num2str(Dati(1,num_sens).t.sseh_yy_norm(num_p,num_n).n_) ' p=' num2str(Dati(1,num_sens).t.sseh_yy_norm(num_p,num_n).p_) '\t\t\t'];
                    str_nome_dati = [str_nome_dati 'fit\trms\tcod\t'];
                    str_dati_sim = [str_dati_sim, num2str(fit) '\t', num2str(rms) '\t', num2str(cod) '\t'];
                end
                                   
                end
                
                str_dati = [str_dati, num2str(fit) '\t', num2str(rms) '\t', num2str(cod) '\t'];
                
            end
        end
        str_dati = [str_dati, '\n'];
    end
    
    fprintf(fid, ['\t' str_num_np, '\n']);    
    fprintf(fid, [str_spar '\n']);
    fprintf(fid, ['\t' str_nome_dati, '\n']);
    fprintf(fid, [str_dati]);
    fprintf(fid, [str_dati_sim, '\n \n \n' ]);
    
    str_spar = 'Sparsit�:\t';
    str_num_np = '';
    str_nome_dati = '';
    str_dati = '';
    str_dati_sim = 'Spar_sim\t';
    
end%% sseh_norm

fclose(fid);


%%%%%%%%%%%%%%%%%%%%%%  ny Mnpe %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
fid = fopen('ValidazioneChiuso/sseh_ny_norm_Mnpe_n1000.txt', 'w+');

str_spar = 'Sparsit�:\t';
str_num_np = '';
str_nome_dati = '';
str_dati = '';
str_dati_sim = 'Spar_sim\t';

for num_sens=1:length(Dati) % scelta sensore 
    
    yf = Dati(1,num_sens).t.y_norm(val_start:val_stop,:);
    Uf = Dati(1,num_sens).t.Udati_norm(val_start:val_stop,:);
    dat_val = iddata(yf,Uf);
    
    [len_p len_n] = size(Dati(1,num_sens).t.sseh_ny_norm);
    
    str_nome_id = ['\tDati(1,' num2str(num_sens) ').t.sseh_ny_norm(p,n).Mnpe'];
    fprintf(fid, [str_nome_id, '\n']);
    
    disp(['Sensore: Dati(1,' num2str(num_sens) ').t.sseh_ny_norm(p,n).Mnpe']);
    
    for k=1:30 % passo di predizione
        

        str_dati = [str_dati, num2str(k), '\t'];
        
        for num_n=1:len_n
            for num_p=1:len_p
                
                try
                if k==1
                    spars = sparsi(Dati(1,num_sens).t.sseh_ny_norm(num_p,num_n).Mnpe);
                    str_spar = [str_spar num2str(spars) '%%\t\t\t'];
                    str_num_np = [str_num_np 'n=' num2str(Dati(1,num_sens).t.sseh_ny_norm(num_p,num_n).n_) ' p=' num2str(Dati(1,num_sens).t.sseh_ny_norm(num_p,num_n).p_) '\t\t\t'];
                    str_nome_dati = [str_nome_dati 'fit\trms\tcod\t'];
                    
                    y_sim = sim(Dati(1,num_sens).t.sseh_ny_norm(num_p,num_n).Mnpe,dat_val.u);
                    y_sim = iddata(y_sim);
                    y_sim = y_sim.y;

                    %Calcolo indici
                    fit = (1 - norm(yf-y_sim)/norm(yf-mean(yf)));
                    rms = sqrt(mean((yf-y_sim).^2));
                    cod = 1-(rms^2/(mean((yf-mean(yf)).^2)));

                    str_dati_sim = [str_dati_sim, num2str(fit) '\t', num2str(rms) '\t', num2str(cod) '\t'];
                    
                end
                
                y_pred = predict(Dati(1,num_sens).t.sseh_ny_norm(num_p,num_n).Mnpe,dat_val,k);
                y_pred = iddata(y_pred);
                y_pred = y_pred.y;
                
                %Calcolo indici
                fit = (1 - norm(yf-y_pred)/norm(yf-mean(yf)));
                rms = sqrt(mean((yf-y_pred).^2));
                cod = 1-(rms^2/(mean((yf-mean(yf)).^2)));
                
                catch exception
                
                fit = NaN;
                rms = NaN;
                cod = NaN;    
                    
                if k==1
                    str_spar = [str_spar num2str(NaN) '%%\t\t\t'];
                    str_num_np = [str_num_np 'n=' num2str(Dati(1,num_sens).t.sseh_ny_norm(num_p,num_n).n_) ' p=' num2str(Dati(1,num_sens).t.sseh_ny_norm(num_p,num_n).p_) '\t\t\t'];
                    str_nome_dati = [str_nome_dati 'fit\trms\tcod\t'];
                    str_dati_sim = [str_dati_sim, num2str(fit) '\t', num2str(rms) '\t', num2str(cod) '\t'];
                end
                                   
                end
                
                str_dati = [str_dati, num2str(fit) '\t', num2str(rms) '\t', num2str(cod) '\t'];
                
            end
        end
        str_dati = [str_dati, '\n'];
    end
    
    fprintf(fid, ['\t' str_num_np, '\n']);    
    fprintf(fid, [str_spar '\n']);
    fprintf(fid, ['\t' str_nome_dati, '\n']);
    fprintf(fid, [str_dati]);
    fprintf(fid, [str_dati_sim, '\n \n \n' ]);
    
    str_spar = 'Sparsit�:\t';
    str_num_np = '';
    str_nome_dati = '';
    str_dati = '';
    str_dati_sim = 'Spar_sim\t';
    
end

fclose(fid);




%% ssglar_norm validazione

fid = fopen('ValidazioneChiuso/ssglar_norm_Mnpg_n1000.txt', 'w+');

str_spar = 'Sparsit�:\t';
str_num_np = '';
str_nome_dati = '';
str_dati = '';
str_dati_sim = 'Spar_sim\t';

for num_sens=1:length(Dati) % scelta sensore 
    
    yf = Dati(1,num_sens).t.y_norm(val_start:val_stop,:);
    Uf = Dati(1,num_sens).t.Udati_norm(val_start:val_stop,:);
    dat_val = iddata(yf,Uf);
    
    [len_p len_n] = size(Dati(1,num_sens).t.ssglar_norm.mod);
    
    str_nome_id = ['\tDati(1,' num2str(num_sens) ').t.ssglar_norm.mod(p,n).Mnpg'];
    fprintf(fid, [str_nome_id, '\n']);
    
    disp(['Sensore: Dati(1,' num2str(num_sens) ').t.ssglar_norm.mod(p,n).Mnpg']);
    
    for k=1:30 % passo di predizione
        

        str_dati = [str_dati, num2str(k), '\t'];
        
        for num_n=1:len_n
            for num_p=1:len_p
                
                try
                if k==1 
                    spars = sparsi(Dati(1,num_sens).t.ssglar_norm.mod(num_p,num_n).Mnpg);
                    str_spar = [str_spar num2str(spars) '%%\t\t\t'];
                    str_num_np = [str_num_np 'n=' num2str(Dati(1,num_sens).t.ssglar_norm.mod(num_p,num_n).n) ' p=' num2str(Dati(1,num_sens).t.ssglar_norm.mod(num_p,num_n).pRKHS) '\t\t\t'];
                    str_nome_dati = [str_nome_dati 'fit\trms\tcod\t'];
                    
                    y_sim = sim(Dati(1,num_sens).t.ssglar_norm.mod(num_p,num_n).Mnpg,dat_val.u);
                    y_sim = iddata(y_sim);
                    y_sim = y_sim.y;

                    %Calcolo indici
                    fit = (1 - norm(yf-y_sim)/norm(yf-mean(yf)));
                    rms = sqrt(mean((yf-y_sim).^2));
                    cod = 1-(rms^2/(mean((yf-mean(yf)).^2)));

                    str_dati_sim = [str_dati_sim, num2str(fit) '\t', num2str(rms) '\t', num2str(cod) '\t'];
                    
                end
                
                y_pred = predict(Dati(1,num_sens).t.ssglar_norm.mod(num_p,num_n).Mnpg,dat_val,k);
                y_pred = iddata(y_pred);
                y_pred = y_pred.y;
                
                %Calcolo indici
                fit = (1 - norm(yf-y_pred)/norm(yf-mean(yf)));
                rms = sqrt(mean((yf-y_pred).^2));
                cod = 1-(rms^2/(mean((yf-mean(yf)).^2)));
                
                
                catch exception
                    
                fit = NaN;
                rms = NaN;
                cod = NaN;       
                    
                if k==1 
                    spars = NaN;
                    str_spar = [str_spar num2str(NaN) '%%\t\t\t'];
                    str_num_np = [str_num_np 'n=' num2str(Dati(1,num_sens).t.ssglar_norm.mod(num_p,num_n).n) ' p=' num2str(Dati(1,num_sens).t.ssglar_norm.mod(num_p,num_n).pRKHS) '\t\t\t'];
                    str_nome_dati = [str_nome_dati 'fit\trms\tcod\t'];
                    str_dati_sim = [str_dati_sim, num2str(fit) '\t', num2str(rms) '\t', num2str(cod) '\t'];
                end
                                
                end
                
                str_dati = [str_dati, num2str(fit) '\t', num2str(rms) '\t', num2str(cod) '\t'];
                
            end
        end
        str_dati = [str_dati, '\n'];
    end
    
    fprintf(fid, ['\t' str_num_np, '\n']);    
    fprintf(fid, [str_spar '\n']);
    fprintf(fid, ['\t' str_nome_dati, '\n']);
    fprintf(fid, [str_dati]);
    fprintf(fid, [str_dati_sim, '\n \n \n' ]);
    
    str_spar = 'Sparsit�:\t';
    str_num_np = '';
    str_nome_dati = '';
    str_dati = '';
    str_dati_sim = 'Spar_sim\t';
    
end

fclose(fid);


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
fid = fopen('ValidazioneChiuso/ssglar_norm_Mnpc_n1000.txt', 'w+');

str_spar = 'Sparsit�:\t';
str_num_np = '';
str_nome_dati = '';
str_dati = '';
str_dati_sim = 'Spar_sim\t';

for num_sens=1:length(Dati) % scelta sensore   
    
    yf = Dati(1,num_sens).t.y_norm(val_start:val_stop,:);
    Uf = Dati(1,num_sens).t.Udati_norm(val_start:val_stop,:);
    dat_val = iddata(yf,Uf);
    
    [len_p len_n] = size(Dati(1,num_sens).t.ssglar_norm.mod);
    
    str_nome_id = ['\tDati(1,' num2str(num_sens) ').t.ssglar_norm.mod(p,n).Mnpc'];
    fprintf(fid, [str_nome_id, '\n']);
    
    disp(['Sensore: Dati(1,' num2str(num_sens) ').t.ssglar_norm.mod(p,n).Mnpc']);

    for k=1:30 % passo di predizione
        

        str_dati = [str_dati, num2str(k), '\t'];
        
        for num_n=1:len_n
            for num_p=1:len_p
                
                try
                if k==1
                    spars = sparsi(Dati(1,num_sens).t.ssglar_norm.mod(num_p,num_n).Mnpc);
                    str_spar = [str_spar num2str(spars) '%%\t\t\t'];
                    str_num_np = [str_num_np 'n=' num2str(Dati(1,num_sens).t.ssglar_norm.mod(num_p,num_n).n) ' p=' num2str(Dati(1,num_sens).t.ssglar_norm.mod(num_p,num_n).pRKHS) '\t\t\t'];
                    str_nome_dati = [str_nome_dati 'fit\trms\tcod\t'];
                    
                    y_sim = sim(Dati(1,num_sens).t.ssglar_norm.mod(num_p,num_n).Mnpc,dat_val.u);
                    y_sim = iddata(y_sim);
                    y_sim = y_sim.y;

                    %Calcolo indici
                    fit = (1 - norm(yf-y_sim)/norm(yf-mean(yf)));
                    rms = sqrt(mean((yf-y_sim).^2));
                    cod = 1-(rms^2/(mean((yf-mean(yf)).^2)));

                    str_dati_sim = [str_dati_sim, num2str(fit) '\t', num2str(rms) '\t', num2str(cod) '\t'];
                    
                end
                
                y_pred = predict(Dati(1,num_sens).t.ssglar_norm.mod(num_p,num_n).Mnpc,dat_val,k);
                y_pred = iddata(y_pred);
                y_pred = y_pred.y;
                
                %Calcolo indici
                fit = (1 - norm(yf-y_pred)/norm(yf-mean(yf)));
                rms = sqrt(mean((yf-y_pred).^2));
                cod = 1-(rms^2/(mean((yf-mean(yf)).^2)));
                
                catch exception
                    
                fit = NaN;
                rms = NaN;
                cod = NaN;    
                    
                if k==1
                    spars = NaN;
                    str_spar = [str_spar num2str(NaN) '%%\t\t\t'];
                    str_num_np = [str_num_np 'n=' num2str(Dati(1,num_sens).t.ssglar_norm.mod(num_p,num_n).n) ' p=' num2str(Dati(1,num_sens).t.ssglar_norm.mod(num_p,num_n).pRKHS) '\t\t\t'];
                    str_nome_dati = [str_nome_dati 'fit\trms\tcod\t'];
                    str_dati_sim = [str_dati_sim, num2str(fit) '\t', num2str(rms) '\t', num2str(cod) '\t'];
                end
                                   
                end
                
                str_dati = [str_dati, num2str(fit) '\t', num2str(rms) '\t', num2str(cod) '\t'];
                
            end
        end
        str_dati = [str_dati, '\n'];
    end
    
    fprintf(fid, ['\t' str_num_np, '\n']);    
    fprintf(fid, [str_spar '\n']);
    fprintf(fid, ['\t' str_nome_dati, '\n']);
    fprintf(fid, [str_dati]);
    fprintf(fid, [str_dati_sim, '\n \n \n' ]);
    
    str_spar = 'Sparsit�:\t';
    str_num_np = '';
    str_nome_dati = '';
    str_dati = '';
    str_dati_sim = 'Spar_sim\t';
    
end

fclose(fid);










