Utilizando el python
scipy
integradores con el script
from scipy.integrate import odeint
def odefunc(y,t):
F,dF,G,dG = y;
return [ dF, F**3+F*G**2, dG, 2*G*F**2 ]
y0 = [1., 0., 0., 1.]
sol = odeint(odefunc, y0, [0,np.pi/3],atol=1e-14, rtol=1e-13,mxstep=10000)
print "%.14f"%sol[-1,0]
da el valor $F(\pi/3)$ como
2.00000000000097
Otros programas informáticos con integradores numéricos deberían funcionar de forma similar.
O modificar a
x = np.linspace(0,1,11)*np.pi/3
sol = odeint(ode, y0, x,atol=1e-14, rtol=1e-13,mxstep=10000)
def E(y):
F,dF,G,dG = y;
return dF**2 + 0.5*dG**2 - 0.5*F**4 - (F*G)**2
for xx,y in zip(x,sol):
print "x=%.2f*pi/3, F(x)=%.14f, E(x)=%.14f"%(xx*3/np.pi, y[0], E(y))
para obtener el resultado
x=0.00*pi/3, F(x)=1.00000000000000, E(x)=0.00000000000000
x=0.10*pi/3, F(x)=1.00550827956352, E(x)=0.00000000000001
x=0.20*pi/3, F(x)=1.02234059486504, E(x)=0.00000000000002
x=0.30*pi/3, F(x)=1.05146222423829, E(x)=0.00000000000003
x=0.40*pi/3, F(x)=1.09463627850608, E(x)=0.00000000000005
x=0.50*pi/3, F(x)=1.15470053837930, E(x)=0.00000000000013
x=0.60*pi/3, F(x)=1.23606797749988, E(x)=0.00000000000047
x=0.70*pi/3, F(x)=1.34563272960657, E(x)=0.00000000000225
x=0.80*pi/3, F(x)=1.49447654986494, E(x)=0.00000000000307
x=0.90*pi/3, F(x)=1.70130161670461, E(x)=0.00000000000392
x=1.00*pi/3, F(x)=2.00000000000092, E(x)=0.00000000001329
donde la función de energía como cantidad teóricamente conservada indica el nivel de error del resultado numérico.