Path: blob/main/latex-templates/templates/astronomy/cosmological_expansion.tex
51 views
unlisted
\documentclass[a4paper, 11pt]{article}1\usepackage[utf8]{inputenc}2\usepackage[T1]{fontenc}3\usepackage{amsmath, amssymb}4\usepackage{graphicx}5\usepackage{siunitx}6\usepackage{booktabs}7\usepackage{subcaption}8\usepackage[makestderr]{pythontex}910% Theorem environments for textbook style11\newtheorem{definition}{Definition}12\newtheorem{theorem}{Theorem}13\newtheorem{example}{Example}14\newtheorem{remark}{Remark}1516\title{Cosmological Expansion: From Hubble's Law to Dark Energy\\17\large A Comprehensive Analysis of the $\Lambda$CDM Model}18\author{Cosmology Division\\Computational Science Templates}19\date{\today}2021\begin{document}22\maketitle2324\begin{abstract}25This comprehensive analysis explores the expansion history of the universe from observational foundations to theoretical frameworks. We examine Hubble's law and its modern calibrations, derive the Friedmann equations governing cosmic evolution, and analyze different cosmological models including matter-dominated, radiation-dominated, and dark energy-dominated universes. The $\Lambda$CDM concordance model is developed in detail, with computational analysis of the scale factor evolution, distance-redshift relations, and the cosmic age problem. We explore observational evidence from Type Ia supernovae, baryon acoustic oscillations, and cosmic microwave background measurements that constrain cosmological parameters.26\end{abstract}2728\section{Introduction}2930The discovery that the universe is expanding stands as one of the most profound achievements of twentieth-century science. Edwin Hubble's 1929 observation of a linear relationship between galaxy distances and their recession velocities transformed our understanding of cosmic structure and evolution.3132\begin{definition}[Hubble's Law]33The recession velocity $v$ of a galaxy is proportional to its distance $d$:34\begin{equation}35v = H_0 d36\end{equation}37where $H_0$ is the Hubble constant, currently measured at approximately \SI{70}{\km\per\s\per\Mpc}.38\end{definition}3940\section{Theoretical Framework}4142\subsection{The Friedmann Equations}4344General relativity applied to a homogeneous, isotropic universe yields the Friedmann equations:4546\begin{theorem}[First Friedmann Equation]47The expansion rate of the universe is determined by its energy content:48\begin{equation}49H^2 = \left(\frac{\dot{a}}{a}\right)^2 = \frac{8\pi G}{3}\rho - \frac{kc^2}{a^2} + \frac{\Lambda c^2}{3}50\end{equation}51where $a(t)$ is the scale factor, $\rho$ is the total energy density, $k$ is the spatial curvature, and $\Lambda$ is the cosmological constant.52\end{theorem}5354\begin{theorem}[Second Friedmann Equation]55The acceleration of expansion:56\begin{equation}57\frac{\ddot{a}}{a} = -\frac{4\pi G}{3}\left(\rho + \frac{3p}{c^2}\right) + \frac{\Lambda c^2}{3}58\end{equation}59where $p$ is the pressure.60\end{theorem}6162\subsection{Density Parameters}6364We define dimensionless density parameters relative to the critical density $\rho_c = 3H_0^2/(8\pi G)$:6566\begin{align}67\Omega_m &= \frac{\rho_m}{\rho_c} \quad \text{(matter)} \\68\Omega_r &= \frac{\rho_r}{\rho_c} \quad \text{(radiation)} \\69\Omega_\Lambda &= \frac{\Lambda c^2}{3H_0^2} \quad \text{(dark energy)} \\70\Omega_k &= -\frac{kc^2}{H_0^2 a_0^2} \quad \text{(curvature)}71\end{align}7273\begin{remark}[Closure Relation]74For a universe with these components:75\begin{equation}76\Omega_m + \Omega_r + \Omega_\Lambda + \Omega_k = 177\end{equation}78\end{remark}7980\subsection{Redshift and Scale Factor}8182The cosmological redshift $z$ relates to the scale factor:83\begin{equation}841 + z = \frac{a_0}{a(t)} = \frac{\lambda_{\text{obs}}}{\lambda_{\text{emit}}}85\end{equation}8687The Hubble parameter at redshift $z$:88\begin{equation}89H(z) = H_0\sqrt{\Omega_r(1+z)^4 + \Omega_m(1+z)^3 + \Omega_k(1+z)^2 + \Omega_\Lambda}90\end{equation}9192\section{Computational Analysis}9394\begin{pycode}95import numpy as np96from scipy.integrate import odeint, quad97import matplotlib.pyplot as plt98plt.rc('text', usetex=True)99plt.rc('font', family='serif')100101np.random.seed(42)102103# Physical constants104c = 299792.458 # Speed of light (km/s)105H0 = 70.0 # Hubble constant (km/s/Mpc)106H0_si = H0 * 1000 / (3.086e22) # Convert to 1/s107Gyr_to_s = 3.154e16 # Seconds per Gyr108109# Cosmological models110models = {111r'$\Lambda$CDM': {'Om': 0.3, 'Or': 8.5e-5, 'OL': 0.7, 'Ok': 0.0},112'Einstein-de Sitter': {'Om': 1.0, 'Or': 0.0, 'OL': 0.0, 'Ok': 0.0},113'Open Universe': {'Om': 0.3, 'Or': 0.0, 'OL': 0.0, 'Ok': 0.7},114'Dark Energy Dom.': {'Om': 0.05, 'Or': 0.0, 'OL': 0.95, 'Ok': 0.0}115}116117# Hubble parameter as function of redshift118def E(z, Om, Or, OL, Ok):119"""Dimensionless Hubble parameter E(z) = H(z)/H0"""120return np.sqrt(Or*(1+z)**4 + Om*(1+z)**3 + Ok*(1+z)**2 + OL)121122# Comoving distance123def comoving_distance(z, Om, Or, OL, Ok):124"""Comoving distance in Mpc"""125integrand = lambda z_prime: 1.0 / E(z_prime, Om, Or, OL, Ok)126result, _ = quad(integrand, 0, z)127return (c/H0) * result128129# Luminosity distance130def luminosity_distance(z, Om, Or, OL, Ok):131"""Luminosity distance in Mpc"""132d_c = comoving_distance(z, Om, Or, OL, Ok)133return (1+z) * d_c134135# Angular diameter distance136def angular_diameter_distance(z, Om, Or, OL, Ok):137"""Angular diameter distance in Mpc"""138d_c = comoving_distance(z, Om, Or, OL, Ok)139return d_c / (1+z)140141# Lookback time142def lookback_time(z, Om, Or, OL, Ok):143"""Lookback time in Gyr"""144integrand = lambda z_prime: 1.0 / ((1+z_prime) * E(z_prime, Om, Or, OL, Ok))145result, _ = quad(integrand, 0, z)146return (1/H0) * (3.086e19/Gyr_to_s) * result147148# Age of universe149def age_of_universe(Om, Or, OL, Ok):150"""Age in Gyr"""151integrand = lambda a: 1.0 / (a * H0_si * np.sqrt(Om/a**3 + Or/a**4 + Ok/a**2 + OL))152result, _ = quad(integrand, 1e-10, 1)153return result / Gyr_to_s154155# Deceleration parameter156def deceleration_parameter(z, Om, Or, OL):157"""q(z) = -1 - d ln H / d ln(1+z)"""158E_sq = Or*(1+z)**4 + Om*(1+z)**3 + OL159q = (2*Or*(1+z)**4 + 1.5*Om*(1+z)**3) / E_sq - 1160return q161162# Scale factor evolution (solve Friedmann equation)163def scale_factor_evolution(t_array, Om, Or, OL, Ok):164"""Solve for a(t) given initial conditions"""165def da_dt(a, t):166if a <= 0:167return 0168return a * H0_si * np.sqrt(Om/a**3 + Or/a**4 + Ok/a**2 + OL)169170a0 = 1e-6 # Start from very early time171a = odeint(da_dt, a0, t_array)[:, 0]172return a173174# Create comprehensive figure175fig = plt.figure(figsize=(14, 16))176177# Plot 1: Hubble parameter vs redshift178ax1 = fig.add_subplot(3, 3, 1)179z = np.linspace(0, 5, 200)180colors = ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728']181for idx, (name, params) in enumerate(models.items()):182H_z = H0 * E(z, params['Om'], params['Or'], params['OL'], params['Ok'])183ax1.plot(z, H_z, color=colors[idx], linewidth=2, label=name)184185ax1.set_xlabel('Redshift $z$')186ax1.set_ylabel('$H(z)$ (km/s/Mpc)')187ax1.set_title('Hubble Parameter Evolution')188ax1.legend(fontsize=7, loc='upper left')189ax1.grid(True, alpha=0.3)190ax1.set_xlim(0, 5)191192# Plot 2: Luminosity distance193ax2 = fig.add_subplot(3, 3, 2)194z_plot = np.linspace(0.01, 3, 100)195for idx, (name, params) in enumerate(models.items()):196d_L = np.array([luminosity_distance(zi, params['Om'], params['Or'], params['OL'], params['Ok']) for zi in z_plot])197ax2.plot(z_plot, d_L/1000, color=colors[idx], linewidth=2, label=name)198199ax2.set_xlabel('Redshift $z$')200ax2.set_ylabel('$D_L$ (Gpc)')201ax2.set_title('Luminosity Distance')202ax2.legend(fontsize=7)203ax2.grid(True, alpha=0.3)204205# Plot 3: Angular diameter distance206ax3 = fig.add_subplot(3, 3, 3)207for idx, (name, params) in enumerate(models.items()):208d_A = np.array([angular_diameter_distance(zi, params['Om'], params['Or'], params['OL'], params['Ok']) for zi in z_plot])209ax3.plot(z_plot, d_A, color=colors[idx], linewidth=2, label=name)210211ax3.set_xlabel('Redshift $z$')212ax3.set_ylabel('$D_A$ (Mpc)')213ax3.set_title('Angular Diameter Distance')214ax3.legend(fontsize=7)215ax3.grid(True, alpha=0.3)216217# Plot 4: Deceleration parameter218ax4 = fig.add_subplot(3, 3, 4)219z_q = np.linspace(0, 3, 100)220for idx, (name, params) in enumerate(models.items()):221q_z = deceleration_parameter(z_q, params['Om'], params['Or'], params['OL'])222ax4.plot(z_q, q_z, color=colors[idx], linewidth=2, label=name)223224ax4.axhline(y=0, color='black', linestyle='-', alpha=0.5, linewidth=0.5)225ax4.set_xlabel('Redshift $z$')226ax4.set_ylabel('Deceleration $q(z)$')227ax4.set_title('Acceleration History')228ax4.legend(fontsize=7)229ax4.grid(True, alpha=0.3)230231# Plot 5: Lookback time232ax5 = fig.add_subplot(3, 3, 5)233z_t = np.linspace(0.01, 5, 50)234for idx, (name, params) in enumerate(models.items()):235t_look = np.array([lookback_time(zi, params['Om'], params['Or'], params['OL'], params['Ok']) for zi in z_t])236ax5.plot(z_t, t_look, color=colors[idx], linewidth=2, label=name)237238ax5.set_xlabel('Redshift $z$')239ax5.set_ylabel('Lookback Time (Gyr)')240ax5.set_title('Lookback Time')241ax5.legend(fontsize=7)242ax5.grid(True, alpha=0.3)243244# Plot 6: Density evolution245ax6 = fig.add_subplot(3, 3, 6)246z_dens = np.linspace(0, 10, 200)247# For Lambda-CDM248Om, Or, OL = 0.3, 8.5e-5, 0.7249E_z = E(z_dens, Om, Or, OL, 0)250Omega_m_z = Om * (1+z_dens)**3 / E_z**2251Omega_r_z = Or * (1+z_dens)**4 / E_z**2252Omega_L_z = OL / E_z**2253254ax6.plot(z_dens, Omega_m_z, 'b-', linewidth=2, label=r'$\Omega_m(z)$')255ax6.plot(z_dens, Omega_r_z, 'r-', linewidth=2, label=r'$\Omega_r(z)$')256ax6.plot(z_dens, Omega_L_z, 'g-', linewidth=2, label=r'$\Omega_\Lambda(z)$')257ax6.axvline(x=0.3, color='gray', linestyle='--', alpha=0.5)258ax6.axvline(x=3400, color='gray', linestyle=':', alpha=0.5)259260ax6.set_xlabel('Redshift $z$')261ax6.set_ylabel(r'$\Omega_i(z)$')262ax6.set_title('Density Parameter Evolution')263ax6.legend(fontsize=8)264ax6.grid(True, alpha=0.3)265ax6.set_xscale('log')266ax6.set_xlim(0.1, 10)267268# Plot 7: Scale factor evolution269ax7 = fig.add_subplot(3, 3, 7)270t_Hubble = 1/H0_si/Gyr_to_s # Hubble time in Gyr271t_array = np.linspace(0.001, 30, 500) * Gyr_to_s272273for idx, (name, params) in enumerate(models.items()):274a = scale_factor_evolution(t_array, params['Om'], params['Or'], params['OL'], params['Ok'])275ax7.plot(t_array/Gyr_to_s, a, color=colors[idx], linewidth=2, label=name)276277ax7.axhline(y=1, color='gray', linestyle='--', alpha=0.5)278ax7.axvline(x=13.8, color='gray', linestyle=':', alpha=0.5)279ax7.set_xlabel('Time (Gyr)')280ax7.set_ylabel('Scale Factor $a(t)$')281ax7.set_title('Scale Factor Evolution')282ax7.legend(fontsize=7, loc='upper left')283ax7.grid(True, alpha=0.3)284ax7.set_xlim(0, 30)285ax7.set_ylim(0, 5)286287# Plot 8: Distance modulus (Hubble diagram)288ax8 = fig.add_subplot(3, 3, 8)289z_mu = np.linspace(0.01, 2, 100)290for idx, (name, params) in enumerate(models.items()):291d_L = np.array([luminosity_distance(zi, params['Om'], params['Or'], params['OL'], params['Ok']) for zi in z_mu])292mu = 5 * np.log10(d_L) + 25 # Distance modulus293ax8.plot(z_mu, mu, color=colors[idx], linewidth=2, label=name)294295# Add simulated SN Ia data for Lambda-CDM296z_sn = np.array([0.1, 0.2, 0.3, 0.5, 0.7, 1.0, 1.4])297d_L_true = np.array([luminosity_distance(zi, 0.3, 8.5e-5, 0.7, 0) for zi in z_sn])298mu_true = 5 * np.log10(d_L_true) + 25299mu_obs = mu_true + np.random.normal(0, 0.15, len(z_sn))300ax8.errorbar(z_sn, mu_obs, yerr=0.15, fmt='ko', markersize=5, capsize=3, label='SN Ia')301302ax8.set_xlabel('Redshift $z$')303ax8.set_ylabel('Distance Modulus $\mu$')304ax8.set_title('Hubble Diagram')305ax8.legend(fontsize=7, loc='lower right')306ax8.grid(True, alpha=0.3)307308# Plot 9: Equation of state parameter309ax9 = fig.add_subplot(3, 3, 9)310w_values = np.linspace(-1.5, 0.5, 100)311z_test = 1.0312effects = []313for w in w_values:314# For w != -1, dark energy density evolves as (1+z)^(3(1+w))315E_w = np.sqrt(0.3*(1+z_test)**3 + 0.7*(1+z_test)**(3*(1+w)))316effects.append(E_w)317318ax9.plot(w_values, effects, 'b-', linewidth=2)319ax9.axvline(x=-1, color='r', linestyle='--', alpha=0.7, label=r'$w=-1$ ($\Lambda$)')320ax9.axvline(x=-1/3, color='g', linestyle=':', alpha=0.7, label=r'$w=-1/3$ (accel. boundary)')321ax9.set_xlabel('Equation of State $w$')322ax9.set_ylabel('$E(z=1)$')323ax9.set_title('Dark Energy Equation of State')324ax9.legend(fontsize=8)325ax9.grid(True, alpha=0.3)326327plt.tight_layout()328plt.savefig('cosmological_expansion_plot.pdf', bbox_inches='tight', dpi=150)329print(r'\begin{center}')330print(r'\includegraphics[width=\textwidth]{cosmological_expansion_plot.pdf}')331print(r'\end{center}')332plt.close()333334# Calculate key quantities for Lambda-CDM335age_lcdm = age_of_universe(0.3, 8.5e-5, 0.7, 0)336q0_lcdm = deceleration_parameter(0, 0.3, 8.5e-5, 0.7)337z_transition = ((2*0.7)/0.3)**(1/3) - 1 # Matter-Lambda equality338z_accel = (2*0.7/0.3)**(1/3) - 1 # Acceleration onset (q=0)339\end{pycode}340341\section{Results and Discussion}342343\subsection{Key Cosmological Parameters}344345\begin{pycode}346# Generate results table347print(r'\begin{table}[h]')348print(r'\centering')349print(r'\caption{Cosmological Parameters for Different Models}')350print(r'\begin{tabular}{lccccc}')351print(r'\toprule')352print(r'Model & $\Omega_m$ & $\Omega_\Lambda$ & Age (Gyr) & $q_0$ & Fate \\')353print(r'\midrule')354for name, params in models.items():355age = age_of_universe(params['Om'], params['Or'], params['OL'], params['Ok'])356q0 = deceleration_parameter(0, params['Om'], params['Or'], params['OL'])357if params['OL'] > 0:358fate = 'Accelerating'359elif params['Ok'] > 0:360fate = 'Expanding'361else:362fate = 'Recollapse'363print(f"{name} & {params['Om']:.2f} & {params['OL']:.2f} & {age:.1f} & {q0:.2f} & {fate} \\\\")364print(r'\bottomrule')365print(r'\end{tabular}')366print(r'\end{table}')367\end{pycode}368369\begin{example}[$\Lambda$CDM Universe]370For the concordance cosmological model with $\Omega_m = 0.3$ and $\Omega_\Lambda = 0.7$:371\begin{itemize}372\item Age of the universe: \py{f"{age_lcdm:.2f}"} Gyr373\item Current deceleration parameter: $q_0 = $ \py{f"{q0_lcdm:.3f}"}374\item Matter-$\Lambda$ equality redshift: $z_{eq} = $ \py{f"{z_transition:.2f}"}375\item Hubble time: $1/H_0 = $ \py{f"{1/H0_si/Gyr_to_s:.1f}"} Gyr376\end{itemize}377\end{example}378379\subsection{Distance Measures}380381\begin{pycode}382# Distance table at specific redshifts383print(r'\begin{table}[h]')384print(r'\centering')385print(r'\caption{Distance Measures in $\Lambda$CDM Cosmology}')386print(r'\begin{tabular}{ccccc}')387print(r'\toprule')388print(r'$z$ & $D_C$ (Mpc) & $D_L$ (Mpc) & $D_A$ (Mpc) & Lookback (Gyr) \\')389print(r'\midrule')390for z_val in [0.1, 0.5, 1.0, 2.0, 3.0]:391d_c = comoving_distance(z_val, 0.3, 8.5e-5, 0.7, 0)392d_l = luminosity_distance(z_val, 0.3, 8.5e-5, 0.7, 0)393d_a = angular_diameter_distance(z_val, 0.3, 8.5e-5, 0.7, 0)394t_lb = lookback_time(z_val, 0.3, 8.5e-5, 0.7, 0)395print(f"{z_val:.1f} & {d_c:.0f} & {d_l:.0f} & {d_a:.0f} & {t_lb:.2f} \\\\")396print(r'\bottomrule')397print(r'\end{tabular}')398print(r'\end{table}')399\end{pycode}400401\subsection{Observational Evidence for Dark Energy}402403The evidence for cosmic acceleration comes from multiple independent probes:404405\begin{enumerate}406\item \textbf{Type Ia Supernovae}: Standardizable candles show that distant SNe are fainter than expected in a decelerating universe407\item \textbf{Baryon Acoustic Oscillations}: Standard ruler measurements in galaxy surveys constrain $D_A(z)/r_s$408\item \textbf{Cosmic Microwave Background}: Angular power spectrum constrains $\Omega_m h^2$ and $\Omega_\Lambda$409\item \textbf{Cluster Counts}: Evolution of galaxy cluster abundance sensitive to $\sigma_8$ and $\Omega_m$410\end{enumerate}411412\begin{remark}[Cosmic Coincidence Problem]413We appear to live at a special epoch when $\Omega_m \approx \Omega_\Lambda$. Given that these densities scale differently with redshift ($\rho_m \propto a^{-3}$ vs. $\rho_\Lambda = $ const), this equality is a remarkable coincidence.414\end{remark}415416\section{Dark Energy Models}417418\subsection{Cosmological Constant}419The simplest dark energy model is Einstein's cosmological constant $\Lambda$:420\begin{itemize}421\item Equation of state: $w = p/\rho = -1$ (constant)422\item Energy density: constant in time423\item Interpretation: vacuum energy424\end{itemize}425426\subsection{Quintessence}427Dynamical dark energy from a scalar field $\phi$:428\begin{equation}429\rho_\phi = \frac{1}{2}\dot{\phi}^2 + V(\phi), \quad p_\phi = \frac{1}{2}\dot{\phi}^2 - V(\phi)430\end{equation}431This gives $-1 < w < 1$ with possible time evolution.432433\section{The Cosmic Age Problem}434435\begin{pycode}436# Age comparison437print(r'\begin{table}[h]')438print(r'\centering')439print(r'\caption{Cosmic Age in Different Models vs. Oldest Stars}')440print(r'\begin{tabular}{lcc}')441print(r'\toprule')442print(r'Model & Age (Gyr) & Consistent? \\')443print(r'\midrule')444oldest_stars = 13.0 # Approximate age of oldest globular clusters445for name, params in models.items():446age = age_of_universe(params['Om'], params['Or'], params['OL'], params['Ok'])447consistent = 'Yes' if age > oldest_stars else 'No'448print(f"{name} & {age:.1f} & {consistent} \\\\")449print(r'\midrule')450print(f"Oldest Stars & $\\sim${oldest_stars:.0f} & --- \\\\")451print(r'\bottomrule')452print(r'\end{tabular}')453print(r'\end{table}')454\end{pycode}455456\section{Limitations and Extensions}457458\subsection{Model Limitations}459\begin{enumerate}460\item \textbf{Perfect homogeneity}: Real universe has structure461\item \textbf{Constant $w$}: Dark energy EoS may evolve462\item \textbf{Flat geometry}: $\Omega_k$ constrained but not zero463\item \textbf{No perturbations}: Linear theory not included464\end{enumerate}465466\subsection{Possible Extensions}467\begin{itemize}468\item Time-varying dark energy: $w(z) = w_0 + w_a \cdot z/(1+z)$469\item Modified gravity: $f(R)$ theories470\item Interacting dark sector471\item Backreaction from inhomogeneities472\end{itemize}473474\section{Conclusion}475476This analysis demonstrates the fundamental framework of modern cosmology:477\begin{itemize}478\item The $\Lambda$CDM model provides an excellent fit to observations479\item Dark energy dominates the current epoch ($\Omega_\Lambda \approx 0.7$)480\item The universe is accelerating ($q_0 = $ \py{f"{q0_lcdm:.2f}"} $ < 0$)481\item Cosmic age of \py{f"{age_lcdm:.1f}"} Gyr is consistent with stellar ages482\item Future observations will constrain dark energy properties483\end{itemize}484485\section*{Further Reading}486\begin{itemize}487\item Peebles, P. J. E. (1993). \textit{Principles of Physical Cosmology}. Princeton University Press.488\item Weinberg, S. (2008). \textit{Cosmology}. Oxford University Press.489\item Planck Collaboration (2020). Planck 2018 results. VI. Cosmological parameters.490\end{itemize}491492\end{document}493494495