난 타원체 안에 점을 생성하고 부드러운 타원체 표면에 맞추려고 노력하고 있습니다. 목표는 3 개의 주축에서 a, b 및 c의 값을 찾아야하는 알려지지 않은 데이터에 맞추는 것입니다. Rinv는 pc와 동등해야합니다. 하지만 나는 다른 순서로 PC를 얻고있다. 그래서 올바른 순서를 matlab에 내 데이터를 회전 좌표를 찾아야 좌표.주요 고유 방향을 찾는 방법은 무엇입니까?
a=3;
b=5;
c=1;
index=1;
for i=1:500000
x=10*rand-5;
y=10*rand-5;
z=10*rand-5;
if ((x^2/a^2) + (y^2/b^2) + (z^2/c^2) -1) <0
C(index,:)=[x,y,z];
index=index+1;
end
end
theta=pi/4; phi=pi/6; omega = pi/3;
Rx= [1 0 0; 0 cos(theta) -sin(theta); 0 sin(theta) cos(theta)];
Ry= [cos(phi) 0 sin(phi); 0 1 0; -sin(phi) 0 cos(phi)];
Rz= [cos(omega) -sin(omega) 0; sin(omega) cos(omega) 0; 0 0 1];
R= Rz*Ry*Rx;
Rinv = inv(R);
X = C*R;
[pc,val]=eig(X'*X); E=diag(val);
[sa,sb]= sort(pc*E, 'descend'); sb
order = [2,3,1];
nC= X*pc(:,order);
plot3(nC(:,1),nC(:,2),nC(:,3),'.')
hold on
[x, y, z] = ellipsoid(0,0,0,a,b,c,30);
hSurface=surf(x, y, z, 'FaceColor','blue','EdgeColor','none');
alpha(0.5)
특히이 줄에는 nC = X * pc (:, order); 주문을 수동으로 찾고 있습니다. 어느 누구든지 (1) 어떻게 PC 주문을 올바르게 찾을 수 있습니까? (x, y, z) = 타원체 (0,0,0, a, b, c, 30)
"올바른"순서는 어느 것입니까? –
Rinv와 pc를 수동으로 비교 한 다음 주문을 찾아야합니다. 이 특정 예에서는 [2,3,1]이지만 다른 데이터 세트의 경우에는 다를 것입니다. – user3704712
나는 아직도 미안하다. 'Rinv'는 회전 행렬의 역입니다. 회전 행렬에는 "순서"가 없습니다. 무슨 소리 야? –