Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # MatveyPanchenko DSAI-03
- from copy import deepcopy
- def rref(a, eps=1e-12):
- m, piv, r, c = deepcopy(a), [], 0, 0
- rows, cols = len(m), len(m[0])
- while r < rows and c < cols:
- k = max(range(r, rows), key=lambda i: abs(m[i][c]))
- if abs(m[k][c]) < eps:
- c += 1
- continue
- m[r], m[k] = m[k], m[r]
- piv.append(c)
- p = m[r][c]
- m[r] = [x / p for x in m[r]]
- for i in range(rows):
- if i != r:
- f = m[i][c]
- m[i] = [u - f * v for u, v in zip(m[i], m[r])]
- r += 1; c += 1
- return m, piv
- t = lambda m: [list(r) for r in zip(*m)]
- def col_space(a, piv): return [[row[j] for row in a] for j in piv]
- def row_space(r): return [row for row in r if any(abs(x) > 1e-12 for x in row)]
- def null_space(r, piv):
- n = len(r[0])
- free = [j for j in range(n) if j not in piv]
- basis = []
- for f in free:
- v = [0]*n; v[f] = 1
- for i, p in enumerate(piv):
- v[p] = -sum(r[i][k]*v[k] for k in range(n))
- basis.append(v)
- return basis
- def subspaces(a):
- r1, p1 = rref(a)
- r2, p2 = rref(t(a))
- return (col_space(a, p1), row_space(r1),
- null_space(r1, p1), null_space(r2, p2))
- read_mat = lambda: [list(map(float, input().split())) for _ in range(int(input("rows: ")))]
- round_mat = lambda m, p=2: [[round(x, p) for x in row] for row in m]
- if __name__ == "__main__":
- A = read_mat()
- cs, rs, ns, lns = (round_mat(s) for s in subspaces(A))
- print("Column Space:", cs)
- print("Row Space:", rs)
- print("Null Space:", ns)
- print("Left Null Space:", lns)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement