tips-maxima-matrix
MAXIMA を使って、行列の計算をする
行列をつくる
行列に名前をつける. さて、matrix だけを使っても色々な行列の計算を maxima にさせることは可 能なのですが、計算のたびに一々成分を入力するのでは全く疲れてしまいます。そこで、一度入力した行列 に適当な名前を付けて、名前で色々な操作ができれば便利です。maxima で、何かの対象に名前を付ける は記号 : を使います。例を見てみましょう。 (%i3) A : matrix([1,2,3],[4,5,6],[7,8,9]); [ 1 2 3 ] [ ] (%o3) [ 4 5 6 ] [ ] [ 7 8 9 ] (%i4) B : matrix([a,b,c,d],[e,f,g,h]); [ a b c d ] (%o4) [ ] [ e f g h ]
これで、A, B といった名前で行列を使うことができるようになりました。この A や B を変数と言います。
足し算
(%i3) A : matrix([1,2],[3,4]); [ 1 2 ] (%o3) [ ] [ 3 4 ] (%i4) B : matrix([a,b],[c,d]); [ a b ] (%o4) [ ] [ c d ] (%i5) C : A + B ; [ a + 1 b + 2 ] (%o5) [ ] [ c + 3 d + 4 ]
かけ算(スカラー)
(%i6) C : A . B ; [ 2 c + a 2 d + b ] (%o6) [ ] [ 4 c + 3 a 4 d + 3 b ]
かけ算 ( 逓倍 )
(%i8) A * B ; [ a 2 b ] (%o8) [ ] [ 3 c 4 d ]
逆行列
(%i9) AI : invert ( A ); [ - 2 1 ] [ ] (%o9) [ 3 1 ] [ - - - ] [ 2 2 ] (%i10) A . AI ; [ 1 0 ] (%o10) [ ] [ 0 1 ]
maxima で行列を
行列を作成
A:matrix([f,0,Cu],[0,f,Cv],[0,0,1]); Rt:matrix([r11,r12,r13,t1],[r21,r22,r23,t2],[r31,r32,r33,t3]); Xw:matrix([xw],[yw],[zw],[1]);
積をとる
(%i4) A.Rt.Xw; (%o4) matrix([Cu (r33 zw + r32 yw + r31 xw + t3) + f (r13 zw + r12 yw + r11 xw + t1)], [Cv (r33 zw + r32 yw + r31 xw + t3) + f (r23 zw + r22 yw + r21 xw + t2)], [r33 zw + r32 yw + r31 xw + t3]) (%i5)
行列のコピー copymatrix(A) 転地行列 transpose(A) 係数行列 coefmatrix([式リスト],[変数リスト]) 拡大係数行列 augcoefmatrix([式リスト],[変数リスト]) 行列の階数 rank(A) 逆行列 invert(A) 対角行列 diagmatrix(階数,要素) 単位行列 ident 行列生成 genmatrix(関数またはラムダ式,i,j) 階段行列 echelon(A) 余因子行列 adjoint(A)