summaryrefslogtreecommitdiffstats
path: root/four.py
diff options
context:
space:
mode:
authorsyn <isaqtm@gmail.com>2020-02-16 21:16:23 +0300
committersyn <isaqtm@gmail.com>2020-02-16 21:16:23 +0300
commit40f07ad2436e9ac58976d1cd7bee26cee903fb25 (patch)
tree66436365e8654f486ea67d57abf3eaee87529d00 /four.py
parentfd78d0fd00e6b98ae8b9894db8be028575e205ac (diff)
downloadalg3-40f07ad2436e9ac58976d1cd7bee26cee903fb25.tar.gz
Third task
Diffstat (limited to 'four.py')
-rw-r--r--four.py148
1 files changed, 144 insertions, 4 deletions
diff --git a/four.py b/four.py
index 4f7cd54..12074cf 100644
--- a/four.py
+++ b/four.py
@@ -23,8 +23,10 @@ lbdE = Matrix([
[0, 0, 0, Poly([0, 1])]
])
-# uncomment to see characteristic poly
-#print((A - lbdE).det())
+print((A - lbdE).det())
+
+
+
@@ -45,11 +47,149 @@ A.make_D(0, -1)
A.make_U(1, 2)
A.make_D(1, Fraction(1, 4))
-gen_figure('fsr_A_T',
+gen_figure('V_1',
+f'''
+ {before}
+ {FOUR_SIMEQ}
+ {A.to_tex()}
+''')
+
+
+
+
+
+
+
+
+A = Matrix([
+ [-1, 1, 1, -1],
+ [-7, 4, 4, -3],
+ [4, -1, -2, 1],
+ [4, -1, -2, 1]
+])
+A = A@A
+
+before = A.to_tex()
+
+A.triangulate()
+
+
+A.make_D(0, -Fraction(1, 2))
+A.make_D(1, -6)
+
+gen_figure('V_0',
f'''
{before}
{FOUR_SIMEQ}
{A.to_tex()}
''')
-print(A) \ No newline at end of file
+
+
+
+
+
+# solve 16-equation system
+# unknown matrix is (answer_to_system).reshape(4, 4),
+# so we 'flatten' it to solve for each unknown
+
+def make_row(vec, ans):
+ return [
+ [0, 0, 0, 0] * i +
+ vec +
+ [0, 0, 0, 0] * (3 - i) +
+ [ans[i]]
+ for i in range(4)
+ ]
+
+v_11 = [1, 3, 0, 0]
+v_12 = [1, 0, 3, 3]
+v_01 = [-1,-3, 1, 0]
+v_02 = [12, 10, 0, 3]
+e_3 = [0, 0, 1, 0]
+e_4 = [0, 0, 0, 1]
+
+rows = []
+rows += make_row(v_11, [0, 0, 0, 0])
+rows += make_row(v_12, [0, 0, 0, 0])
+rows += make_row(e_3, v_01)
+rows += make_row(e_4, v_02)
+
+sys = Matrix(rows)
+
+before = sys.to_tex()
+
+sys.triangulate(True)
+sys.make_D(1, -Fraction(1, 3))
+sys.make_D(5, -Fraction(1, 3))
+sys.make_D(9, -Fraction(1, 3))
+sys.make_D(13, -Fraction(1, 3))
+
+gen_figure('sys_orig',
+f'''
+ \\begingroup % keep the change local
+ \\setlength\\arraycolsep{{4pt}}
+ {before}
+ {FOUR_SIMEQ}
+ {sys.to_tex()}
+ \\endgroup
+''')
+
+ans = [row[-1] for row in sys.rows]
+reshape = [ans[4 * i:4 * i + 4] for i in range(4)]
+
+psi = Matrix(reshape)
+
+gen_figure('psi',
+f'''
+\\psi' = {psi.to_tex()}
+''')
+
+
+
+
+
+
+inverse = Matrix([
+ [ 0, Fraction(1, 3), 0, 0, 1, 0, 0, 0],
+ [ 1, -Fraction(1, 3), 0, 0, 0, 1, 0, 0],
+ [-3, -1, 1, 0, 0, 0, 1, 0],
+ [-3, -1, 0, 1, 0, 0, 0, 1]
+])
+
+before = inverse.to_tex()
+
+inverse.triangulate(True)
+inverse.make_D(1, 3)
+
+gen_figure('inverse',
+f'''
+ {before}
+ {FOUR_SIMEQ}
+ {inverse.to_tex()}
+''')
+
+
+
+
+C = Matrix([
+ [ 0, Fraction(1, 3), 0, 0],
+ [ 1, -Fraction(1, 3), 0, 0],
+ [-3, -1, 1, 0],
+ [-3, -1, 0, 1]
+])
+
+inv = Matrix([
+ [1, 1, 0, 0],
+ [3, 0, 0, 0],
+ [6, 3, 1, 0],
+ [6, 3, 0, 1]
+])
+
+
+gen_figure('inverse_mul',
+f'''
+ \\psi = C^{{-1}}\\psi'C =
+ {((inv @ psi) @ C).to_tex()}
+'''
+)