行列計算


maximaを使って
行列のexpを計算をする必要があったのだが、これを手で計算するのは面倒である。これまで、行列の計算はRにさせることがあったが、Rでexpを処理しようとすると、対角化してexpを計算して、元の座標系に戻すという手法で計算していた。しかし、Rの場合には数値計算はしてくれるが、数式の変形はしてくれない。数式変形をするときには、maximaが便利だが、行列のexpも扱えることを知った。例えば以下のような感じである。

my:matrix([0,-1],[1,0])*%i/2;
matrixexp(t*%i*my);
demoivre(%);
trigreduce(%);

最後の二行は、数式を三角関数で表して、簡略化している。指数関数や三角関数は、期待するように計算するのが、少し面倒で、trigexpandやfactorなども使って処理する必要がある場合もある。まだ、maximaには慣れていないが、数式変形の時に、使おうと思う。