我在用 Matlab 格式求解以下矩阵的特征值时遇到了一个奇怪的问题:
[ 0 1 0 1 0 0 0 0 0 0 0 0 1 1;
1 0 0 0 0 0 0 0 0 0 0 0 0 0;
0 1 0 1 0 0 0 0 0 0 0 0 0 0;
0 0 1 0 0 0 0 0 0 0 0 0 0 0;
0 0 0 0 0 1 0 0 0 0 0 0 0 0;
0 0 0 0 1 0 0 0 0 0 0 0 0 0;
0 0 0 0 0 0 0 1 0 0 0 0 0 0;
0 0 0 0 0 0 1 0 0 0 0 0 0 0;
0 0 0 0 0 0 0 0 0 1 0 0 0 0;
0 0 0 0 0 0 0 0 1 0 0 1 0 0;
0 0 0 0 0 0 0 0 1 0 0 1 0 0;
0 0 0 0 0 0 0 0 0 0 1 0 0 0;
0 1 0 0 0 0 0 0 0 0 0 0 1 1;
0 1 0 0 0 0 0 0 0 0 0 0 1 1 ]
当存储为双精度矩阵时,在该矩阵上调用 dgeev 可以正确找到特征值。
但是,当存储为复数双精度矩阵(所有虚部都设置为)时,对其调用 zgeev 会返回错误值,表明 QR 算法无法收敛。
奇怪的是,将这个矩阵乘以(因此实部为)会导致再次找到正确的特征值。
是什么导致 QR 算法在第一个复杂情况下不收敛,有没有办法绕过它?