示例#1
0
from sympy.utilities.lambdify import lambdify, implemented_function

print '\n\n'

# m_earth = 6e24 #kilograms
# m = m_earth
# rs = 8.87e-3
rs = 2.95e3

t, r, theta, phi, tau = gp.symbols('t r \\theta \phi \\tau')
coordinates = gp.Coordinates('\chi', [t, r, theta, phi])
# Metric2D = gp.diag(-(1-2*m/r), 1/(1-2*m/r), r**2, gp.sin(theta)*r**2)
Metric2D = gp.diag(-(1 - rs / r), 1 / (1 - rs / r), r**2, gp.sin(theta) * r**2)

gtensor = gp.MetricTensor('g', coordinates, Metric2D)
w = gp.Geodesic('w', gtensor, tau)

d2t = lambda a, b, c, d, e, f, g, h: (solve(w(1), Derivative(t(tau), tau, tau))
                                      [0].subs({
                                          t(tau): a,
                                          r(tau): b,
                                          theta(tau): c,
                                          phi(tau): d,
                                          Derivative(t(tau), tau): e,
                                          Derivative(r(tau), tau): f,
                                          Derivative(theta(tau), tau): g,
                                          Derivative(phi(tau), tau): h,
                                      }))
d2r = lambda a, b, c, d, e, f, g, h: (solve(w(2), Derivative(r(tau), tau, tau))
                                      [0].subs({
                                          t(tau): a,
示例#2
0
import matplotlib.pyplot
import sympy
from scipy.integrate import odeint
from sympy import lambdify
from sympy.abc import a,b,c,d
import sys
t,r,theta,phi,tau = gravipy.symbols('t r \\theta \phi \\tau')
c = gravipy.Coordinates('\chi', [t, r, theta, phi])

m = 5

Metric2D = gravipy.diag(-(1-2*m/r), 1/(1-2*m/r), r**2, r**2)

g = gravipy.MetricTensor('g', c, Metric2D)

w = gravipy.Geodesic('w', g, tau)


d2t = sympy.solve(w(1),sympy.Derivative(t(tau),tau,tau))[0].subs({sympy.Derivative(t(tau),tau):a,sympy.Derivative(r(tau),tau):b,sympy.Derivative(phi(tau),tau):c,sympy.Derivative(theta(tau),tau):d})
d2r = sympy.solve(w(2),sympy.Derivative(r(tau),tau,tau))[0].subs({sympy.Derivative(t(tau),tau):a,sympy.Derivative(r(tau),tau):b,sympy.Derivative(phi(tau),tau):c,sympy.Derivative(theta(tau),tau):d})
d2theta = sympy.solve(w(3),sympy.Derivative(theta(tau),tau,tau))[0].subs({sympy.Derivative(t(tau),tau):a,sympy.Derivative(r(tau),tau):b,sympy.Derivative(phi(tau),tau):c,sympy.Derivative(theta(tau),tau):d})
d2phi = sympy.solve(w(4),sympy.Derivative(phi(tau),tau,tau))[0].subs({sympy.Derivative(t(tau),tau):a,sympy.Derivative(r(tau),tau):b,sympy.Derivative(phi(tau),tau):c,sympy.Derivative(theta(tau),tau):d})

d2tf = lambdify((a,b,c,d,t(tau),r(tau),theta(tau),phi(tau)),d2t,modules="numpy")
d2rf = lambdify((a,b,c,d,t(tau),r(tau),theta(tau),phi(tau)),d2r,modules="numpy")
d2thetaf = lambdify((a,b,c,d,t(tau),r(tau),theta(tau),phi(tau)),d2theta,modules="numpy")
d2phif = lambdify((a,b,c,d,t(tau),r(tau),theta(tau),phi(tau)),d2phi,modules="numpy")


def geo(x, tau):
    '''