Krypf’s Diary

暇なときに書く

ヤコビの恒等式

リー代数の初歩として, -1 から 1 までを要素に持つ10000個のランダム行列についてヤコビの恒等式が成り立っていることを確かめるプログラムを書いた.

ヤコビの恒等式

 \left[A, [B, C ] \right] + [B, [ C, A ] ] + [C, [ A, B ] ] = 0.

import numpy as np
from sympy import *
import time
import random

def com(A, B):
    return A * B - B * A

start = time.time()
for i in range(int(1e4)):
    A = Matrix([[2 * random.random() - 1 for j in range(3)] for i in range(3)])
    B = Matrix([[2 * random.random() - 1 for j in range(3)] for i in range(3)])
    C = Matrix([[2 * random.random() - 1 for j in range(3)] for i in range(3)])
    X = com(A , com(B, C)) +  com(B, com(C, A)) + com(C , com(A, B))

    if (any([abs(X[i, j]) > 1e-9 for j in range(3) for i in range(3)])):
        break
print(i)    

end = time.time()
print(end - start)
#9999
#156.34743809700012

数値的にもほんとに成り立つんですね.

こんなこともできちゃうんですね,プログラムって(当たり前か).

Python はシンプルにかけるけど遅い,ということを痛感. 10000で2分はかなり遅いので,C言語で書けないかなぁとおもいつつ,備忘録を残しておきます.