[Hilo Oficial] Esto también es otro arte...el ARTE de programar
Cita
A ver si podéis echarme un cable. Me puse a hacer un programa con python para invertir matrices mediante una descomposición LU. El método incluye una permutación de la matriz, para lo que hay que hacer una matriz de permutación vía pivotación parcial a partir de una matriz identidad. Osease, tenemos tres matrices:
  • La matriz a invertir --> M
  • La matriz identidad --> I
  • La matriz de permutación --> P
Para crear P se recorren las columnas de M buscando los valores máximos en valor absoluto desde la diagonal principal hacia abajo y se permutan las filas de I como si se estuviese poniendo el valor mayor en la diagonal principal. Como ejemplo:

[Imagen: mtx_p7jb01.png]


Para hacer esto yo creé una función que me busca ese valor mayor y me devuelve su posición. Pero luego, mirando ejemplos de esto mismo en internet, me topé con que lo están haciendo metiendo un keyword con una función lambda en la función max(), y no entiendo de qué va el tema. He mirado el tema de funciones lambda y keywords y me pierdo. ¿Alguno podéis arrojar algo de luz al respecto de estas funciones lambda y los keyword?



Mi código para sacar la matriz P:

Código:
def pivot(M):

def find_idx(j):
col = [ abs(M[i][j]) for i in range(j,r) ]
return j + col.index(max(col))

r = len(M)
P = [ [float(i == j) for i in range(r)] for j in range(r) ]
for j in range(r):
swap = find_idx(j)
if j != swap:
P[j], P[swap] = P[swap], P[j]

return P



Y el código que vi y me dejó roto:

Código:
def pivot(M):

r = len(M)
P = [ [float(i == j) for i in range(r)] for j in range(r) ]
for j in range(r):
swap = max( range(j,r), key=lambda i: abs(M[i][j]) )
if j != swap:
P[j], P[swap] = P[swap], P[j]

return P


Y para usarlo por ejemplo tal que así:
Código:
F = [2 ,3 ,4 ,4], [3 ,-1 ,7 ,2], [6 ,4 ,-4 ,0], [1 ,6 ,-2 ,1]
P = pivot(F)
for j in range( len(P) ):
    print( [round(P[j][i],3) for i in range(len(P))] )



Edito: Me cago en la leche, Merche, el foro se carga la identación. Apaña esto, Jase > : ( .
(Ultima edición: 15-10-2015 10:10 por AcAnchoa.)
[Imagen: 32742_s.gif]


Mensajes en este tema
Re:Esto también es otro arte...el ARTE de programar - por Juntacadaveres - 25-10-2012 15:34
Re:Esto también es otro arte...el ARTE de programar - por Corona Radiata - 27-10-2012 03:00
RE: Esto también es otro arte...el ARTE de programar - por AcAnchoa - 14-10-2015 18:32
Re:Esto también es otro arte...el ARTE de programar - por Juntacadaveres - 24-10-2012 16:47

Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)