3次行列式の計算

3次行列式の計算について,サラスの方法を説明するための図をつくる.

#ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (title=)

determinant.zip

Addax(0);
// 座標軸を表示しない
Defvar("Ln=0.8");
// 変数Lnを0.8に設定(行列の2つの成分の距離)
Putpoint("O",[0,0]);
// 原点の設定 1つ目(左の行列式)の中心
Putpoint("Q",[5,0],[Q.x,0]);
// 2つ目(右の行列式)の中心
Aname=["a_{11}","a_{12}","a_{13}",
    "a_{21}","a_{22}","a_{23}",
    "a_{31}","a_{32}","a_{33}"];
// 成分名のリスト
Deffun("Pxy(m,n)",
 ["regional(x);regional(y)",
 "
 x=(n-2)*Ln;
 y=(2-m)*Ln;
 "
,
 "[x,y]"
 ]
);
// 1つ目の行列式の成分の位置の計算をする関数定義
Deffun("Qxy(m,n)",
 ["regional(x);regional(y)",
 "
 x=(n-2)*Ln+Q.x;
 y=(2-m)*Ln;
 "
,
 "[x,y]"
 ]
);
// 2つ目の行列式の成分の位置の計算をする関数定義
repeat(3,i,
 repeat(3,j,
  k=3*i+j-3;
   Expr(Pxy(i,j),"c",Aname_k);
   Expr(Qxy(i,j),"c",Aname_k);
 )
);
// 2つの行列式への成分を表示
Listplot("1",[Pxy(1,1)+[-Ln/2,Ln/3],Pxy(3,1)-[Ln/2,Ln/3]],["dr,0.5"]);
Listplot("2",[Pxy(1,3)+[Ln/2,Ln/3],Pxy(3,3)+[Ln/2,-Ln/3]],["dr,0.5"]);
Listplot("3",[Qxy(1,1)+[-Ln/2,Ln/3],Qxy(3,1)-[Ln/2,Ln/3]],["dr,0.5"]);
Listplot("4",[Qxy(1,3)+[Ln/2,Ln/3],Qxy(3,3)+[Ln/2,-Ln/3]],["dr,0.5"]);
// 2つの行列式の左右の縦線の描く.

// 左の行列式の説明に必要な点をとる.
Putpoint("P21",[0,0],[P21.x,Pxy(2,3).y+Pxy(2,3).x-P21.x]);
// 傾きが-1で(2,3)成分を通る直線上に点をとる.
Putpoint("P22",[0,0],[(P21.x-P21.y+Pxy(3,1).x+Pxy(3,1).y)/2,(-P21.x+P21.y+Pxy(3,1).x+Pxy(3,1).y)/2]);
// 傾きが-1で(3,1)成分を通る直線上で,P21と結んだ線分が垂直となるように点をとる.
Putpoint("P31",[0,0],[P31.x,Pxy(1,3).y+Pxy(1,3).x-P31.x]);
// 傾きが-1で(1,3)成分を通る直線上に点をとる.
Putpoint("P32",[0,0],[(P31.x-P31.y+Pxy(2,1).x+Pxy(2,1).y)/2,(-P31.x+P31.y+Pxy(2,1).x+Pxy(2,1).y)/2]);
// 傾きが-1で(2,1)成分を通る直線上で,P32と結んだ線分が垂直となるように点をとる.

// +の計算する様子がわかるように矢印線を描画
Arrowdata([Pxy(1,1)+[0.2,-0.2],Pxy(2,2)+[-0.2,0.2]],[0.8,18]);
Arrowdata([Pxy(2,2)+[0.2,-0.2],Pxy(3,3)+[-0.2,0.2]],[0.8,18]);
// 1本目
Arrowdata([Pxy(1,2)+[0.2,-0.2],Pxy(2,3)+[-0.2,0.2]],[0.8,18]);
Listplot("5",[Pxy(2,3)+[0.2,-0.2],P21,P22]);
Arrowdata([P22,Pxy(3,1)+[0.2,-0.2]],[0.8,18]);
// 2本目
Listplot("6",[Pxy(1,3)+[-0.2,0.2],P31,P32]);
Arrowdata([P32,Pxy(2,1)+[-0.2,0.2]],[0.8,18]);
Arrowdata([Pxy(2,1)+[0.2,-0.2],Pxy(3,2)+[-0.2,0.2]],[0.8,18]);
// 3本目
Fontsize("ss");
Expr(Pxy(5,2),"n","a_{11}a_{22}a_{33}+a_{12}a_{23}a_{31}+a_{13}a_{21}a_{32}");
// 計算式を表示する.
// 2つ目の行列式(1つ目と同様)
// 左の行列式の説明に必要な点をとる.
Putpoint("Q11",[0,0],[Q11.x,Qxy(1,1).y-Qxy(1,1).x+Q11.x]);
Putpoint("Q12",[0,0],[(Q11.x+Q11.y+Qxy(2,3).x-Qxy(2,3).y)/2,(Q11.x+Q11.y-Qxy(2,3).x+Qxy(2,3).y)/2]);
Putpoint("Q21",Qxy(2,1),[Q21.x,Qxy(2,1).y-Qxy(2,1).x+Q21.x]);
Putpoint("Q22",[0,0],[(Q21.x+Q21.y+Qxy(3,3).x-Qxy(3,3).y)/2,(Q21.x+Q21.y-Qxy(3,3).x+Qxy(3,3).y)/2]);
// -の計算する様子がわかるように矢印線を描画
Setcolor([0,1,1,0]);
Listplot("7",[Qxy(1,1)+[0.2,0.2],Q11,Q12]);
Arrowdata([Q12,Qxy(2,3)+[0.2,0.2]],[0.8,18]);
Arrowdata([Qxy(2,3)+[-0.2,-0.2],Qxy(3,2)+[0.2,0.2]],[0.8,18]);
// 1本目
Arrowdata([Qxy(1,2)+[-0.2,-0.2],Qxy(2,1)+[+0.2,0.2]],[0.8,18]);
Listplot("8",[Qxy(2,1)+[-0.2,-0.2],Q21,Q22]);
Arrowdata([Q22,Qxy(3,3)+[-0.2,-0.2]],[0.8,18]);
// 2本目
Arrowdata([Qxy(1,3)+[-0.2,-0.2],Qxy(2,2)+[0.2,0.2]],[0.8,18]);
Arrowdata([Qxy(2,2)+[-0.2,-0.2],Qxy(3,1)+[0.2,0.2]],[0.8,18]);
// 3本目
Fontsize("ss");
Expr(Qxy(5,2),"n","-a_{11}a_{23}a_{32}-a_{12}a_{21}a_{33}-a_{13}a_{22}a_{31}");
// 計算式を表示する.
最終更新:2016年10月30日 15:21
|新しいページ |検索 |ページ一覧 |RSS |@ウィキご利用ガイド |管理者にお問合せ
|ログイン|