clc;
clear all;
close all;

fileID = fopen('teste_completo_nivel.txt','wt'); % ficheiro de saida

% vectores das leituras efectuadas nas miras em A (LA) e em B (LB) --------

LA=[1.04212;0.99658;1.00412;0.97959;0.94900;1.07891;1.11014;1.14348;0.92791;0.92423;0.94004;0.93005;1.01469;0.96329;0.91578;1.10249;1.04267;0.92985;1.01999;1.16650;0.99955;0.95003;1.01991;0.94815;0.93990;1.15064;1.15839;1.21827;0.93799;1.04792;0.97169;1.01006;0.91875;1.01662;0.91441;1.15100;1.13577;1.11298;1.08326;1.04402];

LB=[1.11730;1.07003;1.07960;1.05331;1.02251;1.15328;1.18566;1.21807;1.00890;0.99796;1.01412;1.00501;1.08970;1.03860;0.98990;1.17682;1.11810;1.00374;1.09458;1.24023;1.07310;1.02368;1.09299;1.02061;1.01349;1.22556;1.23250;1.29700;1.01191;1.12120;1.04582;1.08419;0.99222;1.09028;0.98930;1.23360;1.20929;1.18799;1.15754;1.11866];

% numero de leituras (nA) efectuadas em cada mira -------------------------

nA=length(LA);

% vector dos indices das observacoes

for i=1:nA
    indice40(i)=i;
end
indice40=indice40';

for i=1:20
    indice20(i)=i;
end
indice20=indice20';

% vector dos desniveis (desnivel) calculados ------------------------------

desnivel=LA-LB; %d(i)

% escrever dados e desniveis

fprintf(fileID,' i   LA      LB    desnivel\n');
fprintf(fileID,'%2i %6.5f %6.5f %6.5f\n',[indice40,LA,LB,desnivel]');

% amplitude dos desniveis

desnivel_max=-1000;
desnivel_min=1000;
for i=1:nA
    if (desnivel(i)>desnivel_max) 
        desnivel_max=desnivel(i);
    end
    if (desnivel(i)<desnivel_min)
        desnivel_min=desnivel(i);
    end
end

fprintf(fileID,'desnivel minimo =%6.5f\n',desnivel_min);
fprintf(fileID,'desnivel maximo =%6.5f\n',desnivel_max);

% desnivel medio (desnivel_medio1) com os primeiros 20 desniveis ---------

desnivel_medio1=0.0;
for i=1:20
    desnivel_medio1=desnivel_medio1+desnivel(i);
end
desnivel_medio1=desnivel_medio1/20; %d1
fprintf(fileID,'desnivel medio1 d1 (20 desniveis) =%6.5f\n',desnivel_medio1);

% desnivel medio (desnivel_medio2) com os segundos 20 desniveis -----------

desnivel_medio2=0.0;
for i=21:40
    desnivel_medio2=desnivel_medio2+desnivel(i);
end
desnivel_medio2=desnivel_medio2/20; %d2
fprintf(fileID,'desnivel medio2 d2 (20 desniveis) =%6.5f\n',desnivel_medio2);

% diferenca nas origens das duas miras (delta) ----------------------------

delta=desnivel_medio1-desnivel_medio2;
fprintf(fileID,'delta =%7.6f\n',delta);

% residuos (residuo1) dos primeiros 20 desniveis --------------------------

fprintf(fileID,'  i   r1 (20)\n');
for i=1:20
    residuo1(i)=desnivel_medio1-desnivel(i); %r(i)
end
residuo1=residuo1';
fprintf(fileID,'%3i %9.5f\n',[indice20,residuo1]');

% residuos (residuos2) dos segundos 20 desniveis --------------------------

fprintf(fileID,'  i   r2 (20)\n');
for i=1:20
    residuo2(i)=desnivel_medio2-desnivel(i+20); %r(i)
end
residuo2=residuo2';
fprintf(fileID,'%3i %9.5f\n',[indice20,residuo2]');

% desnivel_medio (desnivel_medio) com os 40 desniveis ---------------------

desnivel_medio=0.0;
for i=1:40
    desnivel_medio=desnivel_medio+desnivel(i);
end
desnivel_medio=desnivel_medio/40; %d
fprintf(fileID,'desnivel medio d (40 desniveis)   =%6.5f\n',desnivel_medio);

% residuos (residuo2) dos 40 desniveis ------------------------------------

fprintf(fileID,'  i   r (40)\n');
for i=1:40
    residuo(i)=desnivel_medio-desnivel(i); 
end
residuo=residuo';
fprintf(fileID,'%3i %9.5f\n',[indice40,residuo]');

% somatorio dos 20 primeiros residuos (somatorio_residuo1) ----------------

somatorio_residuo1=0;
for i=1:20
    somatorio_residuo1=somatorio_residuo1+residuo1(i);
end
fprintf(fileID,'somatorio residuo1 =%7.6f\n',somatorio_residuo1);

% somatorio dos 20 segundos residuos (somatorio_residuo2) -----------------

somatorio_residuo2=0;
for i=1:20
    somatorio_residuo2=somatorio_residuo2+residuo2(i);
end
fprintf(fileID,'somatorio residuo2 =%7.6f\n',somatorio_residuo2);

% quadrado dos primeiros 20 residuos -------------------------------------

somatorio_residuo1_2=0;
for i=1:20
    somatorio_residuo1_2=somatorio_residuo1_2+residuo1(i)^2;
end
fprintf(fileID,'quadrado somatorio residuo1 =%7.6f\n',somatorio_residuo1_2);

%quadrado dos segundos 20 residuos ----------------------------------------

somatorio_residuo2_2=0;
for i=1:20
    somatorio_residuo2_2=somatorio_residuo2_2+residuo2(i)^2;
end
fprintf(fileID,'quadrado somatorio residuo2 =%7.6f\n',somatorio_residuo2_2);

% quadrado dos 40 residuos ------------------------------------------------

somatorio_residuo_2=0;
for i=1:40
    somatorio_residuo_2=somatorio_residuo_2+residuo(i)^2;
end
fprintf(fileID,'quadrado somatorio residuo  =%7.6f\n',somatorio_residuo_2);

% diferenca

dif=somatorio_residuo1_2+somatorio_residuo2_2-somatorio_residuo_2;
fprintf(fileID,'dif =%7.6f\n',dif);

% desvio padrao dos desniveis calculados (s) ------------------------------

s=sqrt(somatorio_residuo_2/38);
fprintf(fileID,'desvio padrao dos desniveis (40) =%7.6f\n',s);

s_km_niv_duplo=2.86*s*1000; %m para mm
fprintf(fileID,'desvio padrao dos desniveis /km nivelamento duplo =%7.6f\n',s_km_niv_duplo);

% a) NAK2: sigma=0.3 mm/km nivelamento duplo

sigma=0.3;
if (s_km_niv_duplo<1.19*sigma)
    fprintf(fileID,'Aceitar teste a\n');
else
    fprintf(fileID,'Rejeitar teste a\n');
end
    
% c) 

if (abs(delta)<0.64*s_km_niv_duplo)
    fprintf(fileID,'Aceitar teste c\n');
else
    fprintf(fileID,'Rejeitar teste c\n');
end

disp ('Fim de programa.')

