echo off; clear; format compact; format long g;

% ZADANI C. 102
% =============

% Merena prevyseni (poc.bod, kon. bod, prevyseni [m], delka poradu [km])
dH = [
   1  2     -3.993600   1.410 % 1
   2  3      4.474140   0.540 % 2
   4  5      0.198980   0.520 % 3
   1  4      0.014230   1.060 % 4
   2  4      4.005950   0.580 % 5
   2  4      4.010720   1.460 % 6
   5  2     -4.205110   0.910 % 7
   5  3      0.269580   0.830 % 8
   6  4      4.252610   0.960 % 9
   5  6     -4.446700   1.370 % 10
   3  7      1.335520   0.850 % 11
   2  6     -0.240720   0.720 % 12
];

% Dana vyska:
H_4 =  107.8170;

% Stredni kilometrova chyba nivelace [m]:
m0_km =    0.0020;

% Vypoctete smerodatnou odchylku prevyseni mezi body (3 zpusoby):
prevyseni = [2 6];

% Poznamka 1: vysledky budou kontrolovany s presnosti 0.001 mm!
% Poznamka 2: zadani odpovida variante A.
% Poznamka 3: init = 132


% ØEŠENÍ 5.2
% =========================================================================
% vektor merenych velicin
dH12 = dH(1,3);
dH23 = dH(2,3);
dH45 = dH(3,3);
dH14 = dH(4,3);
dH24_1 = dH(5,3);
dH24_2 = dH(6,3);
dH52 = dH(7,3);
dH53 = dH(8,3);
dH64 = dH(9,3);
dH56 = dH(10,3);
dH37 = dH(11,3);
dH26 = dH(12,3);

L = dH(:,3);

% a) a b)
% vektor parametru (urcenych priblizne)
pH_1 = H_4 - dH14;
pH_2 = H_4 - dH24_1;
pH_3 = H_4 - dH24_1 + dH23;
pH_5 = H_4 + dH45;
pH_6 = H_4 - dH64;
pH_7 = H_4 - dH24_1 + dH23 + dH37;

X0 = [ pH_1
       pH_2
       pH_3
       pH_5
       pH_6
       pH_7 ];

% priblizny vektor mereni L ( prevyseni z parametru urcenych priblizne)
L_X0 = [ pH_2-pH_1
         pH_3-pH_2
         pH_5-H_4
         H_4-pH_1
         H_4-pH_2
         H_4-pH_2
         pH_2-pH_5
         pH_3-pH_5
         H_4-pH_6
         pH_6-pH_5
         pH_7-pH_3
         pH_6-pH_2 ];

% vektor redukovanych mereni 'l'
l = L_X0 - L;

% matice planu ( matice parcialnich derivaci A )
A = [ -1  1  0  0  0  0
       0 -1  1  0  0  0
       0  0  0  1  0  0
      -1  0  0  0  0  0
       0 -1  0  0  0  0
       0 -1  0  0  0  0
       0  1  0 -1  0  0
       0  0  1 -1  0  0
       0  0  0  0 -1  0
       0  0  0 -1  1  0
       0  0 -1  0  0  1
       0 -1  0  0  1  0 ];

% matice vah
for i = 1:length(dH)
P(i,i) = 1/dH(i,4);
end

% c) vypocet prirustku x a vyrovnanych prevyseni
N = A' * P * A;
n = A' * P * l;
dX = - N^(-1) * n;
X = X0 + dX;

H = [ X(1:3)
      H_4
      X(4:6) ]

L_vyr = [ H(2)-H(1)
          H(3)-H(2)
          H(5)-H_4
          H_4-H(1)
          H_4-H(2)
          H_4-H(2)
          H(2)-H(5)
          H(3)-H(5)
          H_4-H(6)
          H(6)-H(5)
          H(7)-H(3)
          H(6)-H(2) ]

% d) vypocet oprav
v1 = A * dX + l
v2 = L_vyr - L

% e) aposteriorni jednotkova stredni chyba
m0 = (  (v1' * P * v1)/ (length(L)-length(X))  )^(1/2)

% f)
% kovarinacni matice merenych prevyseni Q_L
for i = 1:length(dH)
Q_L(i,i) = m0_km^2 * dH(i,4); % O_L = m0_km^2 * P^(-1)
end

% kovarinacni matice vyrovnanych vysek Q_X
C = N^(-1) * A' * P;
Q_X = C * Q_L * C'; % = m0_km^2 * N^-1

% kovarinacni matice vyrovnanych prevyseni Q_L_vyr
Q_L_vyr = A * Q_X * A';

% d) smerodatna odchylka oprav
Q_v = Q_L - Q_L_vyr;


