//基本(タテ)ベクトルは次のように入力できる。 e1:=matrix([1,0,0,0]): e2:=matrix([0,1,0,0]): e3:=matrix([0,0,1,0]): e4:=matrix([0,0,0,1]): // A,B は基本ベクトルを次のように並べたものである。 A:=e2.e3.e4.e1: B:=e2.e1.e4.e3: print ("A=",A,"B=",B); // // 射影 P:=e1.e1.e1.e1: // P の平均を計算する。和をとるには $記号が重宝する。 PM:=1/8*_plus(A^i*B^j*P*((A^i*B^j)^(-1))$ i=0..3 $ j=0..1): print("P=",P,"PM=",PM); // PM の像と核の基底の計算をするわけだが、 // 射影の場合にはこれは固有ベクトルを求めても同じである。 RESULT1:=linalg::eigenvectors(PM): //RESULT1 は固有値、重複度、固有ベクトルの順に並んでいるので、 //ここから必要なデータを得る。 v1:=RESULT1[1][3][1]: v2:=RESULT1[1][3][2]: v3:=RESULT1[1][3][3]: v0:=RESULT1[2][3][1]: // Q は PM の像と核との基底を並べたもの。 Q:=v0.v1.v2.v3: print( "(Q^(-1))*A*Q=", (Q^(-1))*A*Q, "(Q^(-1))*B*Q=", (Q^(-1))*B*Q);