除了有小的浮点误差外,本征值都是复数共轭对:
3.49869741491636e-64 - 1.35013912450988*I
-0.907124939317785 + 3.82549612092643e-64*I
0.907124939317785 + 9.90959643144198e-65*I
1.35013912450988*I
你应该认为e-64
的微小数字基本上就是零,这意味着这里的本征值实际上是:
-1.35013912450988*I
-0.907124939317785
0.907124939317785
1.35013912450988*I
所以这里的第二个和第三个值是实数,第一个和第四个是虚数复数共轭对.
计算是近似的原因是因为您使用的是浮点数矩阵.如果你使用精确有理数,那么你可以得到特征值的精确表示:
In [6]: M
Out[6]:
⎡ 0 1.0 0 1.0 ⎤
⎢ ⎥
⎢1.0 0 -0.5 0 ⎥
⎢ ⎥
⎢ 0 1.0 0 -1.0⎥
⎢ ⎥
⎣-0.5 0 1.0 0 ⎦
In [7]: M.applyfunc(nsimplify)
Out[7]:
⎡ 0 1 0 1 ⎤
⎢ ⎥
⎢ 1 0 -1/2 0 ⎥
⎢ ⎥
⎢ 0 1 0 -1⎥
⎢ ⎥
⎣-1/2 0 1 0 ⎦
In [8]: M.applyfunc(nsimplify).eigenvals()
Out[8]:
⎧ ________ ________ __________ __________ ⎫
⎪ ╱ 1 √7 ╱ 1 √7 ╱ 1 √7 ╱ 1 √7 ⎪
⎨-ⅈ⋅ ╱ ─ + ── : 1, ⅈ⋅ ╱ ─ + ── : 1, - ╱ - ─ + ── : 1, ╱ - ─ + ── : 1⎬
⎪ ╲╱ 2 2 ╲╱ 2 2 ╲╱ 2 2 ╲╱ 2 2 ⎪
⎩ ⎭
如果您准确地计算特征值,则可以在没有微小舍入误差的情况下对它们进行数值计算:
In [15]: [r.n() for r in M.applyfunc(nsimplify).eigenvals()]
Out[15]: [-1.35013912450988⋅ⅈ, 1.35013912450988⋅ⅈ, -0.907124939317785, 0.907124939317785]