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