function res = gaussnewton(x0, num_iterations)

A1 = 15600;B1 = 7540; C1 = 20140;T1 = 0.07074;
A2 = 18760;B2 = 2750; C2 = 18610;T2 = 0.07220;
A3 = 17610;B3 = 14630;C3 = 13480;T3 = 0.07690;
A4 = 19170;B4 = 610;  C4 = 18390;T4 = 0.07242;
c = 299792.458;

F = @(x) [(x(1) - A1)^2 + (x(2) - B1)^2 + (x(3) - C1)^2 - c^2*(x(4) - T1)^2;
           (x(1) - A2)^2 + (x(2) - B2)^2 + (x(3) - C2)^2 - c^2*(x(4) - T2)^2;
           (x(1) - A3)^2 + (x(2) - B3)^2 + (x(3) - C3)^2 - c^2*(x(4) - T3)^2;
           (x(1) - A4)^2 + (x(2) - B4)^2 + (x(3) - C4)^2 - c^2*(x(4) - T4)^2];
       
DF = @(x) [2*(x(1) - A1) 2*(x(2) - B1) 2*(x(3) - C1) 2*c^2*(-x(4) + T1);
           2*(x(1) - A2) 2*(x(2) - B2) 2*(x(3) - C2) 2*c^2*(-x(4) + T2);
           2*(x(1) - A3) 2*(x(2) - B3) 2*(x(3) - C3) 2*c^2*(-x(4) + T3);
           2*(x(1) - A4) 2*(x(2) - B4) 2*(x(3) - C4) 2*c^2*(-x(4) + T4)];

x = x0;  % initial guess vector

for i = 1:num_iterations
   v = DF(x)\F(x);
   x = x - v;
end

res = x;
