Матричный множественный эллипс Халира с использованием векторизации - PullRequest
0 голосов
/ 04 февраля 2019

У меня регулярно имеется более 10 ^ 8 наборов данных подбора эллипса для решения задач моделирования Монте-Карло путем циклического выполнения алгоритма подгонки эллипса Halir & Flusser (стр. 4, рис. 2).Есть ли способ векторизации процесса / алгоритма / функции, чтобы я мог сразу отправить лот в функцию, и он возвращает 10 ^ 8 решений для 10 ^ 8 наборов?Я хочу придерживаться Halir & Flusser, так как он очень прочный.Используя другие методы подбора эллипса, этот метод всегда возвращает эллипсы, которые я могу обработать дальше.

function a = Halir(x,y)
% Reproduces the improved ellipse-specific fitting algorithm of:
% Radim Halir and Jan Flusser (1998) "Numerically Stable Direct Least Squares Fitting of Ellipses"
% a(1)x^2 + a(2)xy + a(3)y^2 + a(4)x + a(5)y + a(6) = 0
D1 = [x.^2, x.*y, y.^2];
D2 = [x, y, ones(size(x))];
S1 = D1'*D1;
S2 = D1'*D2;
S3 = D2'*D2;
T = -inv(S3)*S2';
M = S1+S2*T;
M = [M(3,:)./2; -M(2,:); M(1,:)./2];
[evec, eval] = eig(M);
cond = 4*evec(1,:).*evec(3,:)-evec(2,:).^2;
a1 = evec(:,find(cond>0));
a = [a1; T*a1];
...