function [errmagnification] = part4(delta_t, phis, thetas)
% ‘true’ position of observer
true_x = 0;
true_y = 0;
true_z = 6370;
true_d = 0.0001;
n = 20; % number of iterations of multivariate newton’s method
c = 299792.458; % speed of light
rho = 26570; % distance (in km) of satellites from center of earth
sat = zeros(4, 3); % matrix of satellite positions (known)
times = zeros(1,4); % vector of observer time delays (fudged by backwards error)
for n=1:4
sat(n,1) = rho * cos(phis(n)) * cos(thetas(n)); % sat #n’s x coord
sat(n,2) = rho * cos(phis(n)) * sin(thetas(n)); % sat #n’s y coord
sat(n,3) = rho * sin(phis(n)); % sat #n’s z coord
dist = sqrt(sat(n,1)^2 + sat(n,2)^2 + (sat(n,3) - 6370)^2);
times(n) = dist/c + true_d;
end
%sat % output calculated sat coordinates
%times % output calculated time delays
maxerr_disp = []; % input error vector in the maximum error case
maxerr_vect = []; % calculated observer position in the maximum error case
maxerr = 0; % maximum position error (in individual coordinate)
%try all possible combinations of error, (-1, -1, -1, -1) to (1, 1, 1, 1)
for t1_err=-1:1
for t2_err=-1:1
for t3_err=-1:1
for t4_err=-1:1
%calculate fudged time delays recorded by observer
t1 = times(1) + t1_err * delta_t;
t2 = times(2) + t2_err * delta_t;
t3 = times(3) + t3_err * delta_t;
t4 = times(4) + t4_err * delta_t;
% init_vec is close to actual value but off by 10km initially
init_vec = [10; 10; 6380; 0];
% multivariate newton’s method copied from part 1
for i = 1:n
x = init_vec(1,1);
y = init_vec(2,1);
z = init_vec(3,1);
d = init_vec(4,1);
f1 = (x-sat(1,1))^2 + (y-sat(1,2))^2 + (z-sat(1,3))^2 - (c*(t1-d))^2;
f2 = (x-sat(2,1))^2 + (y-sat(2,2))^2 + (z-sat(2,3))^2 - (c*(t2-d))^2;
f3 = (x-sat(3,1))^2 + (y-sat(3,2))^2 + (z-sat(3,3))^2 - (c*(t3-d))^2;
f4 = (x-sat(4,1))^2 + (y-sat(4,2))^2 + (z-sat(4,3))^2 - (c*(t4-d))^2;
f_sol = [f1; f2; f3; f4];
Jacobian = 2*[x - sat(1,1), y - sat(1,2), z - sat(1,3), c^2*(t1 - d);...
x - sat(2,1), y - sat(2,2), z - sat(2,3), c^2*(t2 - d);...
x - sat(3,1), y - sat(3,2), z - sat(3,3), c^2*(t3 - d);...
x - sat(4,1), y - sat(4,2), z - sat(4,3), c^2*(t4 - d);];
s = Jacobian \ (-f_sol);
init_vec = init_vec + s;
end
err = max(abs([init_vec(1)-true_x, init_vec(2)-true_y, init_vec(3)-true_z]));
if err > maxerr
maxerr_disp = [t1_err, t2_err, t3_err, t4_err] * delta_t;
maxerr_vect = init_vec;
maxerr = err;
end
end
end
end
end
[globex, globey, globez] = sphere(16);
figure
scatter3(sat(:,1), sat(:,2), sat(:,3))
hold on
surf(6370*globex, 6370*globey, 6370*globez, ones(size(globez)));
axis equal
maxerr_disp;
maxerr
errmagnification = maxerr / (c * delta_t);