Здраствуйте. Задали задачку по алгебре, по теории групп: Найти порядки элементов в группе, в частности Sn, и группа матриц, состоящих из 0 и 1 причем 1-цы должны стоять по одной в каждой строке и столбце.
(Благодарю за помощь V.A.L. и Kitonum)
Вот есть 2 процедуры: 1-я генерация случайной матрицы, n-го порядка (в частности тут 5-го, состоящей из нулей и 1)
Код:
with(LinearAlgebra):
> r5:=rand(1..5):
> A:=ZeroMatrix(5,5):
> A:=convert(A,array):
> for i to 5 do A[i,r5()]:=1 od:
> A:=convert(A,matrix);
[1 0 0 0 0]
[ ]
[0 0 0 1 0]
[ ]
A := [0 0 0 0 1]
[ ]
[1 0 0 0 0]
[ ]
[0 0 0 1 0]
выдает чуть чуть не то что надо, а надо чтобы 1 была одна на строке и столбце и не пересекалась с другой единичкойкой, подскажите как это сделать?
И вот 2-е: как задать случайную подстановку чтобы она была n-й размерности(n выбирается сама) /*это мне нужно для подсчета степени этой подстановки*/.
Далее, я считаю порядок подстановки с помощью grouporder но он не всегда корректно работает.
Код:
grouporder(permgroup(5,{[[1,2,3],[4,5]]}));
и потом:
Код:
cyc:=proc(A) local i,B,n,d,r,S;n:=nops(A):B:=[]:S:={i$i=2..n}:
> r,i,d:=1,1,1:
> while S<>{} do
> if A[i]=d then B:=[op(B),[r]]:i:=op(1,S):r,d:=i,i
> else
> r:=r,A[i]:i:=A[i] fi :S:=S minus {i} od;
> B:=[op(B),[r]]: end:
grouporder - почему то считает не все перестановки,
например если использовать перестановку:
Код:
A:=[2,1,3,5,4];
А затем переводя ее с помощью
Код:
cyc(A);
получаем
Код:
[[1, 2], [3], [4, 5]]
и вот пакет выдает ошибку, как исправить непонимаю, с двумя циклами щитает корректно а уже с 3 нет(
Подскажите "чукче"
как исправить?
Код:
grouporder(permgroup(5,{(cyc(A))}));
выдает:
Код:
Error, (in permgroup) generators must represent products of disjoint cycles, but [[1, 2], [3], [4, 5]] does not