如何找到主特征方向?
How to find principal eigen direction?
我正在尝试在椭球内生成点,然后尝试适应光滑的椭球表面。目标是适应未知数据,我必须在 3 个主轴上找到 a、b 和 c 的值。
Rinv 应该等同于 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 顺序。 (2) 此处未知数据集的 a、b、c 的值“[x, y, z] = ellipsoid(0,0,0,a,b,c,30)”
谢谢
要从 eigen-space 计算 a,b,c
的值,您只需计算 eigen-space 投影椭球的半径。这是微不足道的,因为椭圆体是 axis-oriented 在 eigen-space 中(我认为这是你首先这样做的唯一原因)。只需获取每个方向的最大值和最小值!
nC= X*pc;
plot3(nC(:,1),nC(:,2),nC(:,3),'r.')
hold on
a2=(max(nC(:,1))-min(nC(:,1)))/2;
b2=(max(nC(:,2))-min(nC(:,2)))/2;
c2=(max(nC(:,3))-min(nC(:,3)))/2;
[x, y, z] = ellipsoid(0,0,0,a2,b2,c2,30);
hSurface=surf(x, y, z, 'FaceColor','blue','EdgeColor','none');
alpha(0.5)
axis equal
请注意,此代码实际上使 order
过时。
我正在尝试在椭球内生成点,然后尝试适应光滑的椭球表面。目标是适应未知数据,我必须在 3 个主轴上找到 a、b 和 c 的值。 Rinv 应该等同于 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 顺序。 (2) 此处未知数据集的 a、b、c 的值“[x, y, z] = ellipsoid(0,0,0,a,b,c,30)” 谢谢
要从 eigen-space 计算 a,b,c
的值,您只需计算 eigen-space 投影椭球的半径。这是微不足道的,因为椭圆体是 axis-oriented 在 eigen-space 中(我认为这是你首先这样做的唯一原因)。只需获取每个方向的最大值和最小值!
nC= X*pc;
plot3(nC(:,1),nC(:,2),nC(:,3),'r.')
hold on
a2=(max(nC(:,1))-min(nC(:,1)))/2;
b2=(max(nC(:,2))-min(nC(:,2)))/2;
c2=(max(nC(:,3))-min(nC(:,3)))/2;
[x, y, z] = ellipsoid(0,0,0,a2,b2,c2,30);
hSurface=surf(x, y, z, 'FaceColor','blue','EdgeColor','none');
alpha(0.5)
axis equal
请注意,此代码实际上使 order
过时。