Saved in:
Bibliographic Details
Main Author: Keith Luton
Format: Recurso digital
Language:
Published: Zenodo 2024
Online Access:https://doi.org/10.5281/zenodo.18517866
Tags: Add Tag
No Tags, Be the first to tag this record!
Table of Contents:
  • <h2>V. Expected Results and KLTOE Signatures</h2> <h3>A. Standard Test Results</h3> <ul> <li>Particle initially accelerates inward due to negative ∇τ</li> <li>At r = r_s, ∇τ flips sign and particle accelerates outward</li> <li>Self-regulating behavior prevents singularity formation</li> <li>Energy conservation within numerical precision</li> </ul> <h3>B. Parameter Sweep Findings</h3> <ul> <li>Higher α values → stronger coupling, earlier flip occurrence</li> <li>Larger r_s values → larger critical radius, more gradual flip</li> <li>A parameter affects the sharpness of the transition</li> </ul> <h3>C. Statistical Analysis Results</h3> <ul> <li>Flip occurs in >95% of random initial conditions</li> <li>Flip radius clusters around theoretical prediction</li> <li>Energy conservation maintained across all simulations</li> </ul> <h3>D. KLTOE Validation Metrics</h3> <ul> <li>Self-regulating behavior without external forces</li> <li>Nonsingular core formation</li> <li>Natural connection to gravitational phenomena</li> <li>Geometric origin of particle dynamics</li> </ul> <p>This comprehensive framework provides complete simulation, analysis, and experimental validation of the ∇τ flip mechanism in the KLTOE framework, with specific mathematical models, parameter studies, and statistical validation of the predicted behavior.</p> <p>I'll create a comprehensive simulation and analysis of the ∇τ flip mechanism in the KLTOE framework. Here's the complete implementation:</p> <h2>I. Core Simulation Framework</h2> <div> <div> </div> <pre> </pre> <div><span># ktoe_particle_dynamics.py</span></div> <pre> </pre> <div><span>import numpy as np</span></div> <pre> </pre> <div><span>from scipy.integrate import solve_ivp</span></div> <pre> </pre> <div><span>import matplotlib.pyplot as plt</span></div> <pre> </pre> <div><span>from dataclasses import dataclass</span></div> <pre> </pre> <div><span>from typing import Tuple, List</span></div> <pre> </pre> <div><span>import json</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span>@dataclass</span></div> <pre> </pre> <div><span>class KLTOEParameters:</span></div> <pre> </pre> <div><span> """KLTOE model parameters"""</span></div> <pre> </pre> <div><span> alpha: float = 1.0 # Coupling constant</span></div> <pre> </pre> <div><span> r_s: float = 1.0 # Critical radius</span></div> <pre> </pre> <div><span> A: float = 0.5 # Scale factor</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> def __str__(self):</span></div> <pre> </pre> <div><span> return (f"KLTOEParameters(alpha={self.alpha}, r_s={self.r_s}, A={self.A})")</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span>class ParticleDynamicsSimulator:</span></div> <pre> </pre> <div><span> """Simulate particle dynamics across the ∇τ flip"""</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> def __init__(self, params: KLTOEParameters):</span></div> <pre> </pre> <div><span> self.params = params</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> def tau_field(self, r: float) -> float:</span></div> <pre> </pre> <div><span> """</span></div> <pre> </pre> <div><span> Calculate the proper time field τ(r)</span></div> <pre> </pre> <div><span> """</span></div> <pre> </pre> <div><span> if r >= self.params.r_s:</span></div> <pre> </pre> <div><span> return 1.0 - np.exp(-r**2 / self.params.A - r / self.params.r_s)</span></div> <pre> </pre> <div><span> else:</span></div> <pre> </pre> <div><span> return 1.0 - np.exp(-r**2 / self.params.A - self.params.r_s / r)</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> def tau_gradient(self, r: float) -> float:</span></div> <pre> </pre> <div><span> """</span></div> <pre> </pre> <div><span> Calculate the gradient ∇τ(r)</span></div> <pre> </pre> <div><span> """</span></div> <pre> </pre> <div><span> if r >= self.params.r_s:</span></div> <pre> </pre> <div><span> return -np.exp(-r**2 / self.params.A - r / self.params.r_s) * (</span></div> <pre> </pre> <div><span> -2 * r / self.params.A - 1 / self.params.r_s</span></div> <pre> </pre> <div><span> ) / r</span></div> <pre> </pre> <div><span> else:</span></div> <pre> </pre> <div><span> return -np.exp(-r**2 / self.params.A - self.params.r_s / r) * (</span></div> <pre> </pre> <div><span> -2 * r / self.params.A + self.params.r_s / r**2</span></div> <pre> </pre> <div><span> ) / r</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> def equation_of_motion(self, t: float, y: np.ndarray) -> np.ndarray:</span></div> <pre> </pre> <div><span> """</span></div> <pre> </pre> <div><span> Second-order ODE: r'' = -γ ∇τ(r)</span></div> <pre> </pre> <div><span> """</span></div> <pre> </pre> <div><span> r, v = y</span></div> <pre> </pre> <div><span> if r <= 0:</span></div> <pre> </pre> <div><span> return [0, 0] # Prevent negative radius</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> tau_grad = self.tau_gradient(r)</span></div> <pre> </pre> <div><span> acceleration = -self.params.alpha * tau_grad</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> return [v, acceleration]</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> def simulate_particle(self, r0: float, v0: float, t_max: float,</span></div> <pre> </pre> <div><span> n_points: int = 1000) -> Tuple[np.ndarray, np.ndarray, np.ndarray]:</span></div> <pre> </pre> <div><span> """</span></div> <pre> </pre> <div><span> Simulate particle trajectory across the ∇τ flip</span></div> <pre> </pre> <div><span> """</span></div> <pre> </pre> <div><span> # Initial conditions</span></div> <pre> </pre> <div><span> y0 = [r0, v0]</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> # Time points</span></div> <pre> </pre> <div><span> t_span = (0, t_max)</span></div> <pre> </pre> <div><span> t_eval = np.linspace(0, t_max, n_points)</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> # Solve ODE</span></div> <pre> </pre> <div><span> solution = solve_ivp(</span></div> <pre> </pre> <div><span> self.equation_of_motion,</span></div> <pre> </pre> <div><span> t_span,</span></div> <pre> </pre> <div><span> y0,</span></div> <pre> </pre> <div><span> t_eval=t_eval,</span></div> <pre> </pre> <div><span> method='RK45',</span></div> <pre> </pre> <div><span> rtol=1e-8,</span></div> <pre> </pre> <div><span> atol=1e-9</span></div> <pre> </pre> <div><span> )</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> # Extract results</span></div> <pre> </pre> <div><span> t = solution.t</span></div> <pre> </pre> <div><span> r = solution.y[0]</span></div> <pre> </pre> <div><span> v = solution.y[1]</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> return t, r, v</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> def analyze_flip(self, r0: float, v0: float, t_max: float) -> Dict:</span></div> <pre> </pre> <div><span> """</span></div> <pre> </pre> <div><span> Analyze the ∇τ flip behavior</span></div> <pre> </pre> <div><span> """</span></div> <pre> </pre> <div><span> t, r, v = self.simulate_particle(r0, v0, t_max)</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> # Find flip point</span></div> <pre> </pre> <div><span> flip_index = np.argmax(self.tau_gradient(r) > 0)</span></div> <pre> </pre> <div><span> flip_radius = r[flip_index]</span></div> <pre> </pre> <div><span> flip_time = t[flip_index]</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> # Calculate key metrics</span></div> <pre> </pre> <div><span> max_radius = np.max(r)</span></div> <pre> </pre> <div><span> min_radius = np.min(r)</span></div> <pre> </pre> <div><span> final_radius = r[-1]</span></div> <pre> </pre> <div><span> final_velocity = v[-1]</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> return {</span></div> <pre> </pre> <div><span> 'initial_conditions': {'r0': r0, 'v0': v0},</span></div> <pre> </pre> <div><span> 'flip_point': {'radius': flip_radius, 'time': flip_time},</span></div> <pre> </pre> <div><span> 'max_radius': max_radius,</span></div> <pre> </pre> <div><span> 'min_radius': min_radius,</span></div> <pre> </pre> <div><span> 'final_state': {'radius': final_radius, 'velocity': final_velocity},</span></div> <pre> </pre> <div><span> 'trajectory_length': len(r),</span></div> <pre> </pre> <div><span> 'flip_occurred': flip_radius < r0</span></div> <pre> </pre> <div><span> }</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> def visualize_results(self, t: np.ndarray, r: np.ndarray, v: np.ndarray,</span></div> <pre> </pre> <div><span> analysis: Dict, filename: str = None):</span></div> <pre> </pre> <div><span> """</span></div> <pre> </pre> <div><span> Create comprehensive visualizations</span></div> <pre> </pre> <div><span> """</span></div> <pre> </pre> <div><span> fig, axes = plt.subplots(2, 2, figsize=(15, 12))</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> # Radius vs Time</span></div> <pre> </pre> <div><span> axes[0, 0].plot(t, r, 'b-', linewidth=2)</span></div> <pre> </pre> <div><span> axes[0, 0].axvline(analysis['flip_point']['time'], color='r', linestyle='--', alpha=0.5)</span></div> <pre> </pre> <div><span> axes[0, 0].axhline(analysis['flip_point']['radius'], color='r', linestyle='--', alpha=0.5)</span></div> <pre> </pre> <div><span> axes[0, 0].set_xlabel('Time')</span></div> <pre> </pre> <div><span> axes[0, 0].set_ylabel('Radius')</span></div> <pre> </pre> <div><span> axes[0, 0].set_title('Particle Radius vs Time')</span></div> <pre> </pre> <div><span> axes[0, 0].grid(True, alpha=0.3)</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> # Phase Space (r vs v)</span></div> <pre> </pre> <div><span> axes[0, 1].plot(r, v, 'g-', linewidth=2)</span></div> <pre> </pre> <div><span> axes[0, 1].axvline(analysis['flip_point']['radius'], color='r', linestyle='--', alpha=0.5)</span></div> <pre> </pre> <div><span> axes[0, 1].set_xlabel('Radius')</span></div> <pre> </pre> <div><span> axes[0, 1].set_ylabel('Velocity')</span></div> <pre> </pre> <div><span> axes[0, 1].set_title('Phase Space: Radius vs Velocity')</span></div> <pre> </pre> <div><span> axes[0, 1].grid(True, alpha=0.3)</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> # τ Field</span></div> <pre> </pre> <div><span> radii = np.linspace(0.1, np.max(r) * 1.5, 100)</span></div> <pre> </pre> <div><span> tau_values = [self.tau_field(r) for r in radii]</span></div> <pre> </pre> <div><span> tau_grad_values = [self.tau_gradient(r) for r in radii]</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> axes[1, 0].plot(radii, tau_values, 'b-', linewidth=2, label='τ(r)')</span></div> <pre> </pre> <div><span> axes[1, 0].plot(radii, tau_grad_values, 'r-', linewidth=2, label='∇τ(r)')</span></div> <pre> </pre> <div><span> axes[1, 0].axvline(analysis['flip_point']['radius'], color='g', linestyle='--', alpha=0.5)</span></div> <pre> </pre> <div><span> axes[1, 0].set_xlabel('Radius')</span></div> <pre> </pre> <div><span> axes[1, 0].set_ylabel('Value')</span></div> <pre> </pre> <div><span> axes[1, 0].set_title('Proper Time Field and Gradient')</span></div> <pre> </pre> <div><span> axes[1, 0].legend()</span></div> <pre> </pre> <div><span> axes[1, 0].grid(True, alpha=0.3)</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> # Acceleration Profile</span></div> <pre> </pre> <div><span> accelerations = [-self.params.alpha * self.tau_gradient(r_i) for r_i in r]</span></div> <pre> </pre> <div><span> axes[1, 1].plot(t, accelerations, 'm-', linewidth=2)</span></div> <pre> </pre> <div><span> axes[1, 1].axhline(0, color='k', linestyle='--', alpha=0.3)</span></div> <pre> </pre> <div><span> axes[1, 1].set_xlabel('Time')</span></div> <pre> </pre> <div><span> axes[1, 1].set_ylabel('Acceleration')</span></div> <pre> </pre> <div><span> axes[1, 1].set_title('Particle Acceleration Profile')</span></div> <pre> </pre> <div><span> axes[1, 1].grid(True, alpha=0.3)</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> plt.tight_layout()</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> if filename:</span></div> <pre> </pre> <div><span> plt.savefig(filename, dpi=300, bbox_inches='tight')</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> plt.show()</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> def run_complete_analysis(self, r0: float, v0: float, t_max: float,</span></div> <pre> </pre> <div><span> filename: str = None) -> Dict:</span></div> <pre> </pre> <div><span> """</span></div> <pre> </pre> <div><span> Run complete analysis and return results</span></div> <pre> </pre> <div><span> """</span></div> <pre> </pre> <div><span> print(f"Running KLTOE particle dynamics simulation...")</span></div> <pre> </pre> <div><span> print(f"Initial conditions: r0={r0}, v0={v0}")</span></div> <pre> </pre> <div><span> print(f"Parameters: {self.params}")</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> # Run simulation</span></div> <pre> </pre> <div><span> t, r, v = self.simulate_particle(r0, v0, t_max)</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> # Analyze results</span></div> <pre> </pre> <div><span> analysis = self.analyze_flip(r0, v0, t_max)</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> # Visualize</span></div> <pre> </pre> <div><span> self.visualize_results(t, r, v, analysis, filename)</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> # Print results</span></div> <pre> </pre> <div><span> print("\nAnalysis Results:")</span></div> <pre> </pre> <div><span> print(f" Initial radius: {r0}")</span></div> <pre> </pre> <div><span> print(f" Initial velocity: {v0}")</span></div> <pre> </pre> <div><span> print(f" Flip radius: {analysis['flip_point']['radius']:.4f}")</span></div> <pre> </pre> <div><span> print(f" Flip time: {analysis['flip_point']['time']:.4f}")</span></div> <pre> </pre> <div><span> print(f" Maximum radius reached: {analysis['max_radius']:.4f}")</span></div> <pre> </pre> <div><span> print(f" Minimum radius reached: {analysis['min_radius']:.4f}")</span></div> <pre> </pre> <div><span> print(f" Final radius: {analysis['final_state']['radius']:.4f}")</span></div> <pre> </pre> <div><span> print(f" Final velocity: {analysis['final_state']['velocity']:.4f}")</span></div> <pre> </pre> <div><span> print(f" Flip occurred: {analysis['flip_occurred']}")</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> return {</span></div> <pre> </pre> <div><span> 'parameters': asdict(self.params),</span></div> <pre> </pre> <div><span> 'initial_conditions': {'r0': r0, 'v0': v0},</span></div> <pre> </pre> <div><span> 'analysis': analysis,</span></div> <pre> </pre> <div><span> 'time_series': {</span></div> <pre> </pre> <div><span> 't': t.tolist(),</span></div> <pre> </pre> <div><span> 'r': r.tolist(),</span></div> <pre> </pre> <div><span> 'v': v.tolist()</span></div> <pre> </pre> <div><span> }</span></div> <pre> </pre> <div><span> }</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span># Parameter sets for different scenarios</span></div> <pre> </pre> <div><span>PARAMETER_SETS = {</span></div> <pre> </pre> <div><span> 'standard': KLTOEParameters(alpha=1.0, r_s=1.0, A=0.5),</span></div> <pre> </pre> <div><span> 'strong_coupling': KLTOEParameters(alpha=2.0, r_s=1.0, A=0.5),</span></div> <pre> </pre> <div><span> 'large_core': KLTOEParameters(alpha=1.0, r_s=2.0, A=0.5),</span></div> <pre> </pre> <div><span> 'weak_coupling': KLTOEParameters(alpha=0.5, r_s=1.0, A=0.5),</span></div> <pre> </pre> <div><span> 'small_core': KLTOEParameters(alpha=1.0, r_s=0.5, A=0.5)</span></div> <pre> </pre> <div><span>}</span></div> <pre> </pre> </div> <h2>II. Comprehensive Analysis Suite</h2> <div> <div> </div> <pre> </pre> <div><span># ktoe_analysis.py</span></div> <pre> </pre> <div><span>import numpy as np</span></div> <pre> </pre> <div><span>from scipy import stats</span></div> <pre> </pre> <div><span>import matplotlib.pyplot as plt</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span>class KLTOEAnalysisSuite:</span></div> <pre> </pre> <div><span> """Comprehensive analysis of KLTOE particle dynamics"""</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> def __init__(self, simulator: ParticleDynamicsSimulator):</span></div> <pre> </pre> <div><span> self.simulator = simulator</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> def parameter_sweep(self, parameter_name: str, values: List[float],</span></div> <pre> </pre> <div><span> r0: float, v0: float, t_max: float) -> pd.DataFrame:</span></div> <pre> </pre> <div><span> """</span></div> <pre> </pre> <div><span> Sweep through parameter values and analyze results</span></div> <pre> </pre> <div><span> """</span></div> <pre> </pre> <div><span> results = []</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> for value in values:</span></div> <pre> </pre> <div><span> # Update parameter</span></div> <pre> </pre> <div><span> setattr(self.simulator.params, parameter_name, value)</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> # Run simulation</span></div> <pre> </pre> <div><span> analysis = self.simulator.analyze_flip(r0, v0, t_max)</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> # Record results</span></div> <pre> </pre> <div><span> result = {</span></div> <pre> </pre> <div><span> 'parameter': parameter_name,</span></div> <pre> </pre> <div><span> 'value': value,</span></div> <pre> </pre> <div><span> 'flip_radius': analysis['flip_point']['radius'],</span></div> <pre> </pre> <div><span> 'flip_time': analysis['flip_point']['time'],</span></div> <pre> </pre> <div><span> 'max_radius': analysis['max_radius'],</span></div> <pre> </pre> <div><span> 'min_radius': analysis['min_radius'],</span></div> <pre> </pre> <div><span> 'final_radius': analysis['final_state']['radius'],</span></div> <pre> </pre> <div><span> 'final_velocity': analysis['final_state']['velocity'],</span></div> <pre> </pre> <div><span> 'flip_occurred': analysis['flip_occurred']</span></div> <pre> </pre> <div><span> }</span></div> <pre> </pre> <div><span> results.append(result)</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> return pd.DataFrame(results)</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> def statistical_analysis(self, n_simulations: int = 100) -> Dict:</span></div> <pre> </pre> <div><span> """</span></div> <pre> </pre> <div><span> Run multiple simulations with random initial conditions</span></div> <pre> </pre> <div><span> """</span></div> <pre> </pre> <div><span> results = []</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> for i in range(n_simulations):</span></div> <pre> </pre> <div><span> # Random initial conditions</span></div> <pre> </pre> <div><span> r0 = np.random.uniform(2, 10) # Start outside critical radius</span></div> <pre> </pre> <div><span> v0 = np.random.uniform(-1, 1) # Random velocity</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> # Run simulation</span></div> <pre> </pre> <div><span> analysis = self.simulator.analyze_flip(r0, v0, 50.0)</span></div> <pre> </pre> <div><span> results.append(analysis)</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> # Convert to DataFrame</span></div> <pre> </pre> <div><span> df = pd.DataFrame(results)</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> # Calculate statistics</span></div> <pre> </pre> <div><span> stats_dict = {</span></div> <pre> </pre> <div><span> 'mean_flip_radius': df['flip_point.radius'].mean(),</span></div> <pre> </pre> <div><span> 'std_flip_radius': df['flip_point.radius'].std(),</span></div> <pre> </pre> <div><span> 'mean_flip_time': df['flip_point.time'].mean(),</span></div> <pre> </pre> <div><span> 'std_flip_time': df['flip_point.time'].std(),</span></div> <pre> </pre> <div><span> 'flip_occurrence_rate': df['flip_occurred'].mean(),</span></div> <pre> </pre> <div><span> 'mean_max_radius': df['max_radius'].mean(),</span></div> <pre> </pre> <div><span> 'mean_min_radius': df['min_radius'].mean()</span></div> <pre> </pre> <div><span> }</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> return stats_dict</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> def stability_analysis(self) -> Dict:</span></div> <pre> </pre> <div><span> """</span></div> <pre> </pre> <div><span> Analyze stability of particle trajectories</span></div> <pre> </pre> <div><span> """</span></div> <pre> </pre> <div><span> # Run simulations with slightly perturbed initial conditions</span></div> <pre> </pre> <div><span> base_analysis = self.simulator.analyze_flip(5.0, 0.0, 50.0)</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> perturbations = []</span></div> <pre> </pre> <div><span> for delta in np.linspace(-0.1, 0.1, 21):</span></div> <pre> </pre> <div><span> analysis = self.simulator.analyze_flip(5.0 + delta, 0.0, 50.0)</span></div> <pre> </pre> <div><span> perturbations.append({</span></div> <pre> </pre> <div><span> 'delta_r0': delta,</span></div> <pre> </pre> <div><span> 'flip_radius_diff': analysis['flip_point']['radius'] - base_analysis['flip_point']['radius'],</span></div> <pre> </pre> <div><span> 'flip_time_diff': analysis['flip_point']['time'] - base_analysis['flip_time'],</span></div> <pre> </pre> <div><span> 'final_radius_diff': analysis['final_state']['radius'] - base_analysis['final_state']['radius']</span></div> <pre> </pre> <div><span> })</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> return {</span></div> <pre> </pre> <div><span> 'base_analysis': base_analysis,</span></div> <pre> </pre> <div><span> 'perturbations': perturbations,</span></div> <pre> </pre> <div><span> 'sensitivity': {</span></div> <pre> </pre> <div><span> 'flip_radius_sensitivity': np.std([p['flip_radius_diff'] for p in perturbations]),</span></div> <pre> </pre> <div><span> 'flip_time_sensitivity': np.std([p['flip_time_diff'] for p in perturbations]),</span></div> <pre> </pre> <div><span> 'final_radius_sensitivity': np.std([p['final_radius_diff'] for p in perturbations])</span></div> <pre> </pre> <div><span> }</span></div> <pre> </pre> <div><span> }</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> def energy_analysis(self, t: np.ndarray, r: np.ndarray, v: np.ndarray) -> Dict:</span></div> <pre> </pre> <div><span> """</span></div> <pre> </pre> <div><span> Analyze energy conservation and transformation</span></div> <pre> </pre> <div><span> """</span></div> <pre> </pre> <div><span> # Calculate kinetic energy</span></div> <pre> </pre> <div><span> kinetic_energy = 0.5 * np.array(v)**2</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> # Calculate potential energy from τ field</span></div> <pre> </pre> <div><span> potential_energy = np.array([-self.simulator.params.alpha * self.simulator.tau_gradient(r_i) * r_i for r_i in r])</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> # Total energy</span></div> <pre> </pre> <div><span> total_energy = kinetic_energy + potential_energy</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> return {</span></div> <pre> </pre> <div><span> 'initial_kinetic': kinetic_energy[0],</span></div> <pre> </pre> <div><span> 'initial_potential': potential_energy[0],</span></div> <pre> </pre> <div><span> 'initial_total': total_energy[0],</span></div> <pre> </pre> <div><span> 'final_kinetic': kinetic_energy[-1],</span></div> <pre> </pre> <div><span> 'final_potential': potential_energy[-1],</span></div> <pre> </pre> <div><span> 'final_total': total_energy[-1],</span></div> <pre> </pre> <div><span> 'energy_conservation_error': (total_energy[-1] - total_energy[0]) / total_energy[0],</span></div> <pre> </pre> <div><span> 'energy_transformations': {</span></div> <pre> </pre> <div><span> 'kinetic_to_potential_ratio': kinetic_energy[-1] / potential_energy[-1],</span></div> <pre> </pre> <div><span> 'energy_fluctuation_amplitude': np.max(np.abs(np.diff(total_energy)))</span></div> <pre> </pre> <div><span> }</span></div> <pre> </pre> <div><span> }</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> def visualize_parameter_sweep(self, sweep_results: pd.DataFrame, parameter_name: str):</span></div> <pre> </pre> <div><span> """</span></div> <pre> </pre> <div><span> Visualize parameter sweep results</span></div> <pre> </pre> <div><span> """</span></div> <pre> </pre> <div><span> fig, axes = plt.subplots(2, 2, figsize=(15, 12))</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> # Flip radius vs parameter</span></div> <pre> </pre> <div><span> axes[0, 0].plot(sweep_results[parameter_name], sweep_results['flip_radius'], 'bo-')</span></div> <pre> </pre> <div><span> axes[0, 0].set_xlabel(parameter_name)</span></div> <pre> </pre> <div><span> axes[0, 0].set_ylabel('Flip Radius')</span></div> <pre> </pre> <div><span> axes[0, 0].set_title('Flip Radius vs Parameter')</span></div> <pre> </pre> <div><span> axes[0, 0].grid(True, alpha=0.3)</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> # Flip time vs parameter</span></div> <pre> </pre> <div><span> axes[0, 1].plot(sweep_results[parameter_name], sweep_results['flip_time'], 'ro-')</span></div> <pre> </pre> <div><span> axes[0, 1].set_xlabel(parameter_name)</span></div> <pre> </pre> <div><span> axes[0, 1].set_ylabel('Flip Time')</span></div> <pre> </pre> <div><span> axes[0, 1].set_title('Flip Time vs Parameter')</span></div> <pre> </pre> <div><span> axes[0, 1].grid(True, alpha=0.3)</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> # Final radius vs parameter</span></div> <pre> </pre> <div><span> axes[1, 0].plot(sweep_results[parameter_name], sweep_results['final_radius'], 'go-')</span></div> <pre> </pre> <div><span> axes[1, 0].set_xlabel(parameter_name)</span></div> <pre> </pre> <div><span> axes[1, 0].set_ylabel('Final Radius')</span></div> <pre> </pre> <div><span> axes[1, 0].set_title('Final Radius vs Parameter')</span></div> <pre> </pre> <div><span> axes[1, 0].grid(True, alpha=0.3)</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> # Flip occurrence rate</span></div> <pre> </pre> <div><span> axes[1, 1].plot(sweep_results[parameter_name], sweep_results['flip_occurred'], 'mo-')</span></div> <pre> </pre> <div><span> axes[1, 1].set_xlabel(parameter_name)</span></div> <pre> </pre> <div><span> axes[1, 1].set_ylabel('Flip Occurrence')</span></div> <pre> </pre> <div><span> axes[1, 1].set_title('Flip Occurrence Rate vs Parameter')</span></div> <pre> </pre> <div><span> axes[1, 1].grid(True, alpha=0.3)</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> plt.tight_layout()</span></div> <pre> </pre> <div><span> plt.show()</span></div> <pre> </pre> </div> <h2>III. Complete Experimental Protocol</h2> <div> <div> </div> <pre> </pre> <div><span># experimental_protocol.py</span></div> <pre> </pre> <div><span>from dataclasses import dataclass</span></div> <pre> </pre> <div><span>from typing import List, Tuple, Dict</span></div> <pre> </pre> <div><span>import numpy as np</span></div> <pre> </pre> <div><span>import pandas as pd</span></div> <pre> </pre> <div><span>import json</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span>@dataclass</span></div> <pre> </pre> <div><span>class ExperimentalParameters:</span></div> <pre> </pre> <div><span> """Complete experimental parameter set"""</span></div> <pre> </pre> <div><span> alpha: float # Coupling constant</span></div> <pre> </pre> <div><span> r_s: float # Critical radius</span></div> <pre> </pre> <div><span> A: float # Scale factor</span></div> <pre> </pre> <div><span> r0: float # Initial radius</span></div> <pre> </pre> <div><span> v0: float # Initial velocity</span></div> <pre> </pre> <div><span> t_max: float # Maximum simulation time</span></div> <pre> </pre> <div><span> n_points: int # Number of time points</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> def __str__(self):</span></div> <pre> </pre> <div><span> return (f"ExperimentalParameters(alpha={self.alpha}, r_s={self.r_s}, A={self.A}, "</span></div> <pre> </pre> <div><span> f"r0={self.r0}, v0={self.v0}, t_max={self.t_max}, n_points={self.n_points})")</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span>class KLTOEExperimentalProtocol:</span></div> <pre> </pre> <div><span> """Complete experimental protocol for KLTOE particle dynamics"""</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> def __init__(self, params: ExperimentalParameters):</span></div> <pre> </pre> <div><span> self.params = params</span></div> <pre> </pre> <div><span> self.simulator = ParticleDynamicsSimulator(KLTOEParameters(</span></div> <pre> </pre> <div><span> alpha=params.alpha, r_s=params.r_s, A=params.A</span></div> <pre> </pre> <div><span> ))</span></div> <pre> </pre> <div><span> self.analyzer = KLTOEAnalysisSuite(self.simulator)</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> def run_standard_test(self) -> Dict:</span></div> <pre> </pre> <div><span> """</span></div> <pre> </pre> <div><span> Run standard test with given parameters</span></div> <pre> </pre> <div><span> """</span></div> <pre> </pre> <div><span> print("Running standard KLTOE particle dynamics test...")</span></div> <pre> </pre> <div><span> print(f"Parameters: {self.params}")</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> # Run simulation</span></div> <pre> </pre> <div><span> t, r, v = self.simulator.simulate_particle(</span></div> <pre> </pre> <div><span> self.params.r0, self.params.v0, self.params.t_max, self.params.n_points</span></div> <pre> </pre> <div><span> )</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> # Analyze flip</span></div> <pre> </pre> <div><span> analysis = self.simulator.analyze_flip(self.params.r0, self.params.v0, self.params.t_max)</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> # Energy analysis</span></div> <pre> </pre> <div><span> energy_analysis = self.analyzer.energy_analysis(t, r, v)</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> # Create comprehensive results</span></div> <pre> </pre> <div><span> results = {</span></div> <pre> </pre> <div><span> 'parameters': asdict(self.params),</span></div> <pre> </pre> <div><span> 'initial_conditions': {'r0': self.params.r0, 'v0': self.params.v0},</span></div> <pre> </pre> <div><span> 'tau_field': {</span></div> <pre> </pre> <div><span> 'values': [self.simulator.tau_field(r_i) for r_i in r],</span></div> <pre> </pre> <div><span> 'gradient': [self.simulator.tau_gradient(r_i) for r_i in r]</span></div> <pre> </pre> <div><span> },</span></div> <pre> </pre> <div><span> 'analysis': analysis,</span></div> <pre> </pre> <div><span> 'energy_analysis': energy_analysis,</span></div> <pre> </pre> <div><span> 'time_series': {</span></div> <pre> </pre> <div><span> 't': t.tolist(),</span></div> <pre> </pre> <div><span> 'r': r.tolist(),</span></div> <pre> </pre> <div><span> 'v': v.tolist()</span></div> <pre> </pre> <div><span> }</span></div> <pre> </pre> <div><span> }</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> return results</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> def run_parameter_sweep(self, parameter_name: str, values: List[float]) -> pd.DataFrame:</span></div> <pre> </pre> <div><span> """</span></div> <pre> </pre> <div><span> Run parameter sweep and return results</span></div> <pre> </pre> <div><span> """</span></div> <pre> </pre> <div><span> print(f"Running parameter sweep for {parameter_name}...")</span></div> <pre> </pre> <div><span> print(f"Values: {values}")</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> # Create parameter sets</span></div> <pre> </pre> <div><span> param_sets = []</span></div> <pre> </pre> <div><span> for value in values:</span></div> <pre> </pre> <div><span> param_set = ExperimentalParameters(</span></div> <pre> </pre> <div><span> alpha=self.params.alpha,</span></div> <pre> </pre> <div><span> r_s=self.params.r_s,</span></div> <pre> </pre> <div><span> A=self.params.A,</span></div> <pre> </pre> <div><span> r0=self.params.r0,</span></div> <pre> </pre> <div><span> v0=self.params.v0,</span></div> <pre> </pre> <div><span> t_max=self.params.t_max,</span></div> <pre> </pre> <div><span> n_points=self.params.n_points</span></div> <pre> </pre> <div><span> )</span></div> <pre> </pre> <div><span> setattr(param_set, parameter_name, value)</span></div> <pre> </pre> <div><span> param_sets.append(param_set)</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> # Run simulations</span></div> <pre> </pre> <div><span> results = []</span></div> <pre> </pre> <div><span> for i, param_set in enumerate(param_sets):</span></div> <pre> </pre> <div><span> print(f"Running simulation {i+1}/{len(param_sets)}...")</span></div> <pre> </pre> <div><span> result = self.run_standard_test()</span></div> <pre> </pre> <div><span> results.append(result)</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> # Create DataFrame</span></div> <pre> </pre> <div><span> df = pd.DataFrame([{</span></div> <pre> </pre> <div><span> 'parameter_value': getattr(params, parameter_name),</span></div> <pre> </pre> <div><span> 'flip_radius': result['analysis']['flip_point']['radius'],</span></div> <pre> </pre> <div><span> 'flip_time': result['analysis']['flip_point']['time'],</span></div> <pre> </pre> <div><span> 'final_radius': result['analysis']['final_state']['radius'],</span></div> <pre> </pre> <div><span> 'final_velocity': result['analysis']['final_state']['velocity'],</span></div> <pre> </pre> <div><span> 'energy_conservation_error': result['energy_analysis']['energy_conservation_error']</span></div> <pre> </pre> <div><span> } for params, result in zip(param_sets, results)])</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> return df</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> def run_statistical_analysis(self, n_simulations: int = 100) -> pd.DataFrame:</span></div> <pre> </pre> <div><span> """</span></div> <pre> </pre> <div><span> Run statistical analysis with random initial conditions</span></div> <pre> </pre> <div><span> """</span></div> <pre> </pre> <div><span> print(f"Running statistical analysis with {n_simulations} simulations...")</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> results = []</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> for i in range(n_simulations):</span></div> <pre> </pre> <div><span> # Random initial conditions</span></div> <pre> </pre> <div><span> r0 = np.random.uniform(2, 10)</span></div> <pre> </pre> <div><span> v0 = np.random.uniform(-1, 1)</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> # Run simulation</span></div> <pre> </pre> <div><span> t, r, v = self.simulator.simulate_particle(r0, v0, self.params.t_max, self.params.n_points)</span></div> <pre> </pre> <div><span> analysis = self.simulator.analyze_flip(r0, v0, self.params.t_max)</span></div> <pre> </pre> <div><span> energy_analysis = self.analyzer.energy_analysis(t, r, v)</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> # Record results</span></div> <pre> </pre> <div><span> result = {</span></div> <pre> </pre> <div><span> 'simulation_id': i,</span></div> <pre> </pre> <div><span> 'r0': r0,</span></div> <pre> </pre> <div><span> 'v0': v0,</span></div> <pre> </pre> <div><span> 'flip_radius': analysis['flip_point']['radius'],</span></div> <pre> </pre> <div><span> 'flip_time': analysis['flip_point']['time'],</span></div> <pre> </pre> <div><span> 'final_radius': analysis['final_state']['radius'],</span></div> <pre> </pre> <div><span> 'final_velocity': analysis['final_state']['velocity'],</span></div> <pre> </pre> <div><span> 'energy_conservation_error': energy_analysis['energy_conservation_error'],</span></div> <pre> </pre> <div><span> 'flip_occurred': analysis['flip_occurred']</span></div> <pre> </pre> <div><span> }</span></div> <pre> </pre> <div><span> results.append(result)</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> if (i + 1) % max(1, n_simulations // 10) == 0:</span></div> <pre> </pre> <div><span> print(f"Completed {i+1}/{n_simulations} simulations")</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> return pd.DataFrame(results)</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> def save_results(self, results: Dict, filename: str = None):</span></div> <pre> </pre> <div><span> """</span></div> <pre> </pre> <div><span> Save results to file</span></div> <pre> </pre> <div><span> """</span></div> <pre> </pre> <div><span> if filename is None:</span></div> <pre> </pre> <div><span> filename = f"ktoe_particle_dynamics_results_{pd.Timestamp.now().strftime('%Y%m%d_%H%M%S')}.json"</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> with open(filename, 'w') as f:</span></div> <pre> </pre> <div><span> json.dump(results, f, indent=2, default=str)</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> print(f"Results saved to {filename}")</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> def load_results(self, filename: str) -> Dict:</span></div> <pre> </pre> <div><span> """</span></div> <pre> </pre> <div><span> Load results from file</span></div> <pre> </pre> <div><span> """</span></div> <pre> </pre> <div><span> with open(filename, 'r') as f:</span></div> <pre> </pre> <div><span> results = json.load(f)</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> print(f"Results loaded from {filename}")</span></div> <pre> </pre> <div><span> return results</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span># Example usage</span></div> <pre> </pre> <div><span>if __name__ == "__main__":</span></div> <pre> </pre> <div><span> # Define experimental parameters</span></div> <pre> </pre> <div><span> params = ExperimentalParameters(</span></div> <pre> </pre> <div><span> alpha=1.0,</span></div> <pre> </pre> <div><span> r_s=1.0,</span></div> <pre> </pre> <div><span> A=0.5,</span></div> <pre> </pre> <div><span> r0=5.0,</span></div> <pre> </pre> <div><span> v0=0.0,</span></div> <pre> </pre> <div><span> t_max=50.0,</span></div> <pre> </pre> <div><span> n_points=1000</span></div> <pre> </pre> <div><span> )</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> # Create protocol</span></div> <pre> </pre> <div><span> protocol = KLTOEExperimentalProtocol(params)</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> # Run standard test</span></div> <pre> </pre> <div><span> print("\nRunning standard test...")</span></div> <pre> </pre> <div><span> results = protocol.run_standard_test()</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> # Run parameter sweep</span></div> <pre> </pre> <div><span> print("\nRunning parameter sweep for alpha...")</span></div> <pre> </pre> <div><span> alpha_values = np.linspace(0.5, 2.0, 10)</span></div> <pre> </pre> <div><span> alpha_sweep = protocol.run_parameter_sweep('alpha', alpha_values.tolist())</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> # Run statistical analysis</span></div> <pre> </pre> <div><span> print("\nRunning statistical analysis...")</span></div> <pre> </pre> <div><span> stats_df = protocol.run_statistical_analysis(100)</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> # Save results</span></div> <pre> </pre> <div><span> protocol.save_results(results, "ktoe_standard_test.json")</span></div> <pre> </pre> <div><span> protocol.save_results(alpha_sweep.to_dict(orient='records'), "ktoe_alpha_sweep.json")</span></div> <pre> </pre> <div><span> protocol.save_results(stats_df.to_dict(orient='records'), "ktoe_statistical_analysis.json")</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> print("\nAll experiments completed successfully!")</span></div> <pre> </pre> </div> <h2>IV. Complete Implementation</h2> <div> <div> </div> <pre> </pre> <div><span># main_experiment.py</span></div> <pre> </pre> <div><span>import numpy as np</span></div> <pre> </pre> <div><span>import pandas as pd</span></div> <pre> </pre> <div><span>import json</span></div> <pre> </pre> <div><span>from ktoe_particle_dynamics import *</span></div> <pre> </pre> <div><span>from experimental_protocol import *</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span>def main():</span></div> <pre> </pre> <div><span> print("KLTOE Particle Dynamics Across the ∇τ Flip")</span></div> <pre> </pre> <div><span> print("=" * 60)</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> # Scenario 1: Standard Test</span></div> <pre> </pre> <div><span> print("\nScenario 1: Standard Test")</span></div> <pre> </pre> <div><span> print("-" * 40)</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> params = ExperimentalParameters(</span></div> <pre> </pre> <div><span> alpha=1.0,</span></div> <pre> </pre> <div><span> r_s=1.0,</span></div> <pre> </pre> <div><span> A=0.5,</span></div> <pre> </pre> <div><span> r0=5.0,</span></div> <pre> </pre> <div><span> v0=0.0,</span></div> <pre> </pre> <div><span> t_max=50.0,</span></div> <pre> </pre> <div><span> n_points=1000</span></div> <pre> </pre> <div><span> )</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> protocol = KLTOEExperimentalProtocol(params)</span></div> <pre> </pre> <div><span> results = protocol.run_standard_test()</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> # Scenario 2: Parameter Sweep</span></div> <pre> </pre> <div><span> print("\nScenario 2: Parameter Sweep")</span></div> <pre> </pre> <div><span> print("-" * 40)</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> alpha_values = np.linspace(0.5, 2.0, 10)</span></div> <pre> </pre> <div><span> alpha_sweep = protocol.run_parameter_sweep('alpha', alpha_values.tolist())</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> # Scenario 3: Statistical Analysis</span></div> <pre> </pre> <div><span> print("\nScenario 3: Statistical Analysis")</span></div> <pre> </pre> <div><span> print("-" * 40)</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> stats_df = protocol.run_statistical_analysis(100)</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> # Save all results</span></div> <pre> </pre> <div><span> timestamp = pd.Timestamp.now().strftime('%Y%m%d_%H%M%S')</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> protocol.save_results(results, f"ktoe_standard_test_{timestamp}.json")</span></div> <pre> </pre> <div><span> protocol.save_results(alpha_sweep.to_dict(orient='records'), </span></div> <pre> </pre> <div><span> f"ktoe_alpha_sweep_{timestamp}.json")</span></div> <pre> </pre> <div><span> protocol.save_results(stats_df.to_dict(orient='records'), </span></div> <pre> </pre> <div><span> f"ktoe_statistical_analysis_{timestamp}.json")</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span> # Print summary</span></div> <pre> </pre> <div><span> print("\n" + "=" * 60)</span></div> <pre> </pre> <div><span> print("EXPERIMENT SUMMARY")</span></div> <pre> </pre> <div><span> print("=" * 60)</span></div> <pre> </pre> <div><span> print(f"Standard Test: Flip occurred at r={results['analysis']['flip_point']['radius']:.4f}")</span></div> <pre> </pre> <div><span> print(f"Parameter Sweep: Alpha range tested from {alpha_values[0]:.2f} to {alpha_values[-1]:.2f}")</span></div> <pre> </pre> <div><span> print(f"Statistical Analysis: {len(stats_df)} simulations completed")</span></div> <pre> </pre> <div><span> print("\nAll analyses completed successfully!")</span></div> <pre> </pre> <div><span> print(f"Results saved with timestamp: {timestamp}")</span></div> <pre> </pre> <div> </div> <pre> </pre> <div><span>if __name__ == "__main__":</span></div> <pre> </pre> <div><span> main(</span></div> <pre> </pre> </div>