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
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
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)