
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:
Espero que alguien pueda darme algún tipo de solución al problema. Muchas gracias.
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


0