2017年10月18日水曜日

学習環境

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


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

    1≤i≤ l 1 1≤j≤ m 1 B=( B 11 の(i,j)成分 ) m 1 +1≤j≤ m 2 B=( B 12 の(i,j- m 1 )成分 ) l 1 +1≤i≤ l 2 1≤j≤ m 1 B=( B 21 の(i- l 1 ,j)成分 ) m 1 +1≤j≤ m 2 B=( B 22 の(i- l 1 ,j− m 1 )成分 )

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

    1≤i≤ m 1 1≤j≤ n 1 A=( A 11 の( i,j )成分 ) n 1 +1≤j≤ n 2 A=( A 12 の( i,j− n 1 )成分 ) m 1 +1≤i≤ m 2 1≤j≤ n 1 A=( A 21 の( i− m 1 ,j )成分 ) n 1 +1≤j≤ n 2 A=( A 22 の( i− m 1 ,j− n 1 )の成分 )

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

    1≤i≤ l 1 1≤j≤ 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 +1≤j≤ 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 +1≤i≤ l 2 1≤j≤ 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 +1≤j≤ 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)成分について考える。

    1≤i≤ l 1 1≤j≤ 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 +1≤j≤ 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 +1≤i≤ l 2 1≤j≤ 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 +1≤j≤ 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 コメント:

コメントを投稿