Exemplo baseado nesse paper
reset()
%display latex
var('m', domain='positive')
M = Manifold(4, 'M', structure='Lorentzian')
SD.<t, r, th, ph> = M.chart(r"t r:(0,+oo) th:(0,pi):\theta ph:(0,2*pi):\phi:periodic")
g = M.metric()
g[0, 0] = - (1 - 2*m/r)
g[1, 1] = 1/(1 - 2*m/r)
g[2, 2] = r^2
g[3, 3] = r^2*sin(th)^2
g.display()
%time nabla = g.connection()
CPU times: user 5.25 s, sys: 160 ms, total: 5.41 s Wall time: 4.51 s
var ('omega ,k')
R = M.scalar_field(function('R')(r))
S = M.scalar_field(function('S')(th))
Phi = exp(-I*omega*t)*exp(I*k*ph)*R*S
Phi.set_name(name='Phi', latex_name=r'\Phi')
Phi.display()
%time KG = nabla(nabla(Phi).up(g)).trace()
CPU times: user 11 s, sys: 175 ms, total: 11.1 s Wall time: 7.71 s
KG.display()
KG = (KG/Phi).expr()
KG.expand()
KG = KG*(2*m*r^2-r^3)/(2*m-r)
KG.expand().combine()
termos = KG.expand().combine().operands();termos
termos[1]
gam = var('gamma')
KG_radial = sum(termos[:2]).canonicalize_radical() == gam
KG_angular = sum(termos[2:]).canonicalize_radical() == gam
KG_radial
KG_radial = KG_radial*(2*m-r)*R.expr()-gam*(2*m-r)*R.expr();KG_radial
KG_angular
desolve(KG_radial, R.expr(), ivar=r, algorithm='fricas')
DR = function('DR')(r)
KG_rad = [diff(R.expr(),r)-DR==0,KG_radial.subs({diff(R.expr(),r):DR(r), diff(R.expr(),r,2):diff(DR(r),r)})]
KG_rad
KG_rad[1] = KG_rad[1].subs(m=0.1, omega=.2, gamma=2.0);KG_rad[1]
KG_rad[0] = solve(KG_rad[0],diff(R.expr(),r))[0].right()
KG_rad[1] = solve(KG_rad[1],diff(DR(r),r))[0].right()
KG_rad
var('x,y')
KG_rad[0] = KG_rad[0].subs({DR(r):y})
KG_rad[1] = KG_rad[1].subs({DR(r):y, R.expr():x})
KG_rad
radsol = desolve_system_rk4(KG_rad, [x,y], ics =[0.3 ,1 ,0.5], ivar=r, end_points=100, step=0.01)
len(radsol)
points =[[ i , j ] for i ,j,k in radsol ]
list_plot(points, axes_labels =['$r$' , '$R$'], color='darkred', legend_label = 'Solução numérica',
gridlines=True, frame=True, axes=False)
pl = []
for om in srange(0.1,2.6,.3):
KG_rad = [diff(R.expr(),r)-DR==0,KG_radial.subs({diff(R.expr(),r):DR(r), diff(R.expr(),r,2):diff(DR(r),r)})]
KG_rad[0] = solve(KG_rad[0],diff(R.expr(),r))[0].right().subs({DR(r):y})
KG_rad[1] = solve(KG_rad[1].subs(m=0.1, omega=om, gamma=2.0),diff(DR(r),r))[0].right().subs({DR(r):y, R.expr():x})
radsol = desolve_system_rk4 (KG_rad, [x,y], ics =[0.3 ,1 ,0.5], ivar=r, end_points=100, step=0.01)
pl.append(list_plot([[i,j] for i,j,k in radsol], axes_labels =['$r$' , '$R$'], color='darkred',
legend_label = r'$\omega='+str(om.n(digits=3))+'$', gridlines=True, frame=True, axes=False))
ga = graphics_array(pl, nrows=3)
ga.show(figsize=[15,12])