[ Foro de Python ]

Rango de una matriz por Gauss

01-Feb-2017 17:27
Invitado (batera2121)
0 Respuestas

Buenas:

Estoy haciendo un programa que calcule el Rango de una matriz por el método de Gauss. Aquí el código:



def rango_matriz(matriz):
return len(filas_no_nulas(escalonar(matriz)))


def filas_no_nulas(m):
return [f for f in m if f != [0] * len(f)]


from copy import deepcopy


def escalonar(A):
A = deepcopy(A)

for i in range(len(A)):
elegir_fila(A, i)

normalizar_fila(A[i], i)

reducir_desde_fila(A, i)

return A



def elegir_fila(A, j):
for i in range(j, len(A)):
if A[i][j] != 0:
A[i], A[j] = A[j], A[i]

#AQUÍ ES DONDE FALLA LA FUNCIÓN SI, POR EJEMPLO, HAY MÁS FILAS QUE COLUMNAS. EL ERROR ES EL SIGUIENTE:
"line 28, in elegir_fila
if A[i][j] != 0:
IndexError: list index out of range"


def normalizar_fila(fila, j):
aux = fila[j]
for i in range(j, len(fila)):
try:
fila[i] /= aux
except ZeroDivisionError:
pass


def reducir_desde_fila(A, j):
for i in range(j + 1, len(A)):
reducir_fila(A[i], A[j], j)


def reducir_fila(fila, pivote, j):
primero = fila[j]
for i in range(j, len(fila)):
fila[i] -= (pivote[i] * primero)

Espero que alguien pueda darme algún tipo de solución al problema (La página se come la identación). Muchas gracias.




(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)