aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHolden Rohrer <hr@hrhr.dev>2021-10-06 15:18:32 -0400
committerHolden Rohrer <hr@hrhr.dev>2021-10-06 15:18:32 -0400
commit1982e0b0abe8b94cbc6c3701ba3e6e193616d117 (patch)
treef7a50f6373405ef1acf03a0e1cccd2fc9c0cff29
parent32f4af5f369fa9f0b2988ecad7797f4bec3661c3 (diff)
interim changes to matlab hw
-rw-r--r--li/matlab_hw.py67
1 files changed, 61 insertions, 6 deletions
diff --git a/li/matlab_hw.py b/li/matlab_hw.py
index 71b89b6..3473934 100644
--- a/li/matlab_hw.py
+++ b/li/matlab_hw.py
@@ -133,24 +133,47 @@ start = perf_counter()
np.linalg.solve(A, I)
print("A\I:", str(perf_counter() - start) + "s")
-#print("Section 1.6: #71")
+print("Section 1.6: #71")
+
+def proof(dim):
+ L = np.identity(dim) - np.diag([x/(1+x) for x in range(1,dim)], -1)
+ print(L)
+ Linv = np.linalg.inv(L)
+ print("L^{-1}:")
+ print(Linv)
+ right = True
+ for j in range(1,dim+1):
+ for i in range(1,j+1):
+ if not np.isclose(Linv[j-1][i-1], i/j):
+ print("the assertion in the book is wrong at",i,j)
+ right = False
+ if right:
+ print("The book is right")
+
+proof(4)
+proof(5)
print("Section 2.2: #33")
print("For the first matrix:")
A = [[1, 3, 3], [2, 6, 9], [-1, -3, 3]]
-b = [[1, 5, 5]]
-# TODO
+b = [1, 5, 5]
+print("null space:")
print(scipy.linalg.null_space(A))
+print("particular solution:")
+print(np.linalg.lstsq(A, b, rcond=None)[0])
print("For the second matrix:")
A = [[1, 3, 1, 2], [2, 6, 4, 8], [0, 0, 2, 4]]
-b = [[1, 3, 1]]
+b = [1, 3, 1]
+print("null space:")
+print(scipy.linalg.null_space(A))
+print("particular solution:")
+print(np.linalg.lstsq(A, b, rcond=None)[0])
print("Section 2.2: #35")
-
+print("TODO")
print("For the first system:")
A = [[1, 2], [2, 4], [2, 5], [3, 9]]
-print(sympy.Matrix.rref(A)) # ew is there no automated way to do this ?
print("Section 2.2: #36")
@@ -172,12 +195,44 @@ print(scipy.linalg.null_space(A.transpose()))
print("Section 2.3: #2")
+print("Largest possible number of independent vectors is the dimension \
+of the space spanned by these vectors, or the number of vectors in the \
+basis, which in this case is:")
+v = [[ 1, 1, 1, 0, 0, 0],
+ [-1, 0, 0, 1, 1, 0],
+ [ 0, -1, 0, -1, 0, 1],
+ [ 0, 0, -1, 0, -1, -1]]
+print(len(scipy.linalg.orth(v)))
+
print("Section 2.3: #5")
+print("(a)")
+
+v = [[1, 2, 3],
+ [3, 1, 2],
+ [2, 3, 1]]
+if len(scipy.linalg.orth(v)) == 3: print("they are independent")
+else: print("they are not independent")
+
+print("(b)")
+
+v = [[ 1, 2, -3],
+ [-3, 1, 2],
+ [ 2, -3, 1]]
+if len(scipy.linalg.orth(v)) == 3: print("they are independent")
+else: print("they are not independent")
+
print("Section 2.3: #13")
+# probably out of spirit of the matlab hw
+print("This one can be done easily without a calculator because the \
+ echelon matrix has already been computed.")
+print("The dimensions of all of these is 2, and the row spaces are the \
+ same.")
print("Section 2.3: #16")
+print("TODO")
print("Section 2.3: #18")
+print("TODO")
print("Section 2.3: #24")