def LU(a): #LU decomposition n = len(a) l = mh.MatrixMake(n, n) #MatrixMake(a,b) creates empty Matrix axb u = mh.MatrixMake(n, n) for i in range(n): #Doolittle's way of computing l[i][i] = 1 for j in range(i, n): u[i][j] = a[i][j] - Sigma(lambda k: l[i][k] * u[k][j], 0, i - 1) for j in range(i + 1, n): l[j][i] = (a[j][i] - Sigma(lambda k: l[j][k] * u[k][i], 0, i - 1)) / u[i][i] return l, u
def __mul__(self, w): if len(w) - 1: n = len(w) matrix = handler.MatrixMake(n - 1, n) vector = handler.MatrixMake(n, 1) for i in range(1, n): matrix[i - 1][i] = i vector[i][0] = w[i] # handler.MatrixPrint(matrix) self.size = (n - 1, n) handler.MatrixPrint(vector, "pętla") handler.MatrixPrint(w.getVector(), "metoda") return handler.MatrixMulti(matrix, vector) else: return [[0]]
def LLt(a): #Cholesky n = len(a) l = mh.MatrixMake(n, n) for i in range(n): l[i][i] = mh.math.sqrt(a[i][i] - Sigma(lambda k: l[i][k]**2, 0, i - 1)) for j in range(i, n): l[j][i] = (a[j][i] - Sigma(lambda k: l[j][k] * l[i][k], 0, i - 1)) / l[i][i] return l
def fill(c, hp ): #fill fills hp matrix with identity matrix and two zeroed matrices h = mh.MatrixMake(c, c) for i in range(c - len(hp)): h[i][i] = 1 for i in range(len(hp)): for j in range(len(hp)): h[i + c - len(hp)][j + c - len(hp)] = hp[i][j] return h
def __init__(self, vals=0, size=('auto', 'auto')): if hasattr(vals, '__iter__'): if hasattr(vals[0], '__iter__'): self.__size = (len(vals), len(vals[0])) else: self.size = (1, len(vals)) self.__vals = vals.copy() else: self.__size = size if size != ('auto', 'auto'): self.__vals = handler.MatrixMake(size[0], size[1])
def SVD(a): aat = mh.MatrixMulti(a, mh.MatrixTrans(a)) ata = mh.MatrixMulti(mh.MatrixTrans(a), a) mh.MatrixPrint(aat, "aat") mh.MatrixPrint(ata, "ata") eigenvalues_aat = list(map(lambda x: round(x, ndigits=6), Francis(aat))) singularvalues_aat = list(map(sqrt, eigenvalues_aat)) mh.MatrixPrint([eigenvalues_aat], "eigen aat") mh.MatrixPrint([singularvalues_aat], "singular aat") eigenvalues_ata = list(map(lambda x: round(x, ndigits=6), Francis(ata))) singularvalues_ata = list(map(sqrt, eigenvalues_ata)) mh.MatrixPrint([eigenvalues_ata], "eigen ata") mh.MatrixPrint([singularvalues_ata], "singular ata") S = mh.MatrixMake(len(a), len(a[0])) for i in range(min(len(a), len(a[0]))): S[i][i] = singularvalues_aat[i] mh.MatrixPrint(S, msg="Σ")