Function to undertake steps 2 to 8 of the GGMR algorithm (Annex C)

function [tt, dt, f, J, Q, R1, T, Z, ft1, ft2, T11, T12, T22, et2] = ...
  algm_ggmr_orthogonal_steps_2_to_8(x, y, B, tt, dt, f, J, Q, R1, T, Z, ...
    ft1, ft2, T11, T12, T22, et2, ind)

Step 2.

m = length(x);
f{ind} = [x - tt{ind}(1:m);
          y - (tt{ind}(m+1) + tt{ind}(m+2)*tt{ind}(1:m))];
J{ind} = [-eye(m), zeros(m, 2);
          -tt{ind}(m+2)*eye(m), -ones(m, 1), -tt{ind}(1:m)];

Step 3.

[Q{ind}, R10{ind}] = qr(J{ind});
R1{ind} = R10{ind}(1:m+2, 1:m+2);

Step 4.

[T{ind}, Z{ind}] = rq(Q{ind}'*B);

Step 5.

p = size(B, 2);
ft{ind} = Q{ind}'*f{ind};
ft1{ind} = ft{ind}(1:m+2);
ft2{ind} = ft{ind}(m+3:2*m);
T11{ind} = T{ind}(1:m+2, 1:p-m+2);
T12{ind} = T{ind}(1:m+2, p-m+3:p);
T22{ind} = T{ind}(m+3:2*m, p-m+3:p);

Step 6.

et2{ind} = T22{ind}\ft2{ind};

Step 7.

dt{ind} = R1{ind}\(T12{ind}*et2{ind} - ft1{ind});

Step 8.

tt{ind+1} = tt{ind} + dt{ind};

End of algm_ggmr_orthogonal_steps_2_to_8.m

Function to determine the RQ factorization of a matrix C

function [R, Q] = rq(C)

[Q, L] = ql(C');
R = L';
Q = Q';

End of rq.m

Function to detemine the QL factorization of a matrix C

function [Q, L] = ql(C)

[m, n] = size(C);
[U, T] = qr(C(1:m, n:-1:1));
L = T(m:-1:1, n:-1:1);
Q = U(1:m, m:-1:1);

End of ql.m