Вот моя проблема, у меня есть вещественная симметричная матрица M в зависимости от двух параметров а, б (которые предполагаются положительными), и я хочу найти ортогональную матрицу P такой, что PMP^{- 1} является диагональной матрицей. Вот пример того, что я сделал:диагонализирующие симметричная матрица в Maxima
assume(a>0,b>0);
M : matrix([a,a+b,a+b],[a+b,a,a+b],[a+b,a+b,a]);
load("eigen");
[myeigval,myeigvec]:similaritytransform(ev(M,hermitianmatrix));
или просто
assume(a>0,b>0);
M : matrix([a,a+b,a+b],[a+b,a,a+b],[a+b,a+b,a]);
load("eigen");
[myeigval,myeigvec]:similaritytransform(M);
я получаю тот же результат для этих двух тестов:
[[[2*b+3*a,-b],[1,2]],[[[1/sqrt(3),1/sqrt(3),1/sqrt(3)]],[[1/sqrt(2),0,-1/sqrt(2)],[0,1/sqrt(2),-1/sqrt(2)]]]]
норма векторов равна 1, но эти векторы не дают мне ортогональной матрицы. Может кто-нибудь объяснить мне, в чем проблема?
Благодарим вас за ответ. Я согласен, что мы получаем rightmatrix.leftmatrix = Identity, но правая матрица не является транспонированием левой матрицы, и это то, что я хочу. Вы знаете, как это получить? – user37238
@ user37238 ОК, я понимаю вопрос сейчас. Похоже, что когда некоторое собственное число имеет кратность> 1, соответствующие собственные векторы, возвращаемые 'сходным преобразованием', не обязательно ортогональны. (Вероятно, это ошибка в 'similaritytransform'.) Вы можете применить функцию' gramschmidt' для построения ортогональных векторов, хотя, если вы хотите ортонормировать, вам придется нормализовать их после 'gramschmidt'. –
@ user37238 Я думаю, именно то, что вы хотите сделать, это 'gramschmidt (transpose (rightmatrix))'. –