Formación de agujeros negros: equilibrio hidrostático, colapso gravitacional y horizontes

Esta lección autocontenida explica cómo se forman los agujeros negros desde la Relatividad General y la astrofísica de objetos compactos. Recorremos las ecuaciones de Einstein, el equilibrio hidrostático relativista (TOV), el teorema de Buchdahl, el colapso de Oppenheimer–Snyder, superficies atrapadas y horizontes.

— Incluye heurística, demostraciones, ejemplos numéricos y código en Python

Introducción y Motivación

Un agujero negro aparece cuando la presión y los efectos cuántico-degenerativos ya no bastan para sostener una masa contra su propia gravedad, creando una región de la que ni la luz puede escapar. Este fenómeno surge en:

  • Colapso de estrellas masivas: Cuando el combustible nuclear se agota
  • Fusiones de objetos compactos: Sistemas binarios en espiral
  • Colapso directo de gas primordial: En el universo temprano
  • Escenarios primordiales: Fluctuaciones de densidad extremas

Comprender su formación exige combinar geometría del espacio-tiempo, materia relativista e invariantes causales.

Mapa Conceptual Mínimo

Definición: Variedad y Métrica

El espacio-tiempo es una variedad de 4D con métrica de firma \((-,+,+,+)\) denotada \(g_{\mu\nu}\). La curvatura efectiva \(G_{\mu\nu}\) responde al tensor energía–impulso \(T_{\mu\nu}\) por las ecuaciones de Einstein:

\[ G_{\mu\nu} \;=\; \frac{8\pi G}{c^4}\, T_{\mu\nu} \]

Definición: Simetría Esférica Estática

Línea de universo con métrica tipo Schwarzschild. El radio de Schwarzschild es:

\[ r_s = \frac{2GM}{c^2} \]

Ecuaciones TOV (Tolman-Oppenheimer-Volkoff)

Para fluidos perfectos, el equilibrio de una estrella isotrópica satisface las ecuaciones TOV con presión \(p\), densidad \(\rho\), y masa interior \(m(r)\):

\[ \begin{aligned} \frac{dp}{dr} &= -\frac{G\big(\rho c^2 + p\big)\big(m(r)c^2 + 4\pi r^3 p\big)}{c^4\, r\big(r – 2G m(r)/c^2\big)},\\[4pt] \frac{dm}{dr} &= 4\pi r^2 \rho. \end{aligned} \]

Definición: Superficie Atrapada

Una superficie atrapada es una 2–superficie cerrada en la que las expansiones de los rayos de luz hacia el futuro, tanto salientes como entrantes, son negativas: \(\theta_{(\ell)}<0\) y \(\theta_{(n)}<0\).

Interpretación física: Toda luz emitida hacia fuera sigue convergiendo; el “exterior” está causalmente hacia dentro. En colapso gravitacional, la aparición de tales superficies señala la formación de un horizonte cercano.

Análisis Preliminar: De la Heurística a lo Formal

Intuición Física

Si una masa \(M\) queda comprimida en un radio \(R\) comparable con \(r_s=2GM/c^2\), los conos de luz se inclinan hacia el interior. Para \(R\le r_s\), la salida causal se bloquea.

En equilibrio, la presión interna debe satisfacer las ecuaciones TOV. Si no existe solución físicamente aceptable por debajo de cierto radio, el sistema no puede sostenerse y colapsa.

💡

Concepto Clave

Un resultado fundamental es la cota de Buchdahl: \(2GM/(Rc^2) < 8/9\) para estrellas estáticas isotrópicas con densidad no creciente.

Teorema de Buchdahl

Sea una estrella estática, esférica, con presión isotrópica, densidad \(\rho(r)\) no creciente y materia que satisface \(p\ge 0\), \(\rho\ge 0\). Entonces su compacidad satisface:

\[ \frac{2GM}{Rc^2} \;<\; \frac{8}{9} \]

En particular, \(R > \tfrac{9}{8}\, r_s\).

