Python - Rango de una matriz por el método de Gauss

 
Vista:
sin imagen de perfil

Rango de una matriz por el método de Gauss

Publicado por Adrián (1 intervención) el 01/02/2017 17:17:53
Buenas:

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


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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. Muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder