File size: 3,790 Bytes
311ef24
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
import numpy as np
import matplotlib.pyplot as plt

# 1. Rango multipolar completo
multipolos = np.arange(2, 3001)

# 2. Parámetros base calibrados del modelo VCSD-I
A_base = 3200.0
l_acustico = 220.0
damping_silk = 450.0
alpha_gradiente = 0.35
beta_vorticidad = 0.18

# 3. Fase híbrida adaptativa (Euler-Bessel)
nu = (1.0 - beta_vorticidad) / 2.0
desfase_asintotico = (nu * np.pi) / 2.0
factor_transicion = 1.0 / (1.0 + np.exp(-(multipolos - 1000) / 200))

fase_baja_frec = multipolos * (np.pi / l_acustico) + (beta_vorticidad * np.log(multipolos))
fase_alta_frec = multipolos * (np.pi / l_acustico) + desfase_asintotico
fase_efectiva = (1.0 - factor_transicion) * fase_baja_frec + factor_transicion * fase_alta_frec
oscilacion_acustica = np.cos(fase_efectiva)**2

# 4. Envolventes de potencia y confinamiento geométrico
modulacion_pozo = 1.0 + alpha_gradiente * np.sin(multipolos * (np.pi / (2.0 * l_acustico)))
filtro_atenuacion = np.exp(- (multipolos / damping_silk)**(1.5 - beta_vorticidad))

# Espectro simétrico base (isótropo)
Cl_isotropo = A_base * oscilacion_acustica * modulacion_pozo * filtro_atenuacion

# 5. Inyección de la anomalía del Punto Frío (Efecto Sachs-Wolfe Integrado asimétrico)
efecto_isw_asimetrico = -70.0 * np.exp(-((multipolos - 5) / 8)**2)

# Espectro neto con la perturbación regional de Eridanus
Cl_anomalo = Cl_isotropo + efecto_isw_asimetrico * (multipolos * (multipolos + 1) / (2 * np.pi)) * 0.05
Cl_anomalo = np.clip(Cl_anomalo, 0, None)

# 6. Buscar crestas reales (Picos reales desplazados por el desfase logarítmico)
idx_pico1 = np.argmax(Cl_anomalo[100:300]) + 100
idx_pico2 = np.argmax(Cl_anomalo[400:650]) + 400
idx_pico3 = np.argmax(Cl_anomalo[650:950]) + 650

# 7. Despliegue de resultados cuantitativos en consola
print("\n" + "=" * 75)
print("   AUDITORÍA CORREGIDA DE HITOS ACÚSTICOS DESFASADOS (VCSD-I)")
print("=" * 75)
print(f"[*] 1º Pico Real Encontrado (\u2113 = {idx_pico1+2}) : {Cl_anomalo[idx_pico1]:.2f} \u03bcK\u00b2 | Esperado: ~2814 \u03bcK\u00b2")
print(f"[*] 2º Pico Real Encontrado (\u2113 = {idx_pico2+2}) : {Cl_anomalo[idx_pico2]:.2f} \u03bcK\u00b2 | Esperado: ~1142 \u03bcK\u00b2")
print(f"[*] 3º Pico Real Encontrado (\u2113 = {idx_pico3+2}) : {Cl_anomalo[idx_pico3]:.2f} \u03bcK\u00b2 | Esperado: ~1094 \u03bcK\u00b2")
print("-" * 75)
print(f"[*] Desviación térmica en \u2113=5 (Punto Frío): {efecto_isw_asimetrico[3]:.2f} \u03bcK")
print("[VERDICTO]: Los picos mutan su posición angular debido al arrastre de giro.")
print("=" * 75 + "\n")

# 8. Configuración y trazado gráfico académico seguro
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 5))

# Subplot 1: Espectro Completo
ax1.plot(multipolos, Cl_isotropo, '--', color='gray', alpha=0.6, label='Fondo Base')
ax1.plot(multipolos, Cl_anomalo, color='#004488', linewidth=2.0, label='Modelo VCSD-I')
ax1.axvspan(2000, 3000, color='#ffea00', alpha=0.15, label='Región de Micro-Picos (Bessel)')
ax1.set_title('Espectro del CMB Completo')
ax1.set_xlabel('Multipolo l')
ax1.set_ylabel('D_l')
ax1.legend()
ax1.grid(True, linestyle=':')

# Subplot 2: Zoom de la Anomalía del Punto Frío
ax2.plot(multipolos[:40], Cl_isotropo[:40], '--', color='gray', alpha=0.6, label='Fondo Base')
ax2.plot(multipolos[:40], Cl_anomalo[:40], color='crimson', linewidth=2.5, label='Eje Punto Frío')
ax2.set_title('Bajas Frecuencias: Anomalía de Eridanus')
ax2.set_xlabel('Multipolo l <= 40')
ax2.set_ylabel('D_l')
ax2.legend()
ax2.grid(True, linestyle=':')

# 9. Forzar actualización del backend gráfico y guardar archivo
plt.savefig('espectro_vcsd_final.png', dpi=300)
print("[*] Archivo de respaldo guardado como 'espectro_vcsd_final.png'")
plt.draw()
plt.pause(0.1)
plt.show()