Demostración: Sea \(u(r)=Gm(r)/(rc^2)\). Con \(\rho’ \le 0\), la masa interior satisface \(m(r)\le(4\pi/3)\rho(0) r^3\).

Del sistema TOV y las ecuaciones de campo estáticas, se obtiene para \(e^{\nu/2}\) la desigualdad de Buchdahl:

\[ \frac{d^2}{dr^2}\big(e^{\nu/2}\big) \le 0 \]

La concavidad implica que \(e^{\nu/2}\) está por encima del interpolante lineal entre centro y superficie. Combinando con las condiciones de contorno \(p(R)=0\) y continuidad con el exterior de Schwarzschild, resulta la cota:

\[ \frac{2GM}{Rc^2} \;<\; \frac{8}{9} \]

Si la compacidad igualara \(8/9\), la presión central divergiría, contradiciendo \(p\) finita bajo las hipótesis.

Corolario: Límite de Configuraciones Estáticas

Ninguna configuración estática esférica, isotrópica y con densidad no creciente puede alcanzar \(R \le \tfrac{9}{8} r_s\). Al forzar \(R\) por debajo de ese umbral, el sistema pierde soporte hidrostático y progresa al colapso, formándose superficies atrapadas.

Colapso Oppenheimer–Snyder: Polvo Homogéneo

El modelo OS considera una esfera de polvo homogéneo en caída libre. El interior es FRW cerrado y el exterior, Schwarzschild. La superficie colapsa en tiempo propio finito y se forma un horizonte antes de la singularidad.

Lema: Tiempo Propio de Colapso OS

Para una esfera homogénea de radio inicial \(R_0\) y masa \(M\), el tiempo propio del material desde el reposo hasta la singularidad es:

\[ \tau_{\text{colapso}} \;=\; \frac{\pi R_0^{3/2}}{2\sqrt{2GM}} \]

Demostración: El interior se describe con FRW cerrado:

\[ ds^2=-c^2 d\tau^2 + a(\tau)^2\left[\frac{dr^2}{1-r^2}+r^2 d\Omega^2\right] \]

Con polvo \(p=0\) y \(a(\eta)=\tfrac{a_{\max}}{2}(1+\cos\eta)\), se tiene:

\[ d\tau=\tfrac{a_{\max}}{2c}(1+\cos\eta)\,d\eta \]

Ajustando la constante por \(a(0)=1\) y emparejando en la frontera con Schwarzschild, se integra \(\eta:0\to\pi\), obteniendo la expresión citada.

Horizontes, Atrapamiento y Censura Cósmica

La ecuación de Raychaudhuri para congruencias nulas con la condición de energía nula implica focos en tiempo afín finito, favoreciendo la formación de superficies atrapadas.

⚠️

Conceptos Avanzados

Los teoremas de singularidad de Hawking–Penrose establecen que, bajo condiciones globales razonables, el colapso lleva a geodésicas incompletas. La distinción entre horizonte aparente (local) y horizonte de eventos (global) es crucial.

Canales de Formación en Astrofísica

Canal de Formación Mecanismo Masa Típica Escala de Tiempo
Colapso de núcleo Estrellas \( \gtrsim 20\,M_\odot\) \(3-50\,M_\odot\) Microsegundos
Fusiones NS–NS Sistemas binarios \(2-5\,M_\odot\) Milisegundos
Colapso directo Gas primordial \(10^4-10^6\,M_\odot\) \(10^5-10^6\) años
Colapso crítico Choptuik scaling \(M_{\rm BH}\propto (p-p_*)^\gamma\) Variable

Ejemplos Escalonados

Ejemplo 1 (Básico): Radio de Schwarzschild

Planteamiento: Para \(M=10\,M_\odot\), calcula \(r_s\) y la compacidad de una esfera con \(R=30\ \text{km}\).

  1. Cálculo de \(r_s\):
