如何避免看似无法避免的零除错误

2 投票
1 回答
763 浏览
提问于 2025-04-16 06:46

好的,我在用Python实现幂法。

简单来说,这个方法是通过把一个矩阵A和一个向量y相乘来进行的,像这样:

for i in range(0, 100):

    y = mult(matrix,y)

    y = scalarMult(y, 1.0/y[0][0])

然后你要把向量y的每个元素都乘以1/(y的第一个元素)。不过,如果这个矩阵是稀疏的,或者在某个特定的位置有个零,那么你得到的a的第一个元素就会是零。我查了很多资料,但没有找到能避免这个问题的幂法修改方案。

对了,我想求的是矩阵的特征值;我的代码在零的数量不太多的时候是可以正常工作的。

1 个回答

3

与其用向量的第一个元素去做除法,不如用它的某个“范数”来做除法。比如,如果你用第二范数,向量的长度就会始终保持为1。

norm = sum(e**2 for e in y)**0.5

向量的范数只有在向量为0(也就是所有元素都是0)时才会是零,所以不会出现除以0的情况。

撰写回答