function X = sprejemnik(P, d) %X = sprejemnik(P, d) vrne polozaj %X = [x, y] sprejemnika, %P = [p1, q1; p2, q2; ... ;pn, qn] so polozaji oddajnikov, %d = [di] so razdalje sprejemnika od oddajnikov (n x 1 matrika) %Poiscemo zac. priblizek X0 kot resitev 'prirejenega' (ad hoc) linearnega sistema. % leva stran sistema, matrika A A = 2*(P(2:end, :) - P(1:end - 1, :)); % desna stran sistema, stolpec b b = (d(1:end - 1, :).^2 - d(2:end, :).^2) + (P(2:end, 1).^2 - P(1:end - 1, 1).^2) + (P(2:end, 2).^2 - P(1:end - 1, 2).^2); % sistem A*X0 = b resimo po linearni metodi najmanjsih kvadratov X0 = A\b; %Definiramo funkcijo F, ki jo zelimo minimizirati... F = @(x) (x(1) - P(:, 1)).^2 + (x(2) - P(:, 2)).^2 - d.^2; %... in njeno Jacobijevo matriko JF = @(x) 2*(x' - P); %'Resimo' F(X) = 0 z Gauss-Newtonovo iteracijo z zacetnim priblizkom X0. [X, k] = newton(F, JF, X0, 10^-10, 100); X = X'; % testi %!test %! P = [0 0; 1 1; 2 0]; %! d = [1; 1; 1]; %! assert(sprejemnik(P, d), [1, 0], eps);