我通常有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];