genmatrixで行列を作る
maximaで角運動量演算子
Rで角運動量演算子の行列を計算するプログラムは、以前に書いて、時々使っているが、Rでは変数を含んだ計算をすることができない。そこで、maximaを使ってこの行列を計算するプログラムを書いてみた。maximaについてはど素人なので、無駄な部分が多いと思うが、これを使うと変数を含んだ変形が簡単になるはずだ。ただし、行列の掛け算は.を、行列のn乗は^^を使うことに注意しないといけない。最後の行は、核四重極相互作用の行列を例として示した。
mjz(j):=genmatrix(lambda([a,b],if a=b then j+1-a else 0),2*j+1,2*j+1); mjp(j):=genmatrix(lambda([a,b],if a=b-1 then sqrt(a*(2*j+1-a)) else 0),2*j+1,2*j+1); mjm(j):=transpose(mjp(j)); mjx(j):=(mjp(j)+mjm(j))/2; mjy(j):=(mjp(j)-mjm(j))/2/%i; me(j):=ident(2*j+1); 3*mjz(j)^^2-j*(j+1)*me(j)+n/2*(mjp(j)^^2+mjm(j)^^2);
2020/4/15追記 久々に使おうとしたら、代入がコロンだということを忘れていて、なかなか動かなくて苦労した。