7月10日

7月10日




開始 開始 目次へ 目次 前回へ 前回 次回へ 次回

1 最初 前へ 次へ 最後 目次へ

2 最初 前へ 次へ 最後 目次へ

#gapについてはMyブックマークも参照してください。連立1次方程式の掃出法(高校生向け)もあります。
#固有値を求めるコマンド Eigenvalues(Rationals, * ), * へ行列をいれる
#4番目の行列については Eigenvalues(GaussianRationals,mats[4]);
#固有ベクトルを求めるコマンド Eigenvectors(Rationals, * ) ただし、左からかける横 ベクトル。
#TransposedMat( * ) で転置を利用すれば右からかける列ベクトルが得られる。
#Tabキーでコマンドなどの補完機能あり。

gap> Read("det"); #ファイル det を読み込む
gap> Print(det);
#次の様に関数detを定義すると使える様になります。detというファイル名にこれを書いておき、上の様にReadで読込むこともできます。
gap> det:=
>function ( m )
>    local  i, j, k, n;
>    if Length( m ) = 1  then
>        return m[1][1];
>    fi;
>    n := 0;
>    for i  in [ 1 .. Length( m ) ]  do
>        k
>         := Concatenation( [ 1 .. i - 1
>             ],
>           [ i + 1 .. Length( m ) ] );
>        n
>         := n + (-1) ^ (i - 1) * m[1][i]
>            * det(
>               m{[ 2 .. Length( m ) ]}{k
>                 } );
>    od;
>    return n;
>end;
gap> x:=Indeterminate(Rationals,"x");
x
gap> A:=[[-2,-1,-2,1],
> [5,3,4,-1],[1,0,1,-1],[-3,-1,-2,2]];
[ [ -2, -1, -2, 1 ], [ 5, 3, 4, -1 ],
  [ 1, 0, 1, -1 ], [ -3, -1, -2, 2 ] ]
gap> PrintArray(A);
[ [  -2,  -1,  -2,   1 ],
  [   5,   3,   4,  -1 ],
  [   1,   0,   1,  -1 ],
  [  -3,  -1,  -2,   2 ] ]
gap> x*IdentityMat(4);
[ [ x, 0, 0, 0 ], [ 0, x, 0, 0 ],
  [ 0, 0, x, 0 ], [ 0, 0, 0, x ] ]
gap> PrintArray(last);
[ [  x,  0,  0,  0 ],
  [  0,  x,  0,  0 ],
  [  0,  0,  x,  0 ],
  [  0,  0,  0,  x ] ]
gap> F:=ShallowCopy(x*IdentityMat(4)-A);
[ [ 2+x, 1, 2, -1 ],
  [ -5, -3+x, -4, 1 ],
  [ -1, 0, -1+x, 1 ], [ 3, 1, 2, -2+x ]
 ]
gap> PrintArray(F);
[ [   2+x,     1,     2,    -1 ],
  [    -5,  -3+x,    -4,     1 ],
  [    -1,     0,  -1+x,     1 ],
  [     3,     1,     2,  -2+x ] ]
gap> det(F);
1-4*x+6*x^2-4*x^3+x^4
gap> Factors(det(F));
[ -1+x, -1+x, -1+x, -1+x ]
gap> F[2]:=F[2]+F[1];
[ -3+x, -2+x, -2, 0 ]
gap> PrintArray(F);
[ [   2+x,     1,     2,    -1 ],
  [  -3+x,  -2+x,    -2,     0 ],
  [    -1,     0,  -1+x,     1 ],
  [     3,     1,     2,  -2+x ] ]
gap> F[3]:=F[3]+F[1];
[ 1+x, 1, 1+x, 0 ]
gap> PrintArray(F);
[ [   2+x,     1,     2,    -1 ],
  [  -3+x,  -2+x,    -2,     0 ],
  [   1+x,     1,   1+x,     0 ],
  [     3,     1,     2,  -2+x ] ]
gap> F[4]:=F[4]+F[1]*(-2+x);
[ -1+x^2, -1+x, -2+2*x, 0 ]
gap> PrintArray(F);
[ [     2+x,       1,       2,      -1 ]\
,
  [    -3+x,    -2+x,      -2,       0 ]\
,
  [     1+x,       1,     1+x,       0 ]\
,
  [  -1+x^2,    -1+x,  -2+2*x,       0 ]\
 ]
