Python - Tengo problemas con este codigo para calcular la factorizacion LDL^t, por favor ayuda.

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

Tengo problemas con este codigo para calcular la factorizacion LDL^t, por favor ayuda.

Publicado por Carlos (2 intervenciones) el 20/04/2021 04:52:03
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
n=4
A=creamatriz(n,n)
B=creamatriz(n,n)
D=creamatriz(n,n)
sumad=0
sumab=0
#B=np.identity(n)
#B=np.diag(n,n)
#b=creamatriz(n,1)
#x=creamatriz(n,1)
A=[[4,3,2,1],[3,3,2,1],[2,2,2,1],[1,1,1,1]]
for j in range(n):
    if j==0:
        for k1 in range (n):
            B[k1][k1]=1
            print("B",k1,B[k1][k1])
    print(np.array(B))
    for k in range(j):
        sumad+=(B[j][k]**2)*D[k][k]
        print("j",j)
        print("B",j+1,k+1,B[j][k])
        print("D",k+1,D[k][k])
    D[j][j]=A[j][j]-sumad
    print("Di",j+1,"-----",D[j][j])
    print(np.array(D))
    for i in range(j+1,n):
        B[j][i]=0
        for k in range(i):
            sumab+=B[i][k]*D[k][k]*B[j][k]
            print("i",i)
            print("Bik",i+1,k+1,B[i][k])
            print("Bjk",j+1,k+1,B[j][k])
        B[i][j]=1/D[j][j]*(A[i][j]-sumab)
        print("Bjk",i+1,j+1)
 
print(np.array(B))
print(np.array(D))

los elementos de la matriz B (que es L en el sistema LDL), fallan a partir del B42 y B43 y los elementos de D33 y D34 fallan.
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
sin imagen de perfil
Val: 2.659
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Tengo problemas con este codigo para calcular la factorizacion LDL^t, por favor ayuda.

Publicado por tincopasan (786 intervenciones) el 20/04/2021 09:06:30
hay varias cosas con respecto a tu pregunta:
1) hay que adivinar que función es creamatriz
2) sistema ldl das por sentado que ser programador de python te obliga a conocer de todo, lo único que conozco de ldl es de colesterol
3)¿qué se supone que es la falla?
4) ¿qué esperas que devuelva?
como consejo para que sea más fácil para la mayoría ayudarte, pone un ejemplo mínimo verificable, con el problema que da y cual sería la respuesta esperada.
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
sin imagen de perfil
Val: 3
Ha disminuido su posición en 4 puestos en Python (en relación al último mes)
Gráfica de Python

Tengo problemas con este codigo para calcular la factorizacion LDL^t, por favor ayuda.

Publicado por Carlos (2 intervenciones) el 20/04/2021 15:30:30
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
from matplotlib import pyplot as plt
import math
import numpy as np
import random
from scipy import sparse
from scipy.sparse import csr_matrix
import pandas as pd
##se crea una matriz de tamaño nxm
def creamatriz(n,m):
    matriz = []
    for i in range (n):
        a = [0]*m
        matriz.append(a)
    return matriz
n=4
A=creamatriz(n,n)
B=creamatriz(n,n)
D=creamatriz(n,n)
sumad=0
sumab=0
#B=np.identity(n)
#B=np.diag(n,n)
#b=creamatriz(n,1)
#x=creamatriz(n,1)
A=[[4,3,2,1],[3,3,2,1],[2,2,2,1],[1,1,1,1]]
for j in range(n):
    if j==0:
        for k1 in range (n):
            B[k1][k1]=1
            print("B",k1,B[k1][k1])
    print(np.array(B))
    for k in range(j):
        sumad+=(B[j][k]**2)*D[k][k]
        print("j",j)
        print("B",j+1,k+1,B[j][k])
        print("D",k+1,D[k][k])
    D[j][j]=A[j][j]-sumad
    print("Di",j+1,"-----",D[j][j])
    print(np.array(D))
    for i in range(j+1,n):
        B[j][i]=0
        for k in range(i):
            sumab+=B[i][k]*D[k][k]*B[j][k]
            print("i",i)
            print("Bik",i+1,k+1,B[i][k])
            print("Bjk",j+1,k+1,B[j][k])
        B[i][j]=1/D[j][j]*(A[i][j]-sumab)
        print("Bjk",i+1,j+1)
 
print(np.array(B))
print(np.array(D))
 
# Lo que estoy programando es el método de factorización LDL^t que se basa en las formulas para calculo de Lij y los valores de la diagonal D1-D2-D3D-4
# El codigo que intento implementar corresponde a las formulas que estan como imagen, y los resultados que debian ser la solucion, no me estan dando.


Formula-LDL
matriz-respuesta-LDL-correcta



matriz-respuesta-LDL-que-arroja-el-programa
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
sin imagen de perfil
Val: 2.659
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Tengo problemas con este codigo para calcular la factorizacion LDL^t, por favor ayuda.

Publicado por tincopasan (786 intervenciones) el 22/04/2021 21:58:31
la verdad es que me gustaría ayudarte , es más, fui reduciendo tu código eliminado lo innecesario pero no recuerdo como interpretar las funciones de las imágenes, lo cual me lleva que no entiendo que se supone que es sumab y sumad , si podés recordarme eso ,veo como seguir.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#-*- coding: utf -8 -*-
 
import math
import numpy as np
 
##se crea una matriz de tamaño nxm
def creamatriz(n,m):
    matriz = [[0]*n for x in range(m)]
    return matriz
 
 
 
n=4
# A=creamatriz(n,n) para que si después la reemplazás
B=creamatriz(n,n)
 
A=[[4,3,2,1],[3,3,2,1],[2,2,2,1],[1,1,1,1]]
 
#diagonal positiva en B
for j in range(n):
    for k1 in range (n):
        B[k1][k1]=1
 
print(np.array(B))
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