2018年12月16日日曜日

学習環境

線型代数入門 (松坂和夫 数学入門シリーズ 2) (松坂 和夫(著)、岩波書店)の第9章(エルミート双1次形式、内積空間)、6(内積空間)、問題1.を取り組んでみる。


  1. u + v 2 + u - v 2 = u + v | u + v + u - v | u - v = u | u + u | v + v | u + v | v + u | u - u | v - v | u + v | v = 2 u 2 + 2 v 2 = 2 u 2 + v 2

コード(Emacs)

Python 3

#!/usr/bin/env python3
from sympy import pprint, symbols, Matrix, I
import random

print('1.')

n = 3
u = Matrix(symbols([f'u{i + 1}' for i in range(n)], imag=True))
v = Matrix(symbols([f'v{i + 1}' for i in range(n)], imag=True))
l = (u + v).norm() ** 2 + (u - v).norm() ** 2
r = 2 * (u.norm() ** 2 + v.norm() ** 2)

for t in [u.T, v.T, l, r, (l - r).expand() == 0]:
    pprint(t)
    print()

u = Matrix(symbols([f'u{i + 1}' for i in range(n)], real=True))
v = Matrix(symbols([f'v{i + 1}' for i in range(n)], real=True))
l = (u + v).norm() ** 2 + (u - v).norm() ** 2
r = 2 * (u.norm() ** 2 + v.norm() ** 2)

for t in [u.T, v.T, l, r, (l - r).expand() == 0]:
    pprint(t)
    print()

for _ in range(5):
    u = Matrix([random.randrange(-5, 6) + random.randrange(-5, 6) * I
                for _ in range(n)])
    v = Matrix([random.randrange(-5, 6) + random.randrange(-5, 6) * I
                for _ in range(n)])
    l = (u + v).norm() ** 2 + (u - v).norm() ** 2
    r = 2 * (u.norm() ** 2 + v.norm() ** 2)

    for t in [u.T, v.T, l, r, l == r]:
        pprint(t)
        print()

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

$ ./sample1.py
1.
[u₁  u₂  u₃]

[v₁  v₂  v₃]

         2            2            2            2            2            2
│u₁ - v₁│  + │u₁ + v₁│  + │u₂ - v₂│  + │u₂ + v₂│  + │u₃ - v₃│  + │u₃ + v₃│ 

      2         2         2         2         2         2
2⋅│u₁│  + 2⋅│u₂│  + 2⋅│u₃│  + 2⋅│v₁│  + 2⋅│v₂│  + 2⋅│v₃│ 

False

[u₁  u₂  u₃]

[v₁  v₂  v₃]

         2            2            2            2            2            2
(u₁ - v₁)  + (u₁ + v₁)  + (u₂ - v₂)  + (u₂ + v₂)  + (u₃ - v₃)  + (u₃ + v₃) 

    2       2       2       2       2       2
2⋅u₁  + 2⋅u₂  + 2⋅u₃  + 2⋅v₁  + 2⋅v₂  + 2⋅v₃ 

True

[-5 + 3⋅ⅈ  2 + 4⋅ⅈ  -2 - 5⋅ⅈ]

[-1 + 3⋅ⅈ  -2  1 - 4⋅ⅈ]

228

228

True

[5 - 3⋅ⅈ  -4 - 4⋅ⅈ  1]

[-3 - 3⋅ⅈ  -2 + 3⋅ⅈ  3 - 3⋅ⅈ]

232

232

True

[-1 + 5⋅ⅈ  2 - 2⋅ⅈ  2 - ⅈ]

[-4 + ⅈ  4 - ⅈ  3]

164

164

True

[1 + ⅈ  -2⋅ⅈ  4 - 4⋅ⅈ]

[-4 - ⅈ  4 - 5⋅ⅈ  -3 - ⅈ]

212

212

True

[-2 - 2⋅ⅈ  2 - 4⋅ⅈ  -2 - ⅈ]

[3  -3 + ⅈ  4 - 2⋅ⅈ]

144

144

True

$

SymPyはSymbolが複素数の場合は上手く計算してくれないみたい。

0 コメント:

コメントを投稿