如何避免看似无法避免的零除错误
好的,我在用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的情况。