- 追加された行はこのように表示されます。
- 削除された行は
このように表示されます。
!! MAXIMA を使って、行列の計算をする
*Tips-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)