Maximaで非可換代数の計算

Maximaでは簡単な非可換代数の計算なら特にプログラムを書くことなくできるので、BCH formulaの最初の項の計算を例に使い方をメモ。

Baker–Campbell–Hausdorff formula

詳細は以下。

Baker–Campbell–Hausdorff formula - Wikipedia, the free encyclopedia

{ X, Y, Z }をoperatorとする。

{
\displaystyle
\exp(X) := \sum_{k=0}^{\infty}\frac{X^{k}}{k!}
}

{
\displaystyle
\log(1+X) := \sum_{k=1}^{\infty} \left(-1 \right)^{k-1} \frac{ X^{k}}{k}
}

{
\displaystyle
[ X,Y ] := XY - YX
}

とおく。BCH formulaは、

{
\displaystyle
Z = \log( \exp(X) \exp(Y))
}

上を満たすZは、

{
\begin{align}
Z = X+Y+ \frac{1}{2}[X,Y]
+ \frac{1}{12}([X,[X,Y]] + [Y,[Y,X]])
+ \frac{1}{24}[X,[Y,[Y,X]]] \\
- \frac{1}{720}([Y,[Y,[Y,[Y,X]]]]+[X,[X,[X,[X,Y]]]]) \\
+ \frac{1}{360}([Y,[X,[X,[X,Y]]]]+[X,[Y,[Y,[Y,X]]]]) \\
+ \frac{1}{120}([X,[X,[Y,[Y,X]]]]+[Y,[Y,[X,[X,Y]]]]) \\
+....
\end{align}
}

で与えられる。

maximaの非可換代数の計算

まずは基本的な演算から、非可換の積と冪上は次のようにする。

X.Y-Y.X
(X+Y)^^2

積は.として、冪上は^^を用いる。

関数などの定義。

exp_non(X,n):=1+sum(X^^k/(k!),k,1,n);
log_non(X,n):=sum((-1)^k*(X-1)^^k,k,1,n);
matchfix("<<", ">>");
<<X,Y>>:=X.Y-Y.X;
BCH(x,y):=x+y+1/2*<<x,y>>+1/12*(<<x,<<x,y>> >>+<<y,<<y,x>>>>) 
+ 1/24*<<x,<<y,<<y,x>>>>>>
-1/720*(<<y,<<y,<<y,<<y,x>>>>>>>>+<<x,<<x,<<x,<<x,y>>>>>>>>)
+1/360*(<<y,<<x,<<x,<<x,y>>>>>>>>+<<x,<<y,<<y,<<y,x>>>>>>>>)
+1/120*(<<x,<<x,<<y,<<y,x>>>>>>>>+<<y,<<y,<<x,<<x,y>>>>>>>>);

matchfixで、新しくdeliminatorを定義している。maximaでは[ ]は配列で利用されているので、リー括弧積を<< >>で定義している。

上で定義したBCHと以下の差が5次の項まで消えていれば良い。

Q:exp_non(X,5).exp_non(Y,5);
expand(log_non(Q,5)-BCH(X,Y));

当然、項が多すぎて計算できない。maximaには指定した次数以下の項を取り出す機能がデフォルトではないようなので、項の展開を行う為にはプログラムを書かないといけないので面倒くさい。

参考

Maxima 5.34.182.g8fea128 Manual: 7. Operators