2020年6月2日火曜日

学習環境

対話・おもしろ線形代数 (木村良夫(著)、現代数学社)の第3話(行列による世界旅行)、君も挑戦してみようの問1の解答を求めてみる。


  1. [0123][10]=[02][21][12][23][33][30][01][13][31][14]
    [44][40][03][34][43]
    [32][22][20][04][42]
    [24][41][11][10]

    よって長さ24のループを作る。

    逆回りのループをつくる行列、実際に確認。

    [1310][10]=[11][41][24][42][04]
    [20][22][32][43][34]
    [03][40][44][14][31]
    [13][01][30][33][23]
    [12][21][02][10]

コード

#!/usr/bin/env python3
from unittest import TestCase, main
from sympy import Matrix

vs1 = []
vs2 = []


class TestMod5Loop(TestCase):
    def test1(self):
        m = Matrix([[0, 1],
                    [2, 3]])
        u = Matrix([[1], [0]])
        vs1.append(u)
        v = (m * u) % 5
        vs1.append(v)
        i = 1
        while u != v:
            v = (m * v) % 5
            vs1.append(v)
            i += 1
        self.assertEqual(i, 24)

    def test2(self):
        m = Matrix([[1, 3],
                    [1, 0]])
        u = Matrix([[1], [0]])
        vs2.append(u)
        v = (m * u) % 5
        i = 1
        vs2.append(v)
        while u != v:
            v = (m * v) % 5
            vs2.append(v)
            i += 1
        self.assertEqual(i, 24)
        self.assertEqual(vs1, list(reversed(vs2)))


if __name__ == "__main__":
    main()

入出力結果(Zsh、PowerShell、Terminal、Jupyter(IPython))

% ./sample1.py -v
test1 (__main__.TestMod5Loop) ... ok
test2 (__main__.TestMod5Loop) ... ok

----------------------------------------------------------------------
Ran 2 tests in 0.041s

OK
%

0 コメント:

コメントを投稿