\[ r_s=\frac{2GM}{c^2} \approx 2\times (6.674\times10^{-11})\times (10\times 1.989\times10^{30})/ (299792458)^2 \approx 29.5\ \text{km} \]
  1. Compacidad:
\[ \frac{2GM}{Rc^2}=\frac{r_s}{R}\approx \frac{29.5}{30}\approx 0.983 \]

Conclusión: Superficie muy próxima al atrapamiento. Por encima de \(r_s\) aún no hay horizonte; al cruzar \(R=r_s\) se forma.

Ejemplo 2 (Intermedio): Cota de Buchdahl

Planteamiento: Para una estrella isotrópica con \(M=2\,M_\odot\), ¿cuál es el radio mínimo permitido por Buchdahl?

  1. Radio de Schwarzschild:
\[ r_s=2GM/c^2 \approx 2.95\times 2\ \text{km} = 5.9\ \text{km} \]
  1. Límite de Buchdahl:
\[ R>\tfrac{9}{8}r_s \approx 6.64\ \text{km} \]
  1. Verificación:
\[ \frac{2GM}{Rc^2}=\frac{r_s}{R}<\frac{8}{9} \]

Comentario: Un radio medido por debajo de ese umbral sería incompatible con equilibrio estático isotrópico → sugiere colapso o anisotropías/rotación significativas.

Recetas de Procedimiento

  1. Evaluar riesgo de colapso: Calcular \(\mathcal{C}=2GM/(Rc^2)\). Si \(\mathcal{C}\gtrsim 1\), el atrapamiento es inminente.
  2. Integrar TOV: Con EoS dada \(p(\rho)\), elegir \(\rho_c\), integrar desde \(r=0\) hasta \(p=0\).
  3. Detección de horizonte aparente: Verificar \(1-2Gm(r)/(rc^2)=0\).
  4. Modelo OS: Usar el lema para el tiempo propio de colapso.

Código en Python (Reproducible)

Los siguientes fragmentos implementan constantes, un integrador TOV con ecuación de estado politrópica, el cálculo de compacidad y un modelo paramétrico OS.

Constantes y Utilidades


import numpy as np

# Constantes SI
G  = 6.67430e-11  # Constante gravitacional
c  = 2.99792458e8  # Velocidad de la luz
Ms = 1.98847e30   # Masa solar
km = 1e3          # Kilómetro en metros

def r_schwarzschild(M):
    """Calcula el radio de Schwarzschild para una masa M"""
    return 2*G*M/c**2

def compacidad(M, R):
    """Calcula la compacidad adimensional 2GM/(Rc²)"""
    return 2*G*M/(R*c**2)

def format_km(x):
    """Utilidad de impresión para convertir metros a km"""
    return f"{x/km:.3f} km"

# Ejemplo de uso
M_ejemplo = 10 * Ms
print(f"Radio de Schwarzschild: {format_km(r_schwarzschild(M_ejemplo))}")
print(f"Compacidad para R=30km: {compacidad(M_ejemplo, 30*km):.3f}")
    

Integración TOV con EoS Politrópica


from math import isfinite
from dataclasses import dataclass

@dataclass
class TOVResult:
    """Resultado de la integración TOV"""
    radius: float
    mass: float
    profiles: dict

def tov_rhs(r, y, K, gamma):
    """
    Lado derecho del sistema TOV para EoS politrópica p = K*ρ^γ
    
    Args:
        r: Radio coordenada
        y: [m(r), p(r)] - masa y presión
        K: Constante politrópica
        gamma: Índice politrópico
    
    Returns:
        [dm/dr, dp/dr]
    """
    m, p = y
    if p <= 0:  # Condición de vacío
        return np.array([0.0, 0.0])
    
    # EoS: p = K * rho^gamma => rho = (p/K)^(1/gamma)
    rho = (p / K) ** (1.0/gamma)
    
    # Denominador de la ecuación TOV
    denom = r * (r - 2*G*m/c**2)
    
    # Ecuaciones TOV
    dpdr = -G * (rho*c**2 + p) * (m*c**2 + 4*np.pi*r**3*p) / (c**4 * denom)
    dmdr = 4*np.pi*r**2 * rho
    
    return np.array([dmdr, dpdr])