% g. smerodatna odchylka vyr. prevyseni mezi  body 2 a 6
% 1) z kovarinacni matice vyr. neznamych (z Q_X)
dH26_1 = L_vyr(12)
A_dH26_1 = [ zeros(11,6) ; A(12,:) ];
Q_dH26_1 = A_dH26_1 * Q_X * A_dH26_1';

m_dH26_1 = Q_dH26_1(12,12)^(1/2)

% z kovarinacni matice vyr. prevyseni (z Q_L_vyr)
% 2) A 3) z prevyseni dH26
dH26_23 = [ (L_vyr(5) - L_vyr(9))
            (L_vyr(10)- L_vyr(7)) ]
    % L_2 = L_vyr
A = [ 0 0 0 0 1 0  0 0 -1 0 0 0
      0 0 0 0 0 0 -1 0  0 1 0 0 ];
Q_dH26_23 = A * Q_L_vyr * A';
m_dH26_2 = Q_dH26_23(1,1)^(1/2)
m_dH26_3 = Q_dH26_23(2,2)^(1/2)



% ulozeni do excelu:
'Otevøi nový dokument Excelu - tcv1-u5.xls' 
pause;
spojeni = ddeinit ( 'excel' , 'tcv1-u5.xls' );

ddepoke ( spojeni , 'r1c1:r100c100' , 'Pøevýšení' );
ddepoke ( spojeni , 'r1c2:r100c100' , 'Mìøená hodnota' );
ddepoke ( spojeni , 'r2c2:r100c100' , L );
ddepoke ( spojeni , 'r1c3:r100c100' , 'Støední chyba' );
ddepoke ( spojeni , 'r2c3:r100c100' , diag(Q_L).^(1/2) );
ddepoke ( spojeni , 'r1c4:r100c100' , 'Vyrovnaná oprava I' );
ddepoke ( spojeni , 'r2c4:r100c100' , v1 );
ddepoke ( spojeni , 'r1c5:r100c100' , 'Vyrovnaná oprava II' );
ddepoke ( spojeni , 'r2c5:r100c100' , v2 );
ddepoke ( spojeni , 'r1c6:r100c100' , 'Smìrodatná odchylka opravy' );
ddepoke ( spojeni , 'r2c6:r100c100' , Q_v.^(1/2) );
ddepoke ( spojeni , 'r1c7:r100c100' , 'Vyrovnaná hodnota' );
ddepoke ( spojeni , 'r2c7:r100c100' , L_vyr );
ddepoke ( spojeni , 'r1c8:r100c100' , 'Støední chyba' );
ddepoke ( spojeni , 'r2c8:r100c100' , diag(Q_L_vyr).^(1/2) );

ddepoke ( spojeni , 'r15c1:r100c100' , 'Nadmoøská výška' );
ddepoke ( spojeni , 'r15c2:r100c100' , 'Vyrovnaná hodnota' );
ddepoke ( spojeni , 'r16c2:r100c100' , X );
ddepoke ( spojeni , 'r15c3:r100c100' , 'Støední chyba' );
ddepoke ( spojeni , 'r16c3:r100c100' , diag(Q_X).^(1/2) );

ddepoke ( spojeni , 'r23c1:r100c100' , 'Výpoèet smìrodatné odchylky pro pøevýšení h26 více zpùsoby' );
ddepoke ( spojeni , 'r24c1:r100c100' , 'Odeètením z  kovarinaèní matice vyrovnaných mìøení' );
ddepoke ( spojeni , 'r25c1:r100c100' , Q_L_vyr(12,12)^(1/2) );
ddepoke ( spojeni , 'r26c1:r100c100' , 'Výpoèet pomocí kovarianèní matice vyrovnaných výšek bodù' );
ddepoke ( spojeni , 'r27c1:r100c100' , Q_dH26_1(12,12)^(1/2) );
ddepoke ( spojeni , 'r28c1:r100c100' , 'Výpoèet pomocí kovarianèní matice pøevýšení' );
ddepoke ( spojeni , 'r29c1:r100c100' , diag(Q_dH26_23).^(1/2) );




