summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid A. Madore <david@procyon>2012-04-12 16:27:41 (GMT)
committerDavid A. Madore <david@procyon>2012-04-12 16:27:41 (GMT)
commit556abf1427f357dec75cb9e99e1bb7931cd34829 (patch)
tree0a639a36663c83e48e9781b90d2901ad8f487768
parentd8a12f9de39f05daf0ab1143e05406e57c77fef2 (diff)
downloadgalois-556abf1427f357dec75cb9e99e1bb7931cd34829.zip
galois-556abf1427f357dec75cb9e99e1bb7931cd34829.tar.gz
galois-556abf1427f357dec75cb9e99e1bb7931cd34829.tar.bz2
sageries: RĂ©solution par radicaux de l'Ă©quation x^5 - 5x + 12 = 0
-rw-r--r--divers/sageries/equation-de-degre-558
1 files changed, 58 insertions, 0 deletions
diff --git a/divers/sageries/equation-de-degre-5 b/divers/sageries/equation-de-degre-5
new file mode 100644
index 0000000..d542593
--- /dev/null
+++ b/divers/sageries/equation-de-degre-5
@@ -0,0 +1,58 @@
+R.<t> = QQ['t']
+f = t^5-5*t+12
+F.<zeta> = CyclotomicField(5)
+L.<u> = F.extension(t^2-10*t+1025)
+L0.<x0> = L.absolute_field()
+(from_L0, to_L0) = L0.structure()
+K.<v> = L0.extension(f)
+K0.<y0> = K.absolute_field()
+(from_K0, to_K0) = K0.structure()
+tmproots = [x for (x,_) in f.change_ring(K0).roots()]
+g = R(prod([t-(tmproots[i]+tmproots[j]) for i in range(5) for j in range(i)]))
+# g.factor()
+g1 = t^5 - 5*t^3 - 10*t^2 + 30*t - 36
+reorder = [[i for i in range(5) if tmproots[i] == to_K0(v)][0]]
+reorder += [[i for i in range(5) if g1(tmproots[reorder[len(reorder)-1]] + tmproots[i]) == 0 and not i in reorder][0]]
+reorder += [[i for i in range(5) if g1(tmproots[reorder[len(reorder)-1]] + tmproots[i]) == 0 and not i in reorder][0]]
+reorder += [[i for i in range(5) if g1(tmproots[reorder[len(reorder)-1]] + tmproots[i]) == 0 and not i in reorder][0]]
+reorder += [[i for i in range(5) if g1(tmproots[reorder[len(reorder)-1]] + tmproots[i]) == 0 and not i in reorder][0]]
+if sum([tmproots[reorder[i]]*tmproots[reorder[(i+1)%5]]^3 for i in range(5)]) != to_K0(to_L0(u)):
+ reorder = [reorder[i] for i in [0,4,3,2,1]]
+
+roots = [tmproots[i] for i in reorder]
+tmpzeta1 = to_K0(to_L0(zeta))
+tmpzeta = [tmpzeta1^i for i in range(5)]
+alpha = [sum(roots[i]*tmpzeta[(i*j)%5] for i in range(5)) for j in range(5)]
+alpha5 = [from_K0(alpha[i]^5).vector()[0] for i in range(5)]
+sqrt5 = 1+2*(zeta+zeta^-1)
+sqrtm10m2sqrt5 = 2*(zeta-zeta^-1)
+sqrtm10p2sqrt5 = 2*(zeta^2-zeta^-2)
+sqrtm10 = -1/2 + u/10
+sqrtm2 = sqrt5*sqrtm10/5
+sqrt25p5sqrt5 = -sqrtm10 * sqrtm10m2sqrt5 / 2
+sqrt25m5sqrt5 = -sqrtm10 * sqrtm10p2sqrt5 / 2
+nice_basis = [to_L0(x) for x in [1, sqrt5, sqrtm10m2sqrt5, sqrtm10p2sqrt5, sqrtm10, sqrtm2, sqrt25p5sqrt5, sqrt25m5sqrt5]]
+m = Matrix(QQ, 8, 8, [(QQ^8)((x0.coordinates_in_terms_of_powers())(x)) for x in nice_basis])
+minv = m.inverse()
+alpha5_on_x0_basis = [(QQ^8)((x0.coordinates_in_terms_of_powers())(x)) for x in alpha5]
+alpha5_on_nice_basis = [v * m.inverse() for v in alpha5_on_x0_basis]
+
+tmproots = [x for (x,_) in f.change_ring(QQbar).roots()]
+reorder = [0]
+reorder += [[i for i in range(5) if g1(tmproots[reorder[len(reorder)-1]] + tmproots[i]) == 0 and not i in reorder][0]]
+reorder += [[i for i in range(5) if g1(tmproots[reorder[len(reorder)-1]] + tmproots[i]) == 0 and not i in reorder][0]]
+reorder += [[i for i in range(5) if g1(tmproots[reorder[len(reorder)-1]] + tmproots[i]) == 0 and not i in reorder][0]]
+reorder += [[i for i in range(5) if g1(tmproots[reorder[len(reorder)-1]] + tmproots[i]) == 0 and not i in reorder][0]]
+if sum([tmproots[reorder[i]]*tmproots[reorder[(i+1)%5]]^3 for i in range(5)]) != QQbar(5+10*sqrt(-10)):
+ reorder = [reorder[i] for i in [0,4,3,2,1]]
+
+rootsQQbar = [tmproots[i] for i in reorder]
+symbolic_basis = [1, sqrt(5), sqrt(-10-2*sqrt(5)), sqrt(-10+2*sqrt(5)), sqrt(-10), sqrt(-2), sqrt(25+5*sqrt(5)), sqrt(25-5*sqrt(5))]
+symbolic_alpha5 = [sum([alpha5_on_nice_basis[i][j]*symbolic_basis[j] for j in range(8)]) for i in range(5)]
+zetaQQbar = QQbar(exp(2*I*pi/5))
+alphaQQbar = [sum(rootsQQbar[i]*zetaQQbar^((i*j)%5) for i in range(5)) for j in range(5)]
+zetab = [0]+[ZZ(floor(arg(CC(alphaQQbar[i]/QQbar(symbolic_alpha5[i]^(1/5))))/N(2*pi/5)+0.5)) for i in range(1,5)]
+
+symbolic_zetapow = [1, (-symbolic_basis[0]+symbolic_basis[1]+symbolic_basis[2])/4, (-symbolic_basis[0]-symbolic_basis[1]+symbolic_basis[3])/4, (-symbolic_basis[0]-symbolic_basis[1]-symbolic_basis[3])/4, (-symbolic_basis[0]+symbolic_basis[1]-symbolic_basis[2])/4]
+symbolic_alpha = [symbolic_zetapow[zetab[i]]*symbolic_alpha5[i]^(1/5) for i in range(5)]
+symbolic_roots = [sum([symbolic_zetapow[(zetab[i]+4*i*j)%5]*symbolic_alpha5[i]^(1/5) for i in range(5)])/5 for j in range(5)]