diff options
author | syn <isaqtm@gmail.com> | 2020-02-16 21:16:23 +0300 |
---|---|---|
committer | syn <isaqtm@gmail.com> | 2020-02-16 21:16:23 +0300 |
commit | 40f07ad2436e9ac58976d1cd7bee26cee903fb25 (patch) | |
tree | 66436365e8654f486ea67d57abf3eaee87529d00 /four.py | |
parent | fd78d0fd00e6b98ae8b9894db8be028575e205ac (diff) | |
download | alg3-40f07ad2436e9ac58976d1cd7bee26cee903fb25.tar.gz |
Third task
Diffstat (limited to 'four.py')
-rw-r--r-- | four.py | 148 |
1 files changed, 144 insertions, 4 deletions
@@ -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()} +''' +) |