Python - Diagonalizar una matriz.

 
Vista:
sin imagen de perfil
Val: 14
Ha disminuido su posición en 9 puestos en Python (en relación al último mes)
Gráfica de Python

Diagonalizar una matriz.

Publicado por Gerardo (7 intervenciones) el 20/06/2019 06:41:01
buenas. tengo un problema con el siguiente código. que intenta diagonalizar una matriz despues de haber hecho su factorización LU. veamos el código y a lo último muestro el error que sale, ¿qué cambio puedo hacerle?. Creo que el error reside en la línea: D = np.zeros ((m,n)) ¿cómo la cambio?

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
import numpy as np
 
def L(A,m,n):
    L = np.zeros ((m,n))
    U = np.zeros ((m,n))
    for k in range (0,n-1):
        for i in range (k+1,m) :
 
            L[i,k] = A[i][k]/ A[k][k]
 
            U[i][k] = 0
 
            for j in range (k+1, m):
 
                A[i][j] = A[i][j] - L[i,k]*A[k][j]
                U[i,j] = A[i][j]
    for i in range (0,n):
        L[i,i] = 1
        U[0,i] = A[0][i]
 
    return L , U
 
 
 
 
def D(A,m,n):
    D = np.zeros ((m,n))
    for i in range (0,m):
        for j in range (0,n):
            if (j == i):
                D[i,j] = A[i][j]
 
    return D
 
B = [[16,4,64],[4,3,8],[64,8,300]]
 
L = L(B,3,3)
 
DL = D(L,3,3)
 
print(DL)


error que obtengo.
Traceback (most recent call last):
File "C:/Users/MOVITEL S & B/Desktop/Análisis núm/Tareas/Ensayo diagonalización..py", line 39, in <module>
DL = D(L,3,3)
File "C:/Users/MOVITEL S & B/Desktop/Análisis núm/Tareas/Ensayo diagonalización..py", line 31, in D
D[i,j] = A[i][j]
ValueError: setting an array element with a sequence.
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
Imágen de perfil de Jaime
Val: 526
Bronce
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Diagonalizar una matriz.

Publicado por Jaime (136 intervenciones) el 20/06/2019 16:17:02
Hola compañero.
Te recomiendo aprender a depurar y no estar en prueba y error, sino mirar los valores que toman cada variable y mirar el por qué de los errores.
Este error se debe porque estas accediendo a un valor de un array contenido dentro de otro array para guardarlo a un array [x][y].
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
import numpy as np
 
 
def L(A, m, n):
    L = np.zeros((m, n))
    U = np.zeros((m, n))
    for k in range(n-1):    #Rango que solo tiene un parámetro empieza en 0
        for i in range(k+1, m):
 
            L[i, k] = A[i][k] / A[k][k]
 
            U[i][k] = 0
 
            for j in range(k+1, m):
 
                A[i][j] = A[i][j] - L[i, k]*A[k][j]
                U[i, j] = A[i][j]
    for i in range(0, n):
        L[i, i] = 1
        U[0, i] = A[0][i]
 
    return L, U
 
 
def D(A, m, n):
    d = np.zeros((m, n))
    for i in range(m):
        for j in range(n):
            #Lo que hice fue implementar un recorrido para el array A.
            #Acá hay un error, que no puedo ayudarte porque no entiendo tu logica
            #El error es que la variable d[i][j] se sobreescribe con todos los elementos
            #del array A[0][1]
            for b in A[0][1]:   #El array A es un array de array de 2*2
                if (j == i):
                    d[i][j] = b
 
    return d
 
 
B = [[16, 4, 64], [4, 3, 8], [64, 8, 300]]
 
L = L(B, 3, 3)
 
DL = D(L, 3, 3)
 
print(DL)

Me quedó inconcluso porque no entiendo tu lógica y no entiendo que es lo que quieres.
Intenta usar un IDE que te ayude a depurar, te recomiendo Visual Studio Code
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jaime
Val: 526
Bronce
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Diagonalizar una matriz.

Publicado por Jaime (136 intervenciones) el 20/06/2019 17:01:07
Mi código de como haria para obtener las diagonales de un array perfecto (Donde columnas= filas)
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
import numpy as np
 
list = np.array([1, 2, 3])
list2 = np.array([4, 5, 6])
list3 = np.array([7, 8, 9])
listT = (list, list2, list3)
array = np.array(listT)
 
 
# Función que recibe un array y el tamaño del mismo.
# Debe ser un array perfecto.
# @return Array con la diagonal arriba-abajo
 
def diagArAb(matriz, tama):
    a = np.zeros((tama, tama))
    for f in range(tama):
        for c in range(tama):
            if (f == c):
                a[f][c] = matriz[f][c]
    return a
 
 
# Función que recibe un array y el tamaño del mismo.
# Debe ser un array perfecto.
# @return Array con la diagonal abajo-arriba
 
def diagAbAr(matriz, tama):
    a = np.zeros((tama, tama))
    for f in range(tama):
        for c in range(tama-1, -1, -1):
            if ((f+c) == (tama-1)):
                a[f][c] = matriz[f][c]
    return a
 
print(array)
t = 3
print(diagArAb(array, t))
print(diagAbAr(array, t))
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar