Advertisement
UsSe3wa

Untitled

Apr 16th, 2025
253
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.66 KB | None | 0 0
  1. # MatveyPanchenko DSAI-03
  2. from copy import deepcopy
  3.  
  4. def rref(a, eps=1e-12):
  5.     m, piv, r, c = deepcopy(a), [], 0, 0
  6.     rows, cols = len(m), len(m[0])
  7.     while r < rows and c < cols:
  8.         k = max(range(r, rows), key=lambda i: abs(m[i][c]))
  9.         if abs(m[k][c]) < eps:
  10.             c += 1
  11.             continue
  12.         m[r], m[k] = m[k], m[r]
  13.         piv.append(c)
  14.         p = m[r][c]
  15.         m[r] = [x / p for x in m[r]]
  16.         for i in range(rows):
  17.             if i != r:
  18.                 f = m[i][c]
  19.                 m[i] = [u - f * v for u, v in zip(m[i], m[r])]
  20.         r += 1; c += 1
  21.     return m, piv
  22.  
  23. t = lambda m: [list(r) for r in zip(*m)]
  24.  
  25. def col_space(a, piv): return [[row[j] for row in a] for j in piv]
  26. def row_space(r): return [row for row in r if any(abs(x) > 1e-12 for x in row)]
  27.  
  28. def null_space(r, piv):
  29.     n = len(r[0])
  30.     free = [j for j in range(n) if j not in piv]
  31.     basis = []
  32.     for f in free:
  33.         v = [0]*n; v[f] = 1
  34.         for i, p in enumerate(piv):
  35.             v[p] = -sum(r[i][k]*v[k] for k in range(n))
  36.         basis.append(v)
  37.     return basis
  38.  
  39. def subspaces(a):
  40.     r1, p1 = rref(a)
  41.     r2, p2 = rref(t(a))
  42.     return (col_space(a, p1), row_space(r1),
  43.             null_space(r1, p1), null_space(r2, p2))
  44.  
  45. read_mat = lambda: [list(map(float, input().split())) for _ in range(int(input("rows: ")))]
  46. round_mat = lambda m, p=2: [[round(x, p) for x in row] for row in m]
  47.  
  48. if __name__ == "__main__":
  49.     A = read_mat()
  50.     cs, rs, ns, lns = (round_mat(s) for s in subspaces(A))
  51.     print("Column Space:", cs)
  52.     print("Row Space:", rs)
  53.     print("Null Space:", ns)
  54.     print("Left Null Space:", lns)
  55.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement