我想计算拉普拉斯矩阵的第二个特征值,以检查相应的图形是否连接,但是当我尝试使用SymPy的 eigenvals
时,很多时候会发生抛出错误
MatrixError: Could not compute eigenvalues for
Matrix([[1.00000000000000, 0.0, 0.0, 0.0, -1.00000000000000, 0.0, 0.0, 0.0, 0.0, 0.0],
[0.0, 1.00000000000000, 0.0, 0.0, 0.0, -1.00000000000000, 0.0, 0.0, 0.0, 0.0],
[0.0, 0.0, 1.00000000000000, 0.0, 0.0, 0.0, 0.0, 0.0, -1.00000000000000, 0.0],
[0.0, 0.0, 0.0, 1.00000000000000, 0.0, 0.0, 0.0, 0.0, -1.00000000000000, 0.0],
[-1.00000000000000, 0.0, 0.0, 0.0, 1.00000000000000, 0.0, 0.0, 0.0, 0.0, 0.0],
[0.0, -1.00000000000000, 0.0, 0.0, 0.0, 3.00000000000000, 0.0, 0.0, -1.00000000000000, -1.00000000000000],
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.00000000000000, 0.0, -1.00000000000000],
[0.0, 0.0, -1.00000000000000, -1.00000000000000, 0.0, -1.00000000000000, 0.0, 0.0, 3.00000000000000, 0.0],
[0.0, 0.0, 0.0, 0.0, 0.0, -1.00000000000000, 0.0, -1.00000000000000, 0.0, 2.00000000000000]])
环顾四周,我发现由于SymPy进行了符号计算,因此浮点可能是一个问题 . 所以我尝试过:
-
要降低浮点
Float(tmp[i][j], 3)
的精度,但它没有帮助 . -
我试图将浮动转换为Rational
list(map(nsimplify, tmp[i]))
,但它没有帮助 . -
我试图将浮动转换为int
list(map(int, tmp[i]))
,但它也没有帮助 .
即使我将每个元素转换为 int
,我真的可以't understand why it doesn' t .
1 回答
由于拉普拉斯算子是一个整数矩阵,让我们使用整数:
计算 eigenvalues :
这很奇怪,因为矩阵是10乘10,而不是5乘5 .
我试图计算Jordan正常形式,但无法做到,因为函数
jordan_form
产生了错误消息IndexError: list index out of range
.计算 characteristic polynomial :
注意,最低度的单项式是立方的 . 这使我们得出结论:特征值0的多重性为3,因此,该图是 not connected .
让我们试着找到特征多项式的 roots :
请注意,实际上只发现了5个根(
eigenvals
也只产生了5个特征值) . 5个缺失的根是quintics**5 - 11*s**4 + 42*s**3 - 66*s**2 + 39*s - 7
的根源 .自19世纪以来就已经知道,并非所有5级(或更高级)的多项式都具有可以使用算术运算和自由基表达的根 . 因此,我们可能会要求SymPy做 impossible . 更好地使用NumPy来计算10个特征值的近似值 .