def integrate_tov(r0, p_c, K, gamma, dr=5.0, rmax=5e6):
    """
    Integra las ecuaciones TOV usando Runge-Kutta de 4º orden
    
    Args:
        r0: Radio inicial (pequeño, ~1m)
        p_c: Presión central
        K, gamma: Parámetros de la EoS
        dr: Paso de integración
        rmax: Radio máximo
    
    Returns:
        TOVResult con radio, masa y perfiles
    """
    r, m, p = r0, 0.0, p_c
    rs, ms, ps, rlist = [], [], [], []
    
    while p > 0 and r < rmax:
        y = np.array([m, p])
        
        # Runge-Kutta 4
        k1 = tov_rhs(r, y, K, gamma)
        k2 = tov_rhs(r + dr/2, y + dr*k1/2, K, gamma)
        k3 = tov_rhs(r + dr/2, y + dr*k2/2, K, gamma)
        k4 = tov_rhs(r + dr, y + dr*k3, K, gamma)
        
        y_next = y + (dr/6)*(k1 + 2*k2 + 2*k3 + k4)
        m, p = float(y_next[0]), float(y_next[1])
        r += dr
        
        if not (isfinite(m) and isfinite(p)):
            break
            
        rs.append(r)
        ms.append(m)
        ps.append(max(p, 0.0))
        rlist.append(r)
        
        # Criterio de horizonte aparente (diagnóstico)
        if r - 2*G*m/c**2 <= 0:
            print(f"¡Horizonte aparente detectado en r = {format_km(r)}!")
            break
    
    R, M = r, m
    return TOVResult(
        radius=R, 
        mass=M, 
        profiles={
            "r": np.array(rlist),
            "m": np.array(ms),
            "p": np.array(ps)
        }
    )
    

Diagnóstico de Buchdahl y Análisis


def diagnostico_buchdahl(M, R):
    """
    Realiza diagnóstico completo de compacidad y límites físicos
    
    Args:
        M: Masa en kg
        R: Radio en metros
    
    Returns:
        dict con análisis completo
    """
    C = compacidad(M, R)
    r_s = r_schwarzschild(M)
    buchdahl_limit = 8.0/9.0
    min_radius_buchdahl = (9.0/8.0) * r_s
    
    return {
        "compacidad": C,
        "radio_schwarzschild_km": format_km(r_s),
        "criterio_buchdahl": C < buchdahl_limit,
        "limite_buchdahl": buchdahl_limit,
        "radio_minimo_buchdahl_km": format_km(min_radius_buchdahl),
        "horizonte_formado": R <= r_s,
        "fraccion_schwarzschild": R / r_s,
        "presion_central_diverge": C >= buchdahl_limit,
        "status": "ESTABLE" if C < buchdahl_limit else "COLAPSO INMINENTE"
    }

# Ejemplo: Estrella de neutrones típica
M_ns = 1.4 * Ms  # Masa de Chandrasekhar
R_ns = 12.0 * km  # Radio típico

resultado = diagnostico_buchdahl(M_ns, R_ns)
print("=== DIAGNÓSTICO DE ESTRELLA DE NEUTRONES ===")
for key, value in resultado.items():
    print(f"{key}: {value}")
    

Modelo de Colapso Oppenheimer-Snyder


def tiempo_colapso_OS(R0, M):
    """
    Calcula el tiempo propio de colapso en el modelo OS
    
    Args:
        R0: Radio inicial en metros
        M: Masa total en kg
    
    Returns:
        Tiempo de colapso en segundos
    """
    return np.pi * R0**1.5 / (2.0 * np.sqrt(2*G*M))

