我想计算拉普拉斯矩阵的第二个特征值来检查对应的图是否连通,但是当我尝试使用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)
的精度,但没有帮助。在list(map(nsimplify, tmp[i]))
,但是没有用。在list(map(int, tmp[i]))
,但这都没用。在我真的不明白为什么它不起作用,即使我把每个元素都转换成int
。在
由于拉普拉斯是一个整数矩阵,所以我们使用整数:
计算特征值:
^{pr2}$这很奇怪,因为矩阵是10乘10,而不是5乘5。在
我试图计算Jordan范式,但无法计算,因为函数
jordan_form
产生了错误消息IndexError: list index out of range
。在计算特征多项式:
注意最低次的单项式是立方的。这使得我们可以得出特征值0的重数为3,因此,图不连通。在
让我们试着找出特征多项式的根:
注意,实际上只找到了5个根(}。在
eigenvals
也只产生了5个特征值)。5个缺失的根是五次方的根{从19世纪开始,人们就知道并不是所有5次(或更高)的多项式都有可以用算术运算和根来表示的根。因此,我们可能会要求SymPy做不可能的事。最好使用NumPy来计算10个特征值的近似值。在
相关问题 更多 >
编程相关推荐