リー代数の初歩として, -1 から 1 までを要素に持つ10000個のランダム行列についてヤコビの恒等式が成り立っていることを確かめるプログラムを書いた.
ヤコビの恒等式:
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言語で書けないかなぁとおもいつつ,備忘録を残しておきます.