2017年10月18日水曜日

学習環境

線型代数入門(松坂 和夫(著)、岩波書店)の第3章(線型写像)、7(行列の積)、問題11.を取り組んでみる。


  1. 行列Bの(i, j)成分について考え、成分表示してみる。

    1i l 1 1j m 1 B=( B 11 (i,j) ) m 1 +1j m 2 B=( B 12 (i,j- m 1 ) ) l 1 +1i l 2 1j m 1 B=( B 21 (i- l 1 ,j) ) m 1 +1j m 2 B=( B 22 (i- l 1 ,j m 1 ) )

    同様に行列Aの(i, j)成分について考え、Aの成分表示を考えてみる。

    1i m 1 1j n 1 A=( A 11 ( i,j ) ) n 1 +1j n 2 A=( A 12 ( i,j n 1 ) ) m 1 +1i m 2 1j n 1 A=( A 21 ( i m 1 ,j ) ) n 1 +1j n 2 A=( A 22 ( i m 1 ,j n 1 ) )

    行列の積BAの(i, j)成分について考えてみる。

    1i l 1 1j n 1 ( k=1 m 1 ( ( B 11 ( i,k ) )·( A 11 ( k,j ) ) ) + k= m 1 +1 m j ( ( B 12 ( i,k m 1 ) )·( A 21 ( k m 1 ,j ) ) ) ) n 1 +1j n 2 ( k=1 m 1 ( ( B 11 ( i,k ) )·( A 12 ( k,j n 1 ) ) ) + k= m 1 +1 m j ( ( B 12 ( i,k m 1 ) )·( A 22 ( k m 1 ,j n 1 ) ) ) ) l 1 +1i l 2 1j n 1 ( k=1 m 1 ( ( B 21 ( i l 1 ,k ) )·( A 11 ( k,j ) ) ) + k= m 1 +1 m j ( ( B 12 ( i l 1 ,k m 1 ) )·( A 21 ( k m 1 ,j ) ) ) ) n 1 +1j n 2 ( k=1 m 1 ( ( B 21 ( i l 1 ,k ) )·( A 12 ( k,j n 1 ) ) ) + k= m 1 +1 m j ( ( B 22 ( i l 1 ,k m 1 ) )·( A 22 ( k m 1 ,j n 1 ) ) ) )

    問題の等式の右辺の行列の(i, j)成分について考える。

    1i l 1 1j n 1 ( k=1 m 1 ( ( B 11 ( i,k ) )·( A 11 ( k,j ) ) ) + k= m 1 +1 m j ( ( B 12 ( i,k m 1 ) )·( A 21 ( k m 1 ,j ) ) ) ) n 1 +1j n 2 ( k=1 m 1 ( ( B 11 ( i,k ) )·( A 12 ( k,j n 1 ) ) ) + k= m 1 +1 m j ( ( B 12 ( i,k m 1 ) )·( A 22 ( k m 1 ,j n 1 ) ) ) ) l 1 +1i l 2 1j n 1 ( k=1 m 1 ( ( B 21 ( i l 1 ,k ) )·( A 11 ( k,j ) ) ) + k= m 1 +1 m j ( ( B 12 ( i l 1 ,k m 1 ) )·( A 21 ( k m 1 ,j ) ) ) ) n 1 +1j n 2 ( k=1 m 1 ( ( B 21 ( i l 1 ,k ) )·( A 12 ( k,j n 1 ) ) ) + k= m 1 +1 m j ( ( B 22 ( i l 1 ,k m 1 ) )·( A 22 ( k m 1 ,j n 1 ) ) ) )

    よって、左辺と右辺の(i, j)成分は一致するので、問題の等号は成り立つ。

コード(Emacs)

Python 3

#!/usr/bin/env python3
from sympy import pprint, symbols, Matrix, solve
import functools

print('11.')
m1 = 1
m2 = 2
n1 = 2
n2 = 3
l1 = 3
l2 = 2

BS = [Matrix(range(l * m)).reshape(l, m)
      for l in [l1, l2]
      for m in [m1, m2]]
B = Matrix([BS]).reshape(2, 2)
AS = [Matrix(range(m * n)).reshape(m, n)
      for m in [m1, m2]
      for n in [n1, n2]]
A = Matrix([AS]).reshape(2, 2)

for t in [B, A, B * A]:
    pprint(t)
    print()

入出力結果(Terminal, Jupyter(IPython))

$ ./sample11.py
11.
⎡⎡0⎤  ⎡0  1⎤⎤
⎢⎢ ⎥  ⎢    ⎥⎥
⎢⎢1⎥  ⎢2  3⎥⎥
⎢⎢ ⎥  ⎢    ⎥⎥
⎢⎣2⎦  ⎣4  5⎦⎥
⎢           ⎥
⎢⎡0⎤  ⎡0  1⎤⎥
⎢⎢ ⎥  ⎢    ⎥⎥
⎣⎣1⎦  ⎣2  3⎦⎦

⎡[0  1]  [0  1  2]⎤
⎢                 ⎥
⎢⎡0  1⎤  ⎡0  1  2⎤⎥
⎢⎢    ⎥  ⎢       ⎥⎥
⎣⎣2  3⎦  ⎣3  4  5⎦⎦

⎡⎡2   3 ⎤  ⎡3   4   5 ⎤⎤
⎢⎢      ⎥  ⎢          ⎥⎥
⎢⎢6   12⎥  ⎢9   15  21⎥⎥
⎢⎢      ⎥  ⎢          ⎥⎥
⎢⎣10  21⎦  ⎣15  26  37⎦⎥
⎢                      ⎥
⎢⎡2  3 ⎤   ⎡3  4   5 ⎤ ⎥
⎢⎢     ⎥   ⎢         ⎥ ⎥
⎣⎣6  12⎦   ⎣9  15  21⎦ ⎦

$

0 コメント:

コメントを投稿