###########################################
##この部分誤り。正しくは
##det(F)=(-1)*(-1)*det(F{[2,3,4]}{[1,2,3]};
##で行列式の展開が得られる。誤りは固有多項式の定数倍なので、固有値を
##求めるときには、正しい解が出てくる。
#gap> G:=(-1)*(-1)*F{[2,3,4]}{[1,2,3]};
#[ [ -3+x, -2+x, -2 ], [ 1+x, 1, 1+x ],
#  [ -1+x^2, -1+x, -2+2*x ] ]
#gap> PrintArray(G);
#[ [    -3+x,    -2+x,      -2 ],
#  [     1+x,       1,     1+x ],
#  [  -1+x^2,    -1+x,  -2+2*x ] ]
#gap> det(G);
#1-4*x+6*x^2-4*x^3+x^4
#gap> Factors(last);
#[ -1+x, -1+x, -1+x, -1+x ]
###########################################
gap> A1:=ShallowCopy(IdentityMat(4)*1-A);
[ [ 3, 1, 2, -1 ], [ -5, -2, -4, 1 ],
  [ -1, 0, 0, 1 ], [ 3, 1, 2, -1 ] ]
gap> PrintArray(A1);
[ [   3,   1,   2,  -1 ],
  [  -5,  -2,  -4,   1 ],
  [  -1,   0,   0,   1 ],
  [   3,   1,   2,  -1 ] ]
gap> A1[4]:=A1[4]-A1[1];
[ 0, 0, 0, 0 ]
gap> PrintArray(A1);
[ [   3,   1,   2,  -1 ],
  [  -5,  -2,  -4,   1 ],
  [  -1,   0,   0,   1 ],
  [   0,   0,   0,   0 ] ]
gap> A1[1]:=A1[1]-A1[3]*(-3);
[ 0, 1, 2, 2 ]
gap> PrintArray(A1);
[ [   0,   1,   2,   2 ],
  [  -5,  -2,  -4,   1 ],
  [  -1,   0,   0,   1 ],
  [   0,   0,   0,   0 ] ]
gap> A1[2]:=A1[2]-A1[3]*(5);
[ 0, -2, -4, -4 ]
gap> PrintArray(A1);
[ [   0,   1,   2,   2 ],
  [   0,  -2,  -4,  -4 ],
  [  -1,   0,   0,   1 ],
  [   0,   0,   0,   0 ] ]
gap> A1[2]:=A1[2]-A1[1]*(-2);
[ 0, 0, 0, 0 ]
gap> PrintArray(A1);
[ [   0,   1,   2,   2 ],
  [   0,   0,   0,   0 ],
  [  -1,   0,   0,   1 ],
  [   0,   0,   0,   0 ] ]
gap> A1[3]:=(-1)*A1[3];
[ 1, 0, 0, -1 ]
gap> PrintArray(A1);
[ [   0,   1,   2,   2 ],
  [   0,   0,   0,   0 ],
  [   1,   0,   0,  -1 ],
  [   0,   0,   0,   0 ] ]
gap> PrintArray(A1{[3,1,2,4]});
[ [   1,   0,   0,  -1 ],
  [   0,   1,   2,   2 ],
  [   0,   0,   0,   0 ],
  [   0,   0,   0,   0 ] ]
gap> x1:=[1,0,0,1];
[ 1, 0, 0, 1 ]
gap> A*x1;
[ -1, 4, 0, -1 ]
gap> x1:=[1,-2,0,1];
[ 1, -2, 0, 1 ]
gap> A*x1;
[ 1, -2, 0, 1 ]
gap> x2:=[0,-2,1,0];
[ 0, -2, 1, 0 ]
gap> A*x2;
[ 0, -2, 1, 0 ]
gap> X12:=TransposedMat([x1,x2]);
[ [ 1, 0 ], [ -2, -2 ], [ 0, 1 ],
  [ 1, 0 ] ]
gap> PrintArray(X12);
[ [   1,   0 ],
  [  -2,  -2 ],
  [   0,   1 ],
  [   1,   0 ] ]
gap> PrintArray(A*X12);
[ [   1,   0 ],
  [  -2,  -2 ],
  [   0,   1 ],
  [   1,   0 ] ]

2 最初 前へ 次へ 最後 目次へ

3 最初 前へ 次へ 最後 目次へ

4 最初 前へ 次へ 最後 目次へ

gap> p:=x^2+1;
1+x^2
gap> e:=AlgebraicExtension(Rationals,p);
<field in characteristic 0>
gap> a:=RootOfDefiningPolynomial(e);
(a)
gap> a^2;
!-1
gap> 1=a^0;
true
gap> (a+1)^2;
(2*a)
gap> B:=[[0,a,1,-a],[-a,0,a,1],
> [1,-a,0,a],[a,1,-a,0]];
[ [ 0, (a), 1, (-1*a) ],
  [ (-1*a), 0, (a), 1 ],
  [ 1, (-1*a), 0, (a) ],
  [ (a), 1, (-1*a), 0 ] ]
