/* Master Pro ISFA filiere CCS, 2007-2008 TP1 pour le cours de Reseaux Euclidiens et Applications Damien Stehle */ { Generate_random_1 (d, bnd) = local(B); B = matid(d); for (i=1, d, B[1,i] = random(bnd)); return (B); } { Generate_random_2 (d, bnd) = local(B); B = matid(d); for (i=1, d, for (j=1, d, B[i,j] = random(bnd))); return (B); } { Same_lattice (B1, B2) = local(B3); B3 = (B1^(-1)*B2); res = 1; for (i=1, matsize(B1)[1], for (j=1, matsize(B1)[1], res = res &(denominator(B3[i,j] == 1)); )); res = res & abs(matdet(B3))==1; res } { Shuffle_lattice (B, nb)= local(d); local(n); local(v); local(C); d = matsize(B)[2]; n = matsize(B)[1]; C = matrix (n, d); v = vector(n); for (i=1, n, for (j=1, d, C[i,j] = B[i,j])); for (s=1, nb, a= random (2); if (a==0, i = random(d)+1; j = random(d)+1; if (i!=j, for (k=1, n, v[k] = C[k,i]); for (k=1, n, C[k,i] = C[k,j]); for (k=1, n, C[k,j] = v[k]); ); ); if (a==1, i = random(d)+1; j = random(d)+1; if (i!=j, x = random(10); for (k=1, n, C[k,i] = C[k,i] + x * C[k,j]); ); ) ); C } { GSO(B) = local(G); local(d); local(mu); local(r); local(rdiag); d = matsize(B)[2]; mu = matid(d); r = matid (d); G = mattranspose(B) * B; for (i=1, d, for (j=1, i-1, r[i,j] = G[i,j]; for (k=1, j-1, r[i,j] -= mu[i,k] * r[j,k]); mu[i,j] =r[i,j]/r[j,j]; ); r[i,i] = G[i,i]; for (k=1, i-1, r[i,i] -= mu[i,k] * r[i,k]); mu[i,i] = r[i,i]; ); rdiag = vector(d); for (i = 1, d, rdiag[i] = r[i,i]); [mu,rdiag] } { GSO_fp(B) = local(d); local(mu); local(r); local(G); local(rdiag); d= matsize(B)[2]; mu = matid(d); r = matid (d); G = mattranspose(B) * B; for (i=1, d, for (j=1, i-1, r[i,j] = 1.0*G[i,j]; for (k=1, j-1, r[i,j] -= mu[i,k] * r[j,k]); mu[i,j] =r[i,j]/r[j,j]; ); r[i,i] = 1.0*G[i,i]; for (k=1, i-1, r[i,i] -= mu[i,k] * r[i,k]); mu[i,i] = r[i,i]; ); rdiag = vector(d); for (i = 1, d, rdiag[i] = r[i,i]); [mu,rdiag] } { err_rel_mat (B1, B2, eps) = local(maxi); maxi= 0.0; local n = matsize(B1)[1]; local d = matsize(B1)[2]; for (i=1, n, for (j=1, d, if (abs(B1[i,j])>=eps, maxi = max (maxi, abs((B1[i,j]-B2[i,j])/B1[i,j])) ) ) ); maxi }