我在使用matlabeig函数计算对称矩阵的特征值和特征向量时遇到了一个问题。在
矩阵D是
10x10
所有对角线元素=0.45
所有非对角线元素=-0.05
当使用[vec,val]=eig(D)时,一些得到的特征向量包含复数(即0.3384+0.0052i)。我在网上搜索过,发现了两篇关于类似问题的相关帖子,但没有帮助我找到解决办法。在
所以我在pythonnumpy中尝试了相同的子例程(纽比.利纳格.埃(D) )它给了我所有的实特征值和特征向量。Python的结果是正确的,因为我能够用一篇发表的论文来验证我的最终结果。在
我的问题是什么导致MATLAB给出对称矩阵的复特征值和特征向量?有办法绕过它吗?我当然可以用Python重写我的算法,但我宁愿避免这种情况。在
注:如果我尝试4x4矩阵,所有对角线元素=0.375,所有非对角线元素=-0.125,那么MATLAB eig(D)给出了所有实特征值和特征向量。在
提前感谢您对这个问题的任何建议。在
跟进。用于生成D和特征值/向量的代码:P = eye(10) - 1/10;
delta = 1 - eye(10);
A = -0.5 * delta;
D = P*A*P;
[vec val] =eig(D)