def analisis_colapso_completo(R0, M):
    """Análisis completo del colapso OS"""
    tau_colapso = tiempo_colapso_OS(R0, M)
    r_s = r_schwarzschild(M)
    tiempo_luz = R0 / c
    
    return {
        "radio_inicial_km": format_km(R0),
        "masa_masas_solares": M / Ms,
        "tiempo_colapso_s": tau_colapso,
        "tiempo_colapso_ms": tau_colapso * 1000,
        "tiempo_luz_s": tiempo_luz,
        "ratio_colapso_luz": tau_colapso / tiempo_luz,
        "radio_schwarzschild_km": format_km(r_s),
        "compacidad_inicial": compacidad(M, R0)
    }

# Ejemplo: Estrella masiva pre-colapso
R0_estrella = 1e7  # 10,000 km
M_estrella = 20 * Ms

resultado_colapso = analisis_colapso_completo(R0_estrella, M_estrella)
print("\n=== ANÁLISIS DE COLAPSO OS ===")
for key, value in resultado_colapso.items():
    print(f"{key}: {value}")
    

Código Reproducible

Todos los fragmentos pueden ejecutarse en un entorno científico estándar (NumPy/SciPy/Matplotlib). El código incluye documentación completa y manejo de errores.

Ejemplo Reproducible: Curva Masa-Radio

Ejemplo Avanzado: Curva M-R para Politropo

Objetivo: Generar la curva masa–radio para un politropo \(\gamma=2\) y localizar el límite TOV.


import matplotlib.pyplot as plt

def curva_mr_politropo(K, gamma, rho_c_list, dr=5.0):
    """
    Genera curva masa-radio para politropo dado
    
    Args:
        K: Constante politrópica
        gamma: Índice politrópico  
        rho_c_list: Lista de densidades centrales
        dr: Paso de integración
    
    Returns:
        Array de (masa, radio) en unidades SI
    """
    MR = []
    for rho_c in rho_c_list:
        p_c = K * rho_c**gamma
        try:
            res = integrate_tov(1.0, p_c, K, gamma, dr=dr)
            MR.append((res.mass, res.radius))
        except:
            continue  # Saltar configuraciones problemáticas
    
    return np.array(MR)

# Parámetros del politropo
K = 1e5  # Constante politrópica (unidades SI)
gamma = 2.0  # Índice politrópico

# Barrido de densidades centrales
rho_c_min = 5e16  # kg/m³
rho_c_max = 2e18  # kg/m³
n_points = 50

rho_c_list = np.logspace(np.log10(rho_c_min), np.log10(rho_c_max), n_points)

# Generar curva M-R
print("Generando curva masa-radio...")
MR_data = curva_mr_politropo(K, gamma, rho_c_list, dr=10.0)

if len(MR_data) > 0:
    masas = MR_data[:, 0] / Ms  # En masas solares
    radios = MR_data[:, 1] / km  # En kilómetros
    
    # Encontrar máximo (límite TOV)
    idx_max = np.argmax(masas)
    M_max = masas[idx_max]
    R_max = radios[idx_max]
    
    print(f"Límite TOV encontrado:")
    print(f"M_max = {M_max:.2f} masas solares")
    print(f"R_max = {R_max:.1f} km")
    print(f"Compacidad máxima = {compacidad(M_max*Ms, R_max*km):.3f}")
    
    # Verificar Buchdahl para cada punto
    for i, (M, R) in enumerate(zip(masas, radios)):
        C = compacidad(M*Ms, R*km)
        if C >= 8.0/9.0:
            print(f"¡Violación de Buchdahl en punto {i}: C = {C:.3f}!")
            break
else:
    print("No se pudieron generar datos válidos")
      

Resultado esperado: El pico de \(M\) delimita el tránsito a colapso. Por encima del máximo, el equilibrio estático falla y progresa hacia agujero negro.

Errores Frecuentes y Cómo Evitarlos

⚠️

