Loading [MathJax]/jax/output/CommonHTML/jax.js

2019年2月1日金曜日

学習環境

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


  1. (A+B)2=(A+B)(A+B)=(A+B)A+(A+B)B=A(A+B)+B(A+B)=A2+AB+BA+B2=A2+AB+AB+B2=A2+2AB+B2(A+B)(A-B)=(A+B)A+(A+B)(-B)=A(A+B)+(-B)(A+B)=A2+AB-B(A+B)=A2+AB-BA-B2=A2+AB-AB-B2=A2-B2

コード

Python 3

#!/usr/bin/env python3
from sympy import pprint, symbols, Matrix, solve
print('4.')


def cmp(A, B):
    return all([A[i, j].expand() == B[i, j].expand()
                for i in range(2)
                for j in range(2)])


print('可換な場合。')
a, b, c, d = symbols('a, b, c, d', real=True)
A = Matrix([[1, 1],
            [0, 1]])
B = Matrix([[a, b],
            [c, d]])

d = solve(A * B - B * A, a, b, c, d)
pprint(d)
B = B.subs(d)
for t in [A, B, A * B == B * A,
          cmp((A + B) ** 2,  A ** 2 + 2 * A * B + B ** 2),
          cmp((A + B) * (A - B), A ** 2 - B ** 2)]:
    pprint(t)
    print()

print('可換ではない場合。')
B = Matrix([[1, 1],
            [1, 1]])

for t in [A, B, A * B == B * A,
          cmp((A + B) ** 2,  A ** 2 + 2 * A * B + B ** 2),
          cmp((A + B) * (A - B), A ** 2 - B ** 2)]:
    pprint(t)
    print()

入出力結果(cmd(コマンドプロンプト)、Terminal、Jupyter(IPython))

$ python3 sample4.py
4.
可換な場合。
{a: d, c: 0}
⎡1  1⎤
⎢    ⎥
⎣0  1⎦

⎡d  b⎤
⎢    ⎥
⎣0  d⎦

True

True

True

可換ではない場合。
⎡1  1⎤
⎢    ⎥
⎣0  1⎦

⎡1  1⎤
⎢    ⎥
⎣1  1⎦

False

False

False

$

0 コメント:

コメントを投稿