gap> y:=Indeterminate(e,"y");
y
gap> G:=ShallowCopy(y*IdentityMat(4)-B);
[ [ y, (-1*a), -!1, (a) ],
  [ (a), y, (-1*a), -!1 ],
  [ -!1, (a), y, (-1*a) ],
  [ (-1*a), -!1, (a), y ] ]
gap> det(G);
!-3+!8*y+!-6*y^2+y^4
gap> g:=-3+8*x-6*x^2+x^4;
-3+8*x-6*x^2+x^4
gap> Factors(g);
[ -1+x, -1+x, -1+x, 3+x ]
gap> G;
[ [ y, (-1*a), -!1, (a) ],
  [ (a), y, (-1*a), -!1 ],
  [ -!1, (a), y, (-1*a) ],
  [ (-1*a), -!1, (a), y ] ]
gap> G[2]:=G[2]-a*G[1];
[ (a)+(-1*a)*y, -!1+y, !0, !0 ]
gap> G[3]:=G[3]+G[1];
[ -!1+y, !0, -!1+y, !0 ]
gap> G[4]:=G[4]-G[1]*y/a;
[ (-1*a)+(a)*y^2, -!1+y, (a)+(-1*a)*y,
  !0 ]
gap> G;
[ [ y, (-1*a), -!1, (a) ],
  [ (a)+(-1*a)*y, -!1+y, !0, !0 ],
  [ -!1+y, !0, -!1+y, !0 ],
  [ (-1*a)+(a)*y^2, -!1+y,
      (a)+(-1*a)*y, !0 ] ]
######################################################
##この部分、上と同様に誤り。固有多項式の-1倍が出ている。
#gap> H:=(-1)*a*G{[2,3,4]}{[1,2,3]};
#[ [ !1-y, (a)+(-1*a)*y, !0 ],
#  [ (a)+(-1*a)*y, !0, (a)+(-1*a)*y ],
#  [ -!1+y^2, (a)+(-1*a)*y, !1-y ] ]
#gap> det(H);
#!3+!-8*y+!6*y^2-y^4
######################################################
gap> det(G);
!-3+!8*y+!-6*y^2+y^4
gap> Factors(g);
[ -1+x, -1+x, -1+x, 3+x ]
gap> B1:=ShallowCopy(IdentityMat(4)-B);
[ [ 1, (-1*a), -1, (a) ],
  [ (a), 1, (-1*a), -1 ],
  [ -1, (a), 1, (-1*a) ],
  [ (-1*a), -1, (a), 1 ] ]
gap> B1[2]:=B1[2]-a*B1[1];
[ !0, !0, !0, !0 ]
gap> B1[3]:=B1[3]-(-1)*B1[1];
[ 0, !0, 0, !0 ]
gap> B1[4]:=B1[4]-(-1*a)*B1[1];
[ !0, !0, !0, !0 ]
gap> B1;
[ [ 1, (-1*a), -1, (a) ],
  [ !0, !0, !0, !0 ],
  [ 0, !0, 0, !0 ],
  [ !0, !0, !0, !0 ] ]
gap> y11:=[a,1,0,0];
[ (a), 1, 0, 0 ]
gap> B*y11;
[ (a), !1, !0, !0 ]
gap> y12:=[1,0,1,0];
[ 1, 0, 1, 0 ]
gap> B*y12;
[ !1, !0, !1, !0 ]
gap> y13:=[-a,0,0,1];
[ (-1*a), 0, 0, 1 ]
gap> B*y13;
[ (-1*a), !0, !0, !1 ]
gap> Factors(g);
[ -1+x, -1+x, -1+x, 3+x ]
gap> B3:=ShallowCopy(IdentityMat(4)*(-3)-B);
[ [ -3, (-1*a), -1, (a) ],
  [ (a), -3, (-1*a), -1 ],
  [ -1, (a), -3, (-1*a) ],
  [ (-1*a), -1, (a), -3 ] ]
gap> B3[3]:=B3[3]*(1/-1);
[ 1, (-1*a), 3, (a) ]
gap> B3;
[ [ -3, (-1*a), -1, (a) ],
  [ (a), -3, (-1*a), -1 ],
  [ 1, (-1*a), 3, (a) ],
  [ (-1*a), -1, (a), -3 ] ]
