2010-11-09 10 views
2

Ok, donc je fais la méthode power en python.Comment éviter une division apparemment inévitable par zéro

Fondamentalement, l'équation tourne autour de la multiplication d'une matrice par un vecteur A (y) comme suit:

for i in range(0, 100): 

    y = mult(matrix,y) 

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

Ensuite, on multiplie le vecteur y par 1/(le premier élément en y). Maintenant, si la matrice est clairsemée ou a un zéro juste au bon endroit, vous obtiendrez un zéro pour le premier élément de a. Aucune de mes compétences googling n'a donné lieu à une modification de la méthode de puissance pour éviter cela.

Pour ceux qui sont intéressés, j'essaie de résoudre les valeurs propres d'une matrice; et mon code fonctionne tant qu'il n'y a pas trop de zéros. Au lieu de diviser par le premier élément du vecteur, vous pouvez diviser par l'une de ses normes au lieu de diviser par

+1

Si vous pouvez utiliser une bibliothèque tierce, essayez des solutions existantes telles que [numpy.linalg.eig] (http://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.eig.html# numpy.linalg.eig) à la place. – kennytm

+1

Sur une note: Connaissez-vous des paquets comme Numpy et Scipy? Dans votre cas, numpy.linalg.eig pourrait vous intéresser. –

Répondre

3

Par exemple, si vous utilisez la deuxième norme, la longueur du vecteur sera toujours 1.

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

norme du vecteur est que zéro lorsque vecteur est 0 (a tous les éléments 0), de sorte que la division par 0 ne devrait pas se produire.