Mathematica矩阵对角化
我正在考虑矩阵A,使得A = PDP^-1。Mathematica矩阵对角化
我解决这个使用Mathematica的方法是:
a={{0, -1}, {-1, 0}}
d = DiagonalMatrix[Eigenvalues[a]]
{{-1,0}, {0,1}}
p = Transpose[Eigenvectors[a]]
p.d.Inverse[p]
{{0, -1}, {-1, 0}}
这是正确的。
问题是,P矩阵不是我所期望的那样。该数学产生的矩阵是
p={{1, -1}, {1, 1}}
但是我正在寻找
p2={{1/Sqrt[2], 1/Sqrt[2]}, {1/Sqrt[2], -(1/Sqrt[2])}}
p2.d.Inverse[p2]
{{0,-1}, {-1,0}}
这也解决了方程。有什么办法让我强制Mathematica在执行Transpose [Eigenvectors [a]]时向我展示不同的答案?
你可以正常化的特征向量:
a = {{0, -1}, {-1, 0}};
d = DiagonalMatrix[Eigenvalues[a]];
p = Transpose[Normalize /@ Eigenvectors[a]];
所以p
是你想要什么:
{{1/Sqrt[2], -(1/Sqrt[2])}, {1/Sqrt[2], 1/Sqrt[2]}}
特征向量可以*重新缩放一个常数,这意味着有无数个可能的特征向量。自然,Mathematica不能也不会向你展示所有这些。所以你需要以某种方式规范特征向量。
一种选择是使用N
将矩阵转换为数字形式。 Mathematica返回数字矩阵的归一化特征向量。
p2 = Transpose[Eigenvectors[N[a]]]
这是有风险的,但是,因为计算数字矩阵可以经常失败壮观的逆由于各种数值误差。
另一种更好的选择是使用Normalize
手动标准化特征向量。你必须把它应用到每一个特征向量由Eigenvectors
函数返回的列表:
p2 = Transpose[Normalize/@Eigenvectors[a]]
也许你应该考虑一个内置的矩阵分解工具?当然,有许多矩阵分解,其中许多是内置于Mathematica中的。可能最符合您情况的那个是JordanDecomposition
。这是在行动
SeedRandom[1];
a = RandomReal[{-2, 2}, {4, 4}];
{s, j} = JordanDecomposition[a];
Column[MatrixForm /@ {s, j}]
当然,许多矩阵不是对角化,但是,如果是,那么乔丹分解会给你想要的东西。向量被归一化,就像Eigen
函数对它们进行归一化一样,但我不明白为什么这是一个问题。
谢谢。我想要归一化的矢量,因为我正在模拟化学现象,归一化的矢量是我手工解决问题时得到的。 – CHM 2012-01-14 04:33:33
太棒了!我仍然在学习如何使用Mathematica,有时我无法通过在谷歌搜索上找到我的问题的答案。非常感谢你! – CHM 2012-01-14 01:09:29