Matrix 极大值对称矩阵的对角化

Matrix 极大值对称矩阵的对角化,matrix,maxima,Matrix,Maxima,这里是我的问题,我有一个实对称矩阵M,它依赖于两个参数a,b(假设为正),我想找到一个正交矩阵p,使得PMP^{-1}是一个对角矩阵。下面是我所做工作的一个例子: 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&

这里是我的问题,我有一个实对称矩阵M,它依赖于两个参数a,b(假设为正),我想找到一个正交矩阵p,使得PMP^{-1}是一个对角矩阵。下面是我所做工作的一个例子:

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
。当我尝试你的例子时,我发现
rightmatrix。leftmatrix
是单位矩阵(leftmatrix.rightmatrix
也是)


我同意
similaritytransform
的文档并不完全清楚。哦,好的。

谢谢你的回答。我同意我们得到rightmatrix.leftmatrix=恒等式,但rightmatrix不是leftmatrix的转置,这就是我想要的。你知道怎么做吗?@user37238好的,我现在明白这个问题了。当某个特征值的重数大于1时,
similaritytransform
返回的相应特征向量不一定是正交的。(这可能是
similaritytransform
中的一个错误)您可以应用
gramschmidt
函数来构造正交向量,尽管如果您想要正交,您必须在
gramschmidt
@user37238之后对它们进行规范化,我认为您特别想要做的是
gramschmidt(转置(右矩阵))
@user37238在看了一会儿之后,我认为如果启用了
hermitianmatrix
标志,那么
similaritytransform
应该确保
rightmatrix
是正交的(从那时起,有广告称
rightmatrix
的转置是它的逆);如果该标志被禁用,
rightmatrix
不必是正交的,只要它是可逆的。@user37238我认为您需要编写
ev(similaritytransform(M),hermitianmatrix=true)
,即调用
similaritytransform
,使用
hermitianmatrix
临时绑定到
true
。(一些由
ev
识别的标志仅通过命名标志就绑定到
true
;这些标志称为
evflag
。但是
hermitianmatrix
不是
evflag