Covariance Matrix of an Ellipse

后端 未结 2 1777
闹比i
闹比i 2021-01-05 06:47

I\'ve been trying to solve a problem. I\'m surprised I haven\'t been able to find anything really useful on the net.

I know that from the eigenvalues of the covarian

2条回答
  •  庸人自扰
    2021-01-05 07:25

    Just by pure reverse engineering (I'm not familiar anymore with this material), I can do this:

    %// Generate circle
    R = 189;
    t = linspace(0, 2*pi, 1000).';
    x = R*cos(t);
    y = R*sin(t);
    
    %// Find the radius?
    [~,L] = eig( cov([x,y]) );
    
    %// ...hmm, seems off by a factor of sqrt(2)
    2*sqrt( diag(L) )        
    
    %// so it would come out right when I'd include a factor of 1/2 in the sqrt():
    2*sqrt( diag(L)/2 )        
    

    So, let's test that theory for general ellipses:

    %// Random radii
    a1 = 1000*rand;
    a2 = 1000*rand;
    
    %// Random rotation matrix
    R = @(a)[
        +cos(a) +sin(a); 
        -sin(a) +cos(a)];
    
    %// Generate pionts on the ellipse 
    t = linspace(0, 2*pi, 1000).';
    xy = [a1*cos(t)  a2*sin(t);] * R(rand);
    
    %// Find the deviation from the known radii
    %// (taking care of that the ordering may be different)
    [~,L] = eig(cov(xy));
    min(abs(1-bsxfun(@rdivide, 2*sqrt( diag(L)/2 ), [a1 a2; a2 a1])),[],2)
    

    which always returns something acceptably small.

    So, seems to work :) Can anyone verify that this is indeed correct?

提交回复
热议问题