def gaussElemination(n, matrix):
    sol = [0] * n
    print("matrix : ")
    printAB(matrix)
    for x in range(n):
        print("==========")
        print("fixing a", x + 1)
        for y in range(x + 1, n):
            axy = matrix[y][x]
            axx = matrix[x][x]
            print("transformation :", "R", y, "->", axx, "*R" + str(y), "-",
                  axy, "*R" + str(x))
            for z in range(n + 1):
                matrix[y][z] = Fraction((axx * matrix[y][z]) -
                                        (axy *
                                         matrix[x][z])).limit_denominator()
        printAB(matrix)
    for y in range(n - 1, -1, -1):
        extra = 0
        for x in range(y + 1, n):
            extra = extra + (matrix[y][x] * sol[x])
        sol[y] = (matrix[y][n] - extra) / matrix[y][y]
    print("solution :")
    printArr(sol)
    return sol
예제 #2
0
def dominantEigen(A, B=[1, 0, 0]):
    n = 4  # number of iterations
    E = 0
    for i in range(n):
        print("iteration :", i + 1)
        B = multiply(A, B)
        E, B = extractMax(B, checkSign(E))
        print("eigen value:", E)
        print("eigen vector:")
        printArr(B)
def gaussJordan(n, matrix):
    sol = []
    print("matrix : ")
    printAB(matrix)
    for x in range(n):
        print("==========")
        print("fixing a", x + 1)
        for y in range(n):
            if x == y or matrix[y][x] == 0:
                continue
            axy = matrix[y][x]
            axx = matrix[x][x]
            print("transformation :", "R", y, "->", axx, "*R" + str(y), "-",
                  axy, "*R" + str(x))
            for z in range(n + 1):
                matrix[y][z] = Fraction((axx * matrix[y][z]) -
                                        (axy *
                                         matrix[x][z])).limit_denominator()
        printAB(matrix)
    for y in range(n):
        sol.append(matrix[y][n] / matrix[y][y])
    print("solution :")
    printArr(sol)
    return sol
예제 #4
0
                if x == y:
                    U[y][x] = 1
                    print("U", y, x, "=",
                          Fraction(U[y][x]).limit_denominator())
            else:  # set U
                sub = 0
                for i in range(y):
                    sub = sub + (L[y][i] * U[i][x])
                U[y][x] = (A[y][x] - sub) / L[y][y]
                print("U", y, x, "=", Fraction(U[y][x]).limit_denominator())
    return L, U


if __name__ == "__main__":
    A = [[5, 1, 3], [4, -3, 1], [3, -2, -1]]
    B = [10, 18, 11]
    n = len(A)
    L, U = crout(n, A)
    print()
    print("L :")
    printA(L)
    print("U :")
    printA(U)

    Y = solveLower(n, L, B)
    print("Y :", end=" ")
    printArr(Y)
    X = solveUpper(n, U, Y)
    print("X :", end=" ")
    printArr(X)
sys.path.append(parentdir)
from print_matrix import printArr

def gaussJacobi(AB):
    n = 6    # number of iterations
    o = len(AB)
    sol = [0]* o
    for i in range(n):
        tempsol = sol.copy()
        print("iteration :",i+1)
        for j in range(o):
            sub =  0
            for k in range(o):
                if k == j:
                    continue
                sub = sub + (AB[j][k] * tempsol[k])
            sol[j] = (AB[j][o] - sub)/AB[j][j]
            print("sol",j,"=",sol[j])
    return sol

if __name__ == "__main__":
    AB = [           # enter in diagnal dominant manner
        [20,2,1,104],
        [5,25,3,56],
        [6,2,30,92]
    ]

    X = gaussJacobi(AB)
    print("solution :")
    printArr(X)