# 光子涟漪取代暗物质:Python 与 SPARC 重写银河旋转定律
暗物质问题几十年来一直困扰着天体物理学家。标准银河动力学模型需要假设存在不可见的质量来解释星系外围恒星意外高速旋转的现象。但为每个星系单独调整这种假设物质的参数,引发了对这一范式的根本有效性的质疑。独立研究者 Pavel K. 提出了一种大胆的替代理论:振动能量共振连续体理论(TVERC),将宇宙视为受连续介质力学和非线性流体力学严格定律支配的介质。为了验证这一想法,他使用 Python 和公开天文数据构建了一个计算实验,模拟了 175 个星系的运动学——无需引入暗物质。
暗物质之谜与 TVERC 替代方案
星系模型依赖于可见物质的引力。然而观测显示,外缘区域旋转速度远超预期。为了匹配数据,科学家假设存在暗物质——一种看不见的物质,占据宇宙大部分质量。问题在于?暗物质晕参数必须为每个星系量身定制,这暗示范式存在缺陷,并激发了对更好解释的探索。
TVERC 彻底颠覆了这一思路。它没有暗物质粒子,而是引入了由弹性真空涟漪形成的密集“声学缓冲层”。恒星在数十亿年中产生这种涟漪,在局部提升了空间的光机粘度。整个星系作为一个整体旋转,其运动学遵循这一粘性介质中波能扩散的普适、可缩放定律。不再需要逐星系调整——只需一个基于物理的统一模型。
使用 SPARC 数据库的计算实验
为了验证 TVERC,Pavel 对真实天文数据进行了计算测试。他使用了开源 SPARC 数据库(Spitzer 光度测量与精确旋转曲线),包含 175 个星系——从巨型螺旋星系到矮不规则星系——的精确光度测量和旋转曲线数据。这是星系动力学研究的金标准。
目标:找到一组统一的 19 个宏观 3D 介质参数,同时拟合所有 175 个星系。这些参数涵盖真空刚度、波能衰减梯度、涟漪倍增因子等。他使用 SciPy 中的 scipy.optimize.differential_evolution——高维空间的强大全局优化器——来攻克这一难题。它最小化 TVERC 预测旋转曲线与观测之间的差异,并通过严格边界约束确保物理真实性。
Python 实现:优化器与 TVERC 物理模型
Python 及其科学栈(numpy、scipy、matplotlib)非常适合这项任务。过程会自动下载 SPARC 数据以确保可重复性,然后启动优化器,所有 19 个参数均受物理约束边界限制,确保解决方案脚踏实地。
以下是优化器设置和边界的代码片段:
# === 脚本 1: TVERC 自动优化器 V10.1 (严格物理引擎) ===
import os
import subprocess
print("=== 第一阶段: SPARC 数据库下载 ===")
# 安全自动下载 SPARC
if not os.path.exists('sparc-json'):
print("正在下载聚合 SPARC 数据库 (sparc_full.json)...")
subprocess.run(["git", "clone", "https://github.com/wohlig/sparc-json.git'])
print("完成!数据库已加载。\n")
else:
print("数据库已存在。跳过下载。\n")
import numpy as np
import matplotlib.pyplot as plt
import json
import warnings
from scipy.optimize import differential_evolution
warnings.filterwarnings("ignore")
print("=== TVERC 统一模型: V10.1 严格物理优化器 ===")
print("模式: 175 个星系。物理惩罚激活。5% 异常值修剪。")
# ==============================================================================
# 严格物理边界 (19 个参数)
# ==============================================================================
BOUNDS = [
(1.0, 15.0), # 0: initial_phi (受真空张力约束)
(0.0005, 15.0), # 1: coupling (物质-真空相互作用)
(0.0, 50.0), # 2: base_kinetic_push (运动学偏移最大 50 km/s)
(0.1, 3.0), # 3: gas_ripple_multiplier (气体波动倍增因子)
(2.0, 20.0), # 4: halo_radius_multiplier (晕比盘大 2-20 倍)
(1.0, 10.0), # 5: a_scale_divisor (密度衰减形状)
(0.3, 0.85), # 6: M_L_disk_base (物理: 盘 IR 波段 M/L ~0.5)
(1e-6, 0.5), # 7: min_scattering
(0.1, 1.5), # 8: phi_exponent (场衰减指数)
(0.1, 20.0), # 9: k_ripple_base
(0.01, 5.0), # 10: rho_sup_scale
(0.1, 1.0), # 11: rho_sup_power
(0.4, 1.0), # 12: M_L_bulge (物理: 核球恒星较老,M/L 更高)
(-0.3, 0.3), # 13: ml_gradient (恒星种群梯度平滑)
(5.0, 25.0), # 14: disp_center (核心气体色散 5-25 km/s)
(2.0, 12.0), # 15: disp_edge (边缘色散最小 ~2 km/s)
(0.5, 3.0), # 16: disp_scale (色散衰减率)
(0.3, 1.0), # 17: bulge_flattening (物理: 核球为 3D 椭球体)
(0.0, 0.5) # 18: thermal_halo_coupling
]
优化后(通常需 3 小时以上),19 个通用参数即可生成旋转曲线。此片段加载它们并运行 TVERC 物理核心:
# ==============================================================================
# TVERC 运动学可视化器: 12 星系网格
# ==============================================================================
# 自动下载 SPARC
import os
if not os.path.exists('sparc-json'):
print("正在下载 SPARC 数据库...")
os.system('rm -rf sparc-json')
os.system('git clone https://github.com/wohlig/sparc-json.git')
import numpy as np
import matplotlib.pyplot as plt
import json
import warnings
warnings.filterwarnings('ignore')
print("\n=== TVERC 运动学可视化器: 前向计算 ===")
# ==============================================================================
# 19 个通用 TVERC 参数 (源自运行 1 基准)
# ==============================================================================
# 每个代表 3D 连续体的核心属性
best_params = [
14.4842, # 0: initial_phi (基准真空张力标量)
13.4859, # 1: coupling (物质-真空相互作用常数)
6.7855, # 2: base_kinetic_push (庞德莫托夫加速度偏移, km/s)
1.3480, # 3: gas_ripple_multiplier (星际气体热力学波动性)
19.9079, # 4: halo_radius_multiplier (波晕边界相对于盘的缩放)
2.4916, # 5: a_scale_divisor (过渡区径向梯度形状因子)
0.5702, # 6: M_L_disk_base (恒星盘质量光比)
0.0000146, # 7: min_scattering (虚空波散射绝对下限)
0.8768299, # 8: phi_exponent (张力场空间衰减指数)
0.3786, # 9: k_ripple_base (热涟漪基本波数)
3.3008619, # 10: rho_sup_scale (高频阻尼密度阈值)
0.4823863, # 11: rho_sup_power (密度阻尼阈值幂次)
0.5949, # 12: M_L_bulge (中心核球质量光比)
-0.1827, # 13: ml_gradient (恒星质量密度径向衰减)
5.3, # 14: disp_center (核心气体速度色散, km/s)
2.4, # 15: disp_edge (外围气体速度色散, km/s)
2.2334, # 16: disp_scale (气体色散指数衰减尺度)
0.8531, # 17: bulge_flattening (3D 核球几何扁平度)
0.2692 # 18: thermal_halo_coupling (热能馈入晕的比例)
]
# ==============================================================================
# TVERC 核心物理引擎
# ==============================================================================
FIXED_CONFIG = {'alpha': 10e113}
class TVERCGalaxyModel:
def __init__(self, params):
self.alpha = FIXED_CONFIG['alpha']
self.initial_phi = params[0]
self.coupling = params[1]
self.base_push = params[2]
self.gas_ripple_multiplier = params[3]
self.halo_multiplier = params[4]
self.a_scale_divisor = params[5]
self.ml_disk_base = params[6]
self.min_scattering = params[7]
self.phi_exponent = params[8]
self.k_ripple_base = params[9]
self.rho_sup_scale = params[10]
self.rho_sup_power = params[11]
self.ml_bulge = params[12]
self.ml_gradient = params[13]
self.disp_center = params[14]
self.disp_edge = params[15]
self.disp_scale = params[16]
self.bulge_flattening = params[17]
self.thermal_coupling = params[18]
self.v_phi_base = 299792.458
def get_static_tension_energy(self, phi_val):
return (3.0 / (2.0 * self.alpha)) * (1.0 - 1.0 / (1.0 + self.alpha * phi_val**2))
def effective_ripple_energy_density(self, phi_val, rho_eff, grad_sq):
local_k_ripple = self.k_ripple_base / (1.0 + (rho_eff / self.rho_sup_scale))
local_k_ripple = np.maximum(local_k_ripple, 1.0)
v_eff_local = self.v_phi_base / (local_k_ripple * 124.1)
retention_factor = 1.0 / (1.0 + (rho_eff / self.rho_sup_scale)**self.rho_sup_power)
effective_factor = np.maximum(retention_factor, self.min_scattering)
u_static = self.get_static_tension_energy(phi_val)
u_coupling = 0.5 * self.coupling * rho_eff * phi_val**2
kinetic_energy = 0.5 * v_eff_local**2 * grad_sq
return kinetic_energy + (u_static + u_coupling) * effective_factor
G = 4.30091e-6
def process_galaxy_json(galaxy_data, tverc_model):
raw_array = np.array(galaxy_data['data'])
R, V_obs, V_gas_raw = raw_array[:, 0], raw_array[:, 1], np.abs(raw_array[:, 3])
V_disk, V_bulge = raw_array[:, 4], raw_array[:, 5]
valid = R > 0
R, V_obs, V_gas_raw, V_disk, V_bulge = R[valid], V_obs[valid], V_gas_raw[valid], V_disk[valid], V_bulge[valid]
M_stars_raw = R * (V_disk**2 * 0.2) / G
idx_half = np.searchsorted(M_stars_raw, M_stars_raw[-1]/2) if M_stars_raw[-1] > 0 else -1
R_eff_raw = R[min(idx_half, len(R)-1)] if M_stars_raw[-1] > 0 else max(R[-1]/2, 1.0)
V_dispersion = tverc_model.disp_center * np.exp(-R / (R_eff_raw * tverc_model.disp_scale)) + tverc_model.disp_edge
V_gas = np.sqrt(V_gas_raw**2 + V_dispersion**2)
surf_dens_approx = M_stars_raw[-1] / (R_eff_raw**2)
dyn_ml_disk = tverc_model.ml_disk_base * (np.maximum(surf_dens_approx / 1e8, 0.1))**tverc_model.ml_gradient
M_disk_R = R * (V_disk**2 * dyn_ml_disk) / G
M_bulge_R = R * (V_bulge**2 * tverc_model.ml_bulge) / G
M_gas_R = R * V_gas**2 / G
rho_disk, rho_bulge, rho_gas = np.zeros_like(R), np.zeros_like(R), np.zeros_like(R)
V_sph_0 = (4/3) * np.pi * R[0]**3
rho_disk[0], rho_bulge[0], rho_gas[0] = M_disk_R[0]/V_sph_0, M_bulge_R[0]/(V_sph_0*tverc_model.bulge_flattening), M_gas_R[0]/V_sph_0
for j in range(1, len(R)):
dV = (4/3) * np.pi * (R[j]**3 - R[j-1]**3)
if dV > 0:
rho_disk[j] = np.maximum((M_
结果与物理洞见
优化器大获成功:一组 19 个通用参数完美拟合了175 个形态迥异的星系的运动学。TVERC 曲线与望远镜数据之间的平均绝对百分比误差(MAPE)仅为 15.59%。对如此广泛样本使用单一模型而言,这是革命性的突破。不再需要定制暗物质晕——动力学从时空固有属性中自然涌现。
关键启示:
- 普适拟合: 一组参数覆盖所有星系类型,从巨星系到矮星系——不同于暗物质模型需逐个调整。
- 惊人精度: 15.59% 平均误差显示强大预测能力。
- 物理基础: 所有 19 个参数对应真实属性,如真空张力(
initial_phi)或物质-真空耦合(coupling)。 - 无需暗物质: TVERC 通过真空波效应独力解释平坦旋转曲线。
这挑战了暗物质正统观,并开启了对宇宙定律的新视角。TVERC 甚至预测了黑洞共振嗡鸣,并在 LIGO 数据上得到验证,应用远超星系范畴。
关键亮点
- 天文范式转变: 摒弃暗物质,转向连续介质力学视角审视宇宙。
- Python 驱动建模:
scipy.optimize.differential_evolution用 19 个通用参数模拟 175 个星系。 - 验证精度: SPARC 旋转曲线 MAPE 15.59%。
- 一统江湖: 通用参数胜过暗物质的定制拟合。
- 更广应用: 通过 LIGO 确认延伸至黑洞。
— Editorial Team
暂无评论。