# Author: Frits Beukers # University of Utrecht, The Netherlands # e-mail f.beukers@uu.nl # # The function picfuchs computes the Picard-Fuchs equation of # the family of elliptic curves given by y^2=ax^3+bx^2+cx+d. # Here, a,b,c,d are rational functions of the parameter t. # The output is a list of three components. The first two are # rational functions c1,c2 such that L:=(d/dt)^2+c1(d/dt)+c2 is # the Picard-Fuchs operator. The third component is the rational # polynomial Q in x which satisfies L(dx/y)=d(Q/y^3). In this # computation we assume that (d/dt)x=0. # # As an example we can take the Legendre family: y^2=x(x-1)(x-t). # The command picfuchs(1,-t-1,t,0,t) yields the output # [(2t-1),1/4,x^4-x^2/2]/(t(t-1)). # This implies that # [t(t-1)(d/dt)^2+(2t-1)(d/dt)+1/4](dx/y)=d((x^4-x^2/2)/y^3) # # The function pfsystem computes the system of first order differential # equations satisfied by the periods of dx/y and xdx/y of y^2=ax^3+bx^2+cx+d. # # As an example take pfsystem(1,-t-1,t,0,t). We get the output # [-t,1,-t,t]/(2t(t-1)). This means that we have the Picard-Fuchs system # # 2t(t-1)dy1/dt=-ty1+y2 # 2t(t-1)dy2/dl=-ty1+ty2 picfuchs:=proc(a,b,c,d,t) local f,ft,ftt,fx,q,qx,q0,q1,q2,q3,q4,c1,c2,pf,eqn,sol,n; global x; f:=a*x^3+b*x^2+c*x+d; ft:=diff(f,t); ftt:=diff(ft,t); fx:=diff(f,x); q:=q0+q1*x+q2*x^2+q3*x^3+q4*x^4; qx:=diff(q,x); pf:=expand(-ftt*f/2+3*ft^2/4-c1*ft*f/2+c2*f^2+3*fx*q/2-f*qx); eqn:={seq(coeff(pf,x,n),n=0..6)}; sol:=solve(eqn,{q0,q1,q2,q3,q4,c1,c2}); RETURN(subs(op(sol),[c1,c2,q0+q1*x+q2*x^2+q3*x^3+q4*x^4])) end; pfsystem:=proc(a,b,c,d,t) local m11,m12,m21,m22,q0,q1,q2,q,qx,f,ft,fx,n,pf,eqn,sol,v; global x; f:=a*x^3+b*x^2+c*x+d; ft:=diff(f,t); fx:=diff(f,x); q:=q0+q1*x+q2*x^2; qx:=diff(q,x); pf:=expand(ft/2+m11*f+m12*x*f+qx*f-fx*q/2); eqn:={seq(coeff(pf,x,n),n=0..4)}; sol:=solve(eqn,{q0,q1,q2,m11,m12}); v:=[m11,m12,m21,m22]; v:=subs(sol,v); pf:=expand(x*ft/2+m21*f+m22*x*f+qx*f-fx*q/2); eqn:={seq(coeff(pf,x,n),n=0..4)}; sol:=solve(eqn,{q0,q1,q2,m21,m22}); v:=subs(sol,v); RETURN(v) end;