function res = main
clear all, close all, clc
tol = 1e-2;
A = [2.0001, -0.001, 1.0001, 1.0, 1.001, 0.0, 2.001, 2, 3.001, 3];
A.'
unique(A).'
my_unique(A, [], tol).'
my_unique(A(end:-1:1), [], tol).'
my_unique(sort(A), [], tol).'
A(1) = 8.6745e-016 + j*1.92803e-008;
A(2) = 8.6746e-016 + j*-1.92804e-008;
A(3) = -5.0306e-016 + j*0.68222;
A(4) = -5.0307e-016 + j*-0.68223;
A(5) = -5.0308e-016 + j*0.68224;
A(6) = -5.0309e-016 + j*-0.68225;
A(7) = 7.11236e-016 + j*0.970492;
A(8) = 7.11237e-016 + j*-0.970493;
A(9) = 7.11238e-016 + j*0.970494;
A(10) = 7.11239e-016 + j*-0.970495;
A.'
unique(A).'
my_unique(A).'
my_unique( A(end:-1:1) ).'
my_unique( sort(A) ).'
function B = my_unique(A, abs_tol, rel_tol)
if nargin <=1
abs_tol = NaN;
rel_tol = NaN;
end
if nargin <=2
rel_tol = NaN;
end
if isempty(abs_tol), abs_tol = NaN; end
if isempty(rel_tol), rel_tol = NaN; end
if isnan(abs_tol) || abs_tol < 0.0, abs_tol = 1e-2; end
if isnan(rel_tol) || rel_tol < 0.0, rel_tol = 1e-4; end
i = 1;
while i <= length(A)
x0 = A(i);
k = length(A);
while k >= i + 1
x1 = A(k);
if abs(x0) > abs_tol
d = abs(x1 - x0) / abs(x0);
if d < rel_tol, A(k) = []; end
else
d = abs(x1 - x0);
if d < abs_tol, A(k) = []; end
end
k = k - 1;
end
i = i + 1;
end
B = A;