您正在寻找一个不平凡的解决方案 v 到 A*v=v 且 v=[x;y;z] 和...
A =
0.70710678118655 0 0.70710678118655
-0.50000000000000 0.70710678118655 0.50000000000000
-0.50000000000000 -0.70710678118655 0.50000000000000
您可以将其转换为 (A-I)v=0,其中 I 是 3x3 单位矩阵。要找到一个重要的解决方案,您需要做的是检查 A-I 的零空间:
>> null(A-eye(3))
ans =
0.67859834454585
-0.67859834454585
0.28108463771482
所以,你有一个一维零空间。否则您会看到不止一列。列的每个线性组合都是该零空间中的一个点,A-I 将其映射到零向量。因此,该向量的每个倍数都是您问题的解决方案。
实际上,你的矩阵 A 是第一类旋转矩阵,因为 det(A)=1 且 A'*A=identity。因此它的特征值为1,以旋转轴为对应的特征向量。我上面计算的向量是标准化旋转轴。
注意:为此,我用 sqrt(0.5) 替换了您的 0.7071。如果舍入误差是一个问题,但您事先知道必须有一个非平凡的解决方案,那么最好的选择是对 A-I 进行奇异值分解并选择最右边的奇异向量:
>> [u,s,v] = svd(A-eye(3));
>> v(:,end)
ans =
0.67859834454585
-0.67859834454585
0.28108463771482
这样你就可以计算一个向量 v 来最小化 |A*v-v|在 |v|=1 的约束下,其中 |.|是欧几里得范数。