Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/GAP/pkg/corelg/gap/   (Algebra von RWTH Aachen Version 4.15.1©)  Datei vom 7.6.2024 mit Größe 2 kB image not shown  

SSL otherStuff.gi   Interaktion und
Portierbarkeitunbekannt

 
############################################################################
#
#  this file contains a few preliminary functions
#
#

#################################################
#Input:  nilpotent matrix
#Output: its Jordan NF and base change
#################################################

## jb := function (n)
## local m, i;
##    m := 0*IdentityMat(n);
##    for i in [1..n-1] do m[i][i+1] := 1; od;
##    return m;
## end;
## mydbm := function ( mats )
##     local  n, M, m, d;
##     n := Sum( mats, function ( m )
##             return Length( m[1] );
##         end );
##     M := NullMat( n, n );
##     n := 0;
##     for m  in mats  do
##         d := Length( m );
##         M{[ 1 .. d ] + n}{[ 1 .. d ] + n} := m;
##         n := n + d;
##     od;
##     return M;
## end;

## rjb := function(n)
## local part, gr, k,i;
##    part := Random(Partitions(n));
##    Print("took these part ",part,"\n");
##    gr   := mydbm(List(part,x->jb(x)));
##    repeat k := RandomMat(n,n); until not Determinant(k)=0;
##    return k*gr*k^-1;
## end;

## could use that for the two adjoint matrices of nilpotent elts
## (that is, two nilp matrices in sln). If the JNF has only even 
## blocks and the determinant of base change matrices are positive
## in one case, negative in the other, then the two elts are not
## conjugate
corelg.JNFofNilpotent2 := function(m)
local F, V, kern, rws, i, new, elts, exps, preim, toExp, bas, mm;

  Print("new version\n");
  F    := DefaultFieldOfMatrix(m);
  V    := VectorSpace(F,m^0);
  kern := Subspace(V,NullspaceMat(m));
  rws := [V];
  i   := 0;
  repeat 
     i   := i+1;
     new := Subspace(V,m^i);
     if not Dimension(new)=0 then Add(rws,new); fi;
  until Dimension(new)=0;
  rws := Reversed(rws);
  elts := List(BasisVectors(Basis(rws[1])),x->[x]);;
  exps := ListWithIdenticalEntries(Length(elts),0);
  if not ForAll(elts,x->x[1]*m=0*x[1]) then Error("1"); fi;
  for i in [2..Length(rws)] do
     mm    := List(BasisVectors(Basis(rws[i])),x->x*m);
     preim := List(elts,x->SolutionMat(mm,x[Length(x)])); #need preim in rws[i]
     preim := List(preim,x-> x*BasisVectors(Basis(rws[i])));
     toExp := List(elts,x->x[1]);
     new   := BasisVectors(Basis(Intersection(kern,rws[i])));
     new   := List(BaseSteinitzVectors(new,toExp).factorspace,x->[x]);
     for i in [1..Length(elts)] do Add(elts[i],preim[i]); od;
     elts  := Concatenation(elts,new);
     exps  := Concatenation(exps+1,ListWithIdenticalEntries(Length(new),0));
     if not ForAll(elts,x->x[1]*m=0*x[1]) then Error("1"); fi;
  od;
  SortParallel(exps,elts);
  bas := Concatenation(elts); 
  return [bas*m*bas^-1,Determinant(bas)];
 #return [bas,bas*m*bas^-1,exps];
end;
 


[ Verzeichnis aufwärts0.31unsichere Verbindung  Übersetzung europäischer Sprachen durch Browser  ]