def metodoDoolittle(A, B, n):

    U = [[0.0] * n for j in range(n)]
    L = [[float(i == j) for j in range(n)] for i in range(n)]

    a = funciones.matrizAumentada(A, B, n)
    for j in range(n):
        a = funciones.pivot(a, j)
    A = []
    B = []
    for i in range(n):
        A.append(a[i][0:n])
        B.append(a[i][n])

    for k in range(n):
        for i in range(k + 1):
            U[i][k] = A[i][k] - sum(L[i][p] * U[p][k] for p in range(i))
        for i in range(k + 1, n):
            if U[k][k] == 0:
                return L, U, ["NULL", "NULL"]
            L[i][k] = (A[i][k] - sum(L[i][p] * U[p][k]
                                     for p in range(k))) / float(U[k][k])

    print "\n Resolucion por Algoritmo LU-Doolittle "
    print " -------------------------------------------------"
    print "\n Matriz U Triangular Superior"
    funciones.imprimeMatriz(U)
    print "\n Matriz L Triangular Inferior"
    funciones.imprimeMatriz(L)

    y = funciones.solucionL(L, B, n)  #Ly = b  "obtenemos y"
    x = funciones.solucionU(U, y, n)  #Ux = y  "obtenemos x"

    return [y, x]
Example #2
0
def metodoCholesky(A, B, n):
    #creamos matriz nula G
    G = [[0.0] * n] * n
    #creamos matriz nula G_T
    for i in range(n):
        suma = A[i][i]
        for k in range(i):
            suma = suma - A[k][i]**2
        if suma < 0:  #no es definida positiva
            return ["NULL", "NULL"]
        A[i][i] = math.sqrt(suma)
        for j in range(i + 1, n):
            suma = A[i][j]
            for k in range(i):
                suma = suma - A[k][i] * A[k][j]
            A[i][j] = suma / A[i][i]

    for j in range(n):
        for i in range(n):
            if (i > j):
                A[i][j] = 0.0
    G = A
    Gt = funciones.transMatriz(G, n)

    print "\n Resolucion por Algoritmo Cholesky "
    print " -------------------------------------------------"
    print "\n Matriz G Triangular Superior"
    funciones.imprimeMatriz(G)
    print "\n Matriz Gt Triangular Inferior"
    funciones.imprimeMatriz(Gt)

    y = funciones.solucionL(Gt, B, n)  #Ly = b  "obtenemos y"
    x = funciones.solucionU(G, y, n)  #Ux = y  "obtenemos x"

    return [y, x]
Example #3
0
def LDLt(A, B, n):
    Lt = [[0.0] * n] * n
    for i in range(n):
        suma = A[i][i]
        for k in range(i):
            suma = suma - A[k][i]**2
        if suma < 0:  #no es definida positiva
            return ["NULL", "NULL"]
        A[i][i] = math.sqrt(suma)
        for j in range(i + 1, n):
            suma = A[i][j]
            for k in range(i):
                suma = suma - A[k][i] * A[k][j]
            A[i][j] = suma / A[i][i]

    for j in range(n):
        for i in range(n):
            if (i > j):
                A[i][j] = 0.0
    Lt = A
    L = funciones.transMatriz(Lt, n)
    D = [[float(i == j) for j in range(n)] for i in range(n)]
    for i in range(n):
        D[i][i] = float(L[i][i])
        for j in range(i + 1):
            L[i][j] = L[i][j] / D[j][j]
    for i in range(n):
        for j in range(i, n):
            Lt[i][j] = Lt[i][j] / D[i][i]
    for i in range(n):
        D[i][i] = D[i][i]**2

    print "\n Resolucion por Algoritmo LDLt "
    print " -------------------------------------------------"
    print " Matriz L Triangular Inferior"
    funciones.imprimeMatriz(L)
    print " Matriz D Diagonal"
    funciones.imprimeMatriz(D)
    print " Matriz Lt Triangular Superior"
    funciones.imprimeMatriz(Lt)
    print "Para hallar el resultado de LDLt.x=b requerimos 3 ecuaciones:"
    z = funciones.solucionL(L, B, n)  #Lz = b   "obtenemos z"
    y = funciones.solucionL(D, z, n)  #Dy = z   "obtenemos y"
    x = funciones.solucionU(Lt, y, n)  #Ltx = y  "obtenemos x"
    return z, y, x
Example #4
0
def LDMt(A, B, n):
    L = []
    for i in range(n):
        L.append([0] * n)
    Mt = []
    for i in range(n):
        Mt.append([0] * n)
    #pivot
    a = funciones.matrizAumentada(A, B, n)
    for j in range(n):
        a = funciones.pivot(a, j)
    A = []
    B = []
    for i in range(n):
        A.append(a[i][0:n])
        B.append(a[i][n])
    for j in range(0, n):
        Mt[j][j] = 1.0
        for i in range(j, n):
            L[i][j] = A[i][j] - funciones.suma(Mt, L, i, j, j)  #ultima j por i
        for i in range(j + 1, n):
            if L[j][j] == 0:
                return ["NULL", "NULL", "NULL"]
            Mt[j][i] = (A[j][i] - funciones.suma(Mt, L, j, i, j)) / L[j][j]

    D = [[float(i == j) for j in range(n)] for i in range(n)]
    for i in range(n):
        D[i][i] = float(L[i][i])
        for j in range(i + 1):
            L[i][j] = L[i][j] / D[j][j]
    print "\n Resolucion por Algoritmo LDMt "
    print " -------------------------------------------------"
    print " Matriz L Triangular Inferior"
    funciones.imprimeMatriz(L)
    print " Matriz D Diagonal"
    funciones.imprimeMatriz(D)
    print " Matriz Mt Triangular Superior"
    funciones.imprimeMatriz(Mt)
    print "Para hallar el resultado de LDMt.x=b requerimos 3 ecuaciones:"
    z = funciones.solucionL(L, B, n)  #Lz = b   "obtenemos z"
    y = funciones.solucionL(D, z, n)  #Dy = z   "obtenemos y"
    x = funciones.solucionU(Mt, y, n)  #Mtx = y  "obtenemos x"
    return z, y, x
Example #5
0
def metodoLU1(A, B, n):
    L = []
    for i in range(n):
        L.append([0] * n)
    U = []
    for i in range(n):
        U.append([0] * n)
    #pivot
    a = funciones.matrizAumentada(A, B, n)
    for j in range(n):
        a = funciones.pivot(a, j)
    A = []
    B = []
    for i in range(n):
        A.append(a[i][0:n])
        B.append(a[i][n])
    #LU1
    for j in range(0, n):
        U[j][j] = 1.0
        for i in range(j, n):
            L[i][j] = A[i][j] - funciones.suma(U, L, i, j, j)  #ultima j por i
        for i in range(j + 1, n):
            if L[j][j] == 0:
                return ["NULL", "NULL"]
            U[j][i] = (A[j][i] - funciones.suma(U, L, j, i, j)) / L[j][j]

    print "\n Resolucion por Algoritmo LU1-Crout "
    print " -------------------------------------------------"
    print "\n Matriz U Triangular Superior"
    funciones.imprimeMatriz(U)
    print "\n Matriz L Triangular Inferior"
    funciones.imprimeMatriz(L)

    y = funciones.solucionL(L, B, n)  #Ly = b  "obtenemos y"
    x = funciones.solucionU(U, y, n)  #Ux = y  "obtenemos x"

    return [y, x]