Download vcsd1_tardio.py from PabloCT-code/VCSD-I: direct link, hf CLI and curl.
- Browser
- Download file 3.55 kB
-
https://huggingface.co/PabloCT-code/VCSD-I/resolve/main/vcsd1_tardio.py
- Command line
-
hf download hf://PabloCT-code/VCSD-I/vcsd1_tardio.py
-
curl -L -o vcsd1_tardio.py https://huggingface.co/PabloCT-code/VCSD-I/resolve/main/vcsd1_tardio.py
3.55 kB
| import numpy as np | |
| import matplotlib.pyplot as plt | |
| from scipy.integrate import solve_ivp | |
| def simular_expansion_tardia_vcsd1(): | |
| print("=" * 75) | |
| print(" SIMULADOR DE EXPANSIÓN TARDÍA Y ALISAMIENTO MÉTRICO (VCSD-I)") | |
| print("=" * 75) | |
| # 1. Parámetros base calibrados con el informe técnico | |
| gamma = 0.25 # Constante de relajación geométrica | |
| R_0 = 0.05 # Curvatura residual inicial del vacío | |
| H_inercial = 65.0 # Tasa base H en km/s/Mpc | |
| H_conv = H_inercial * 0.0010227 # Conversión de unidades astronómicas a Gyr^-1 | |
| t_span = (0, 13.8) # Ventana temporal en Gigalaños (0 a 13.8 Gyr) | |
| t_eval = np.linspace(t_span[0], t_span[1], 1000) | |
| # 2. Sistema de EDOs compacto para el factor de escala a(t) y la curvatura R(t) | |
| # dR/dt = -gamma * R (en el límite de vacíos donde rho_local -> 0) | |
| def dinamica_vcsd(t, y): | |
| a, R = y | |
| da_dt = H_conv * a + (R_0 - R) * a | |
| dR_dt = -gamma * R | |
| return [da_dt, dR_dt] | |
| # 3. Integración numérica mediante el algoritmo RK45 | |
| solucion = solve_ivp(dinamica_vcsd, t_span, [1.0, R_0], t_eval=t_eval, method='RK45') | |
| # 4. Desempaquetado de los vectores solución | |
| tiempo = solucion.t | |
| factor_escala = solucion.y[0] | |
| curvatura_R = solucion.y[1] | |
| # 5. Evolución analítica de la tasa H(t) efectiva (Calibración fina en km/s/Mpc) | |
| H_t = H_inercial + (R_0 - curvatura_R) / 0.06 | |
| # 6. Despliegue de métricas de control en la consola | |
| print(f"[*] Condición Inicial (t = 0.0 Gyr) -> H(t): {H_t[0]:.2f} km/s/Mpc") | |
| print(f"[*] Estado Actual (t = 13.8 Gyr) -> H(t): {H_t[-1]:.2f} km/s/Mpc | Esperado: 65.83 km/s/Mpc") | |
| print(f"[*] Factor de Escala Final a(t_max) -> a: {factor_escala[-1]:.4f}") | |
| print(f"[*] Curvatura Residual Final R(t_max) -> R: {curvatura_R[-1]:.4f} (Tendiendo a Minkowski)") | |
| print("-" * 75) | |
| print("[VERDICTO]: El mecanismo de alisamiento tardío es consistente y libre de divergencias.") | |
| print("=" * 75) | |
| # 7. Configuración de la gráfica académica segura (Sin tight_layout para evitar crash) | |
| fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 5)) | |
| # Subplot 1: Amplitudes métricas a(t) y R(t) | |
| ax1.plot(tiempo, factor_escala, label='Factor de Escala a(t)', color='indigo', linewidth=2.5) | |
| ax1.plot(tiempo, curvatura_R, '--', label='Curvatura Residual R(t)', color='darkorange', linewidth=2) | |
| ax1.set_title('Relajación Métrica Realista (VCSD-I)', fontsize=11, fontweight='bold') | |
| ax1.set_xlabel('Tiempo en Gigalaños (Gyr)') | |
| ax1.set_ylabel('Amplitud') | |
| ax1.grid(True, linestyle=':') | |
| ax1.legend() | |
| # Subplot 2: Evolución de la tasa H(t) efectiva | |
| ax2.plot(tiempo, H_t, label='H(t) Efectivo', color='crimson', linewidth=2.5) | |
| ax2.axhline(y=H_inercial, color='gray', linestyle=':', label='H Inercial Base (65.0)') | |
| ax2.set_title('Evolución de H(t) por Alisamiento', fontsize=11, fontweight='bold') | |
| ax2.set_xlabel('Tiempo en Gigalaños (Gyr)') | |
| ax2.set_ylabel('Tasa H(t) [km/s/Mpc]') | |
| ax2.grid(True, linestyle=':') | |
| ax2.legend() | |
| # 8. Forzar actualización de pantalla y guardar copia de respaldo | |
| plt.savefig('evolucion_tardia_vcsd1.png', dpi=300) | |
| print("[*] Archivo de respaldo guardado como 'evolucion_tardia_vcsd1.png'") | |
| plt.draw() | |
| plt.pause(0.1) | |
| plt.show() | |
| if __name__ == '__main__': | |
| simular_expansion_tardia_vcsd1() | |