【问题标题】:Diagonalize a symmetric matrix in Maxima在 Maxima 中对角化对称矩阵
【发布时间】:2014-09-24 14:25:12
【问题描述】:

这是我的问题,我有一个真正的对称矩阵 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,但这个向量没有给我一个正交矩阵。谁能给我解释一下是什么问题?

【问题讨论】:

    标签: matrix maxima


    【解决方案1】:

    在调用similaritytransform 后查看全局变量rightmatrixleftmatrix。当我尝试您的示例时,我发现 rightmatrix . leftmatrix 是单位矩阵(leftmatrix . rightmatrix 也是如此)。

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

    【讨论】:

    • 感谢您的回答。我同意我们得到 rightmatrix.leftmatrix = Identity 但 rightmatrix 不是 leftmatrix 的转置,这就是我想要的。你知道怎么得到吗?
    • @user37238 好的,我现在明白这个问题了。看来,当某个特征值的多重性 > 1 时,similaritytransform 返回的相应特征向量不一定是正交的。 (这可能是similaritytransform 中的一个错误。)您可以应用gramschmidt 函数来构造正交向量,但如果您想要正交,则必须在gramschmidt 之后对其进行归一化。
    • @user37238 我想具体你想做的是gramschmidt(transpose(rightmatrix))
    • @user37238 在看了一下这个之后,我认为similaritytransform 应该确保rightmatrix 是正交的,如果启用了hermitianmatrix 标志(从那时起就宣传rightmatrix 的转置是它的倒数);如果标志被禁用,rightmatrix 不需要是正交的,只要它是可逆的。
    • @user37238 我认为你需要写ev(similaritytransform(M), hermitianmatrix=true),即调用similaritytransformhermitianmatrix 暂时绑定到true。 (ev 识别的一些标志仅通过命名标志就绑定到true;那些称为evflag。但hermitianmatrix 不是evflag。)
    猜你喜欢
    • 1970-01-01
    • 2020-10-17
    • 1970-01-01
    • 2018-03-02
    • 1970-01-01
    • 2013-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多