gap> B3[1]:=B3[1]-B3[3]*(-3);
[ 0, (-4*a), 8, (4*a) ]
gap> B3;
[ [ 0, (-4*a), 8, (4*a) ],
  [ (a), -3, (-1*a), -1 ],
  [ 1, (-1*a), 3, (a) ],
  [ (-1*a), -1, (a), -3 ] ]
gap> B3[2]:=B3[2]-B3[3]*(a);
[ !0, !-4, (-4*a), !0 ]
gap> B3;
[ [ 0, (-4*a), 8, (4*a) ],
  [ !0, !-4, (-4*a), !0 ],
  [ 1, (-1*a), 3, (a) ],
  [ (-1*a), -1, (a), -3 ] ]
gap> B3[4]:=B3[4]-B3[3]*(-1*a);
[ !0, !0, (4*a), !-4 ]
gap> B3;
[ [ 0, (-4*a), 8, (4*a) ],
  [ !0, !-4, (-4*a), !0 ],
  [ 1, (-1*a), 3, (a) ],
  [ !0, !0, (4*a), !-4 ] ]
gap> B3[2]:=B3[2]*(1/-4);
[ !0, !1, (a), !0 ]
gap> B3[4]:=B3[4]*(1/(4*a));
[ !0, !0, !1, (a) ]
gap> B3;
[ [ 0, (-4*a), 8, (4*a) ],
  [ !0, !1, (a), !0 ],
  [ 1, (-1*a), 3, (a) ],
  [ !0, !0, !1, (a) ] ]
gap> B3[1]:=B3[1]-B3[2]*(-4*a);
[ !0, !0, !4, (4*a) ]
gap> B3;
[ [ !0, !0, !4, (4*a) ],
  [ !0, !1, (a), !0 ],
  [ 1, (-1*a), 3, (a) ],
  [ !0, !0, !1, (a) ] ]
gap> B3[3]:=B3[3]-B3[2]*(-1*a);
[ !1, !0, !2, (a) ]
gap> B3[3]:=B3[3]-B3[2]*(-1*a);
[ !1, (a), !1, (a) ]
gap> B3;
[ [ !0, !0, !4, (4*a) ],
  [ !0, !1, (a), !0 ],
  [ !1, (a), !1, (a) ],
  [ !0, !0, !1, (a) ] ]
gap> B3[3]:=B3[3]-B3[2]*(1*a);
[ !1, !0, !2, (a) ]
gap> B3;
[ [ !0, !0, !4, (4*a) ],
  [ !0, !1, (a), !0 ],
  [ !1, !0, !2, (a) ],
  [ !0, !0, !1, (a) ] ]
gap> B3[1]:=B3[1]-B3[4]*(4);
[ !0, !0, !0, !0 ]
gap> B3[2]:=B3[2]-B3[4]*(a);
[ !0, !1, !0, !1 ]
gap> B3[3]:=B3[3]-B3[4]*(2);
[ !1, !0, !0, (-1*a) ]
gap> B3;
[ [ !0, !0, !0, !0 ],
  [ !0, !1, !0, !1 ],
  [ !1, !0, !0, (-1*a) ],
  [ !0, !0, !1, (a) ] ]
gap> B3{[3,2,4,1]};
[ [ !1, !0, !0, (-1*a) ],
  [ !0, !1, !0, !1 ],
  [ !0, !0, !1, (a) ],
  [ !0, !0, !0, !0 ] ]
gap> y3:=[a,-1,-a,1];
[ (a), -1, (-1*a), 1 ]
gap> B*y3;
[ (-3*a), !3, (3*a), !-3 ]
gap> y11;
[ (a), 1, 0, 0 ]
gap> y12;
[ 1, 0, 1, 0 ]
gap> y13;
[ (-1*a), 0, 0, 1 ]
gap> y3;
[ (a), -1, (-1*a), 1 ]
gap> Y13:=[[a,1,-a,a],
>          [1,0,0,-1],
>          [0,1,0,-a],
>          [0,0,1,1]];;
gap> Y13;
[ [ (a),  1, (-1*a),    (a) ],
  [  1,   0,     0,     -1 ],
  [  0,   1,     0,  (-1*a) ],
  [  0,   0,     1,      1 ] ]
gap> B*Y13;
[ [ (a), !1, (-1*a), (-3*a) ],
  [ !1,  !0,    !0,     !3 ],
  [ !0,  !1,    !0,   (3*a) ],
  [ !0,  !0,    !1,    !-3 ] ]

LAST 最初 前へ 次へ 最後 目次へ

目次へ 目次 前回へ 前回 次回へ 次回