2020年2月22日土曜日

学習環境

ラング線形代数学(上) (ちくま学現文庫)(S.ラング (著)、芹沢 正三 (翻訳)、筑摩書房)の3章(行列)、2(行列の積)、練習問題19の解答を求めてみる。


  1. AB=k=1naikbkj=k=inaikbkjkjbkj=0k=jbkj=ajj-1

    よって

    AB=[a11b11c12c1n0a22b22c2nnone00annbnn]=[1c12c1n01c2nnone001]

    また、

    BA=k=1nbikakj=k=iibikakj=biiaiji>jaij=0

    よって、

    BA=[b11a11b11a12b11a1n0b22a22b22a2nnone00bnnann]=[1c12c1n01c2nnone001]

    よって、 AB、 BA ともに三角行列で、その対角要素は1である。

    (証明終)

コード

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


print('19.')


def a(i, j):
    if i > j:
        return 0
    if i == j:
        return symbols(f'a{i}{j}', nonzero=True)
    return symbols(f'a{i}{j}')


def b(i, j):
    if i == j:
        return 1 / symbols(f'a{i}{j}', nonzero=True)
    return 0


n = 4
A = Matrix([[a(i + 1, j + 1) for j in range(n)]
            for i in range(n)])
B = Matrix([[b(i + 1, j + 1) for j in range(n)]
            for i in range(n)])


class MyTestCase(TestCase):
    def testAB(self):
        C = A * B
        for i in range(n):
            for j in range(n):
                if i == j:
                    self.assertEqual(C[i, j], 1)
                if j < i:
                    self.assertEqual(C[i, j], 0)

    def testBA(self):
        C = B * A
        for i in range(n):
            for j in range(n):
                if i == j:
                    self.assertEqual(C[i, j], 1)
                if j < i:
                    self.assertEqual(C[i, j], 0)


if __name__ == '__main__':
    main()

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

% ./sample19.py -v
19.
testAB (__main__.MyTestCase) ... ok
testBA (__main__.MyTestCase) ... ok

----------------------------------------------------------------------
Ran 2 tests in 0.043s

OK
%

0 コメント:

コメントを投稿