Errores Conceptuales Comunes

  • Confundir horizontes: Aparente (local) vs. eventos (global)
  • Aplicar Buchdahl sin verificar: Requiere isotropía y \(\rho'\leq 0\)
  • Usar \(r_s\) como radio físico: Es un invariante geométrico
  • Ignorar estabilidad: Analizar el signo de \(dM/d\rho_c\)
  • Inconsistencias de unidades: Homogeneizar SI o geométricas

Mini-Ejercicios Propuestos

  1. Demuestra que si \(p=0\) en el interior, no hay equilibrio a presión nula para \(\rho>0\).
  2. Para \(M=1.4\,M_\odot\), encuentra el rango de radios permitido por Buchdahl.
  3. Estima \(\tau_{\text{colapso}}\) para \(M=5\,M_\odot\) y \(R_0=10^7\ \text{m}\).
  4. Implementa detección de horizonte aparente: primer \(r\) con \(1-2Gm/(rc^2)=0\).
  5. Explica por qué superficies atrapadas bloquean extensión estática.
Mostrar Soluciones

Solución 1: Equilibrio con Presión Nula

De las ecuaciones TOV, si \(p\equiv 0\) entonces \(dp/dr=0\). La primera ecuación implica:

\[ \frac{(\rho c^2)(m c^2)}{c^4 r(r-2Gm/c^2)} = 0 \]

Con \(\rho>0\) y \(r>2Gm/c^2\), solo puede cumplirse si \(m=0\), lo que fuerza \(\rho=0\). Por tanto, no hay equilibrio con \(p=0\) y \(\rho>0\).

Solución 2: Límite para \(M=1.4\,M_\odot\)

Radio de Schwarzschild: \(r_s=2.95\times 1.4 \approx 4.13\ \text{km}\)

Límite de Buchdahl: \(R>\frac{9}{8}r_s\approx 4.65\ \text{km}\)

Para \(R=12\ \text{km}\): \(\frac{2GM}{Rc^2}\approx 0.344 < \frac{8}{9}\) ✓

Solución 3: Tiempo de Colapso OS

Con \(M=5M_\odot\) y \(R_0=10^7\ \text{m}\):

\[ \tau = \frac{\pi (10^7)^{3/2}}{2\sqrt{2G \cdot 5M_\odot}} \approx 0.8\ \text{s} \]

Tiempo de luz: \(R_0/c \approx 0.033\ \text{s}\). Ratio: \(\tau/(R_0/c) \approx 24\)

Fórmulas de Referencia

Concepto Fórmula Unidades SI
Radio de Schwarzschild \(r_s=2GM/c^2\) metros
Compacidad \(\mathcal{C}=2GM/(Rc^2)\) adimensional
Raychaudhuri (nula) \(\frac{d\theta}{d\lambda}=-\frac{1}{2}\theta^2-\sigma^2-R_{\mu\nu}k^\mu k^\nu\) \(s^{-2}\)
Kerr (horizonte) \(r_+=\frac{GM}{c^2}+\sqrt{(GM/c^2)^2-a^2}\) metros

Conclusión

La formación de un agujero negro combina tres elementos fundamentales:

  1. Límite de equilibrio hidrostático (TOV) y su cota geométrica (Buchdahl)
  2. Dinámica de colapso (OS como modelo canónico)
  3. Criterios locales de atrapamiento y horizontes

El patrón general es claro: al crecer la compacidad y fallar la presión de sostén, la geometría obliga a focos nulos y a la aparición de superficies atrapadas.

Desde aquí se conectan extensiones naturales: rotación (Kerr), anisotropías, acreción y colapso crítico. Los fragmentos de Python permiten reproducir curvas M–R y tiempos de colapso, cerrando el ciclo teoría–cálculo–verificación.

🎯

Aprendizaje Completado

Has dominado los conceptos fundamentales de la formación de agujeros negros, desde la física básica hasta implementaciones computacionales. El material incluye teoría rigurosa, ejemplos prácticos y código reproducible.