由于拉普拉斯算子是一个整数矩阵,让我们使用整数:
L = Matrix([[ 1, 0, 0, 0, -1, 0, 0, 0, 0, 0],
[ 0, 1, 0, 0, 0, -1, 0, 0, 0, 0],
[ 0, 0, 1, 0, 0, 0, 0, 0, -1, 0],
[ 0, 0, 0, 1, 0, 0, 0, 0, -1, 0],
[-1, 0, 0, 0, 1, 0, 0, 0, 0, 0],
[ 0, -1, 0, 0, 0, 3, 0, 0, -1, -1],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 1, 0, -1],
[ 0, 0, -1, -1, 0, -1, 0, 0, 3, 0],
[ 0, 0, 0, 0, 0, -1, 0, -1, 0, 2]])
计算 eigenvalues :
>>> L.eigenvals()
{0: 3, 1: 1, 2: 1}
这很奇怪,因为矩阵是10乘10,而不是5乘5 .
我试图计算Jordan正常形式,但无法做到,因为函数 jordan_form 产生了错误消息 IndexError: list index out of range .
计算 characteristic polynomial :
>>> s = Symbol('s')
>>> p = (s * eye(10) - L).det()
>>> p
s**10 - 14*s**9 + 77*s**8 - 214*s**7 + 321*s**6 - 256*s**5 + 99*s**4 - 14*s**3
注意,最低度的单项式是立方的 . 这使我们得出结论:特征值0的多重性为3,因此,该图是 not connected .
让我们试着找到特征多项式的 roots :
>>> solve(p,s)
[0, 0, 0, 1, 2, CRootOf(s**5 - 11*s**4 + 42*s**3 - 66*s**2 + 39*s - 7, 0), CRootOf(s**5 - 11*s**4 + 42*s**3 - 66*s**2 + 39*s - 7, 1), CRootOf(s**5 - 11*s**4 + 42*s**3 - 66*s**2 + 39*s - 7, 2), CRootOf(s**5 - 11*s**4 + 42*s**3 - 66*s**2 + 39*s - 7, 3), CRootOf(s**5 - 11*s**4 + 42*s**3 - 66*s**2 + 39*s - 7, 4)]
请注意,实际上只发现了5个根( eigenvals 也只产生了5个特征值) . 5个缺失的根是quintic s**5 - 11*s**4 + 42*s**3 - 66*s**2 + 39*s - 7 的根源 .
自19世纪以来就已经知道,并非所有5级(或更高级)的多项式都具有可以使用算术运算和自由基表达的根 . 因此,我们可能会要求SymPy做 impossible . 更好地使用NumPy来计算10个特征值的近似值 .