size:=4; P:=InitProgramme(size^2); X:=[[] : i in [1..size]]; for i in [1..size] do for j in [1..size] do X[i][j]:=P`expressions[(i-1)*size+j]; end for; end for; Ens:={i : i in [1..size]}; Perm:=Permutations(Ens); Sig:=Sym(size); somme,P:=Const(0, P); for p in Perm do tmp,P:=Const(Sign(Sig!p), P); for i in [1..size] do tmp,P:=Mul(tmp, X[i][p[i]],P); end for; somme,P:=Plus(somme, tmp, P); end for; /*----------------- pour tester ------------------- A:=[Random(10) : i in [1..size^2]]; M:=Matrix(Rationals(),size,size,A); Determinant(M); Eval(A, P); // list est une liste d'entiers telle que // G`expressions[list[i]] renvoie dP/dX_i G,list:=Gradient(P); // EvalSeq prend une liste d'indices (ici, list), // des valeurs d'evaluation (ici, A), et un programme (ici, G) // Evalue toutes les expressions de G, et renvoie les valeurs // correspondant aux indices donnes dans list. val:=EvalSeq(list, A, G); det:=val[1]; Remove(~val, 1); val:=[x/det : x in val]; I:=Matrix(Rationals(),size,size,val); I:=Transpose(I); I eq M^-1; ---------------- fin des tests ---------------- */