Вы ищете нетривиальное решение 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 = идентичность. Таким образом, он имеет собственное значение 1 с осью вращения в качестве соответствующего собственного вектора. Вектор, который я вычислил выше, является нормализованной осью вращения.
Примечание. Для этого я заменил ваш 0,7071 на sqrt (0,5). Если ошибки округления вызывают беспокойство, но вы заранее знаете, что должно быть нетривиальное решение, лучше всего сделать разложение по A-I по сингулярным значениям и выбрать самый правый единственный единственный вектор:
>> [u,s,v] = svd(A-eye(3));
>> v(:,end)
ans =
0.67859834454585
-0.67859834454585
0.28108463771482
Таким образом, вы можете вычислить вектор v, который минимизирует | A * v-v | при условии, что | v | = 1, где |. | это евклидова норма.