quot; as it avoids the derivative issue entirely. > [!note] Physical Interpretation > White noise models rapid, uncorrelated fluctuations: > - Thermal noise in circuits > - Molecular collisions in fluids > - Market microstructure noise > > [Parrondo Part 3 - Stochastic Integrals](https://youtu.be/9zfw_CoPYNE) > - [2:30](https://youtu.be/9zfw_CoPYNE?t=150) - White noise properties > - [8:15](https://youtu.be/9zfw_CoPYNE?t=495) - Connection to stochastic integrals > - [14:00](https://youtu.be/9zfw_CoPYNE?t=840) - Riemann sums for stochastic integrals > - [22:45](https://youtu.be/9zfw_CoPYNE?t=1365) - Itô vs Stratonovich interpretations > - [28:30](https://youtu.be/9zfw_CoPYNE?t=1710) - Physical meaning of stochastic integrals #### Properties of White Noise **Statistical characteristics**: - Mean: $E[\varepsilon(t)] = 0$ - Autocorrelation: $E[\varepsilon(t_1)\varepsilon(t_2)] = \sigma^2\delta(t_2 - t_1)$ - **Implication**: The correlation of white noise across time is zero - Spectral density: Constant across all frequencies (hence "white") #### Rigorous Interpretation White noise exists as a **generalized stochastic process** (distribution-valued): For test function $\phi(t)$: $\int_0^T \xi(t)\phi(t)dt = \int_0^T \phi(t)dW(t)$ This gives meaning to SDEs of the form: $\frac{dy}{dt} = -\alpha y - \xi(t)y$ where we understand white noise as the derivative of the Wiener process. By integrating: $dy = -\alpha y\, dt - \xi(t)y\, dt$ $\Rightarrow y(t) - y_0 = -\alpha\int_0^t y\, d\tilde{t} - \int_0^t y\, dW(\tilde{t})$ Rewritten rigorously as: $dy = -\alpha y\, dt - y\, dW(t)$ > [!important] The Stage is Set > We now have all the pieces: > - Wiener process with its autocorrelation structure > - White noise as its formal derivative with delta correlation > - The integral formulation of SDEs > > But what does the stochastic integral $\int_0^t y\, dW(\tilde{t})$ actually mean? This leads us to the crucial example: "Suppose that somehow $y$ returned the Wiener process itself..." which reveals why we need Itô's formula. See [[Ito-Formula]] for the resolution. --- 🚧 🚧 🚧 🚧 🚧 🚧 🚧 🚧 🚧 🚧 🚧 🚧 🚧 🚧 🚧 🚧 🚧 🚧 🚧 🚧 🚧 🚧 🚧 🚧 🚧 🚧 🚧 🚧 --- ## 5. Path Properties ### Continuous but Nowhere Differentiable > [!warning] Paradoxical Nature > Brownian motion paths are: > - **Continuous** everywhere (with probability 1) > - **Differentiable** nowhere (with probability 1) > - Of **unbounded variation** on any interval > - Of **finite quadratic variation** equal to the time elapsed ### Hölder Continuity **Theorem**: With probability 1, sample paths are: - Hölder continuous with exponent $\alpha < 1/2$ - NOT Hölder continuous with exponent $\alpha > 1/2$ This means: $|W(t) - W(s)| \leq C|t - s|^\alpha$ for $\alpha < 1/2$ ### Self-Similarity (Fractal Nature) **Scaling Property**: For any $c > 0$: $\{W(ct)\}_{t \geq 0} \stackrel{d}{=} \{\sqrt{c} \cdot W(t)\}_{t \geq 0}$ This makes Brownian motion a fractal with Hausdorff dimension 3/2 in the plane. ### Sample Path Behavior ```python import numpy as np import matplotlib.pyplot as plt def wiener_process(T=1, n_steps=1000, n_paths=1): """ Generate sample paths of a Wiener process Parameters: ----------- T : float - final time n_steps : int - number of time steps n_paths : int - number of sample paths """ dt = T / n_steps times = np.linspace(0, T, n_steps + 1) # Generate increments: dW ~ N(0, dt) dW = np.random.normal(0, np.sqrt(dt), (n_paths, n_steps)) # Cumulative sum to get paths W = np.zeros((n_paths, n_steps + 1)) W[:, 1:] = np.cumsum(dW, axis=1) return times, W # Demonstrate path properties fig, axes = plt.subplots(2, 2, figsize=(12, 10)) # 1. Multiple sample paths times, paths = wiener_process(T=1, n_paths=5) for path in paths: axes[0, 0].plot(times, path, alpha=0.7) axes[0, 0].set_title('Sample Paths of Wiener Process') axes[0, 0].set_xlabel('Time') axes[0, 0].set_ylabel('W(t)') axes[0, 0].grid(True, alpha=0.3) # 2. Zoom in to show continuity but roughness times_fine, path_fine = wiener_process(T=0.01, n_steps=1000, n_paths=1) axes[0, 1].plot(times_fine, path_fine[0], 'b-', linewidth=0.5) axes[0, 1].set_title('Zoomed View: Continuous but Rough') axes[0, 1].set_xlabel('Time') axes[0, 1].set_ylabel('W(t)') axes[0, 1].grid(True, alpha=0.3) # 3. Distribution at fixed time n_simulations = 10000 final_values = [wiener_process(T=1, n_steps=100, n_paths=1)[1][0, -1] for _ in range(n_simulations)] axes[1, 0].hist(final_values, bins=50, density=True, alpha=0.7, edgecolor='black') x = np.linspace(-4, 4, 100) axes[1, 0].plot(x, (1/np.sqrt(2*np.pi))*np.exp(-x**2/2), 'r-', label='N(0,1) theoretical') axes[1, 0].set_title(f'Distribution at t=1 (n={n_simulations})') axes[1, 0].set_xlabel('W(1)') axes[1, 0].set_ylabel('Density') axes[1, 0].legend() axes[1, 0].grid(True, alpha=0.3) # 4. Quadratic variation times, path = wiener_process(T=1, n_steps=1000, n_paths=1) increments = np.diff(path[0]) cumulative_qv = np.cumsum(increments**2) axes[1, 1].plot(times[1:], cumulative_qv, label='Cumulative (dW)²') axes[1, 1].plot(times[1:], times[1:], 'r--', label='Time (theoretical)') axes[1, 1].set_title('Quadratic Variation') axes[1, 1].set_xlabel('Time') axes[1, 1].set_ylabel('Σ(dW)²') axes[1, 1].legend() axes[1, 1].grid(True, alpha=0.3) plt.tight_layout() plt.show() ``` --- ## 6. Martingale Property > [!info] Video Resource > [Parrondo Part 4 - Itô's Formula](https://youtu.be/h1eNpKDOa2c) > - [4:15](https://youtu.be/h1eNpKDOa2c?t=255) - Martingale property introduction > - [9:30](https://youtu.be/h1eNpKDOa2c?t=570) - Itô's formula derivation > - [16:00](https://youtu.be/h1eNpKDOa2c?t=960) - The chain rule modification > - [23:45](https://youtu.be/h1eNpKDOa2c?t=1425) - Examples and applications > - [31:00](https://youtu.be/h1eNpKDOa2c?t=1860) - Connection to SDEs ### Definition and Significance The Wiener process is a **martingale** with respect to its natural filtration $\mathcal{F}_t = \sigma(W(s) : s \leq t)$: $E[W(t) | \mathcal{F}_s] = W(s) \quad \text{for all } t \geq s$ **Proof**: Using independent increments: $E[W(t) | \mathcal{F}_s] = E[W(s) + (W(t) - W(s)) | \mathcal{F}_s] = W(s) + E[W(t) - W(s)] = W(s)$ ### Related Martingales 1. **Squared process with drift correction**: $W^2(t) - t$ is a martingale 2. **Exponential martingale**: $\exp(\theta W(t) - \frac{\theta^2 t}{2})$ is a martingale 3. **Stochastic integrals**: $\int_0^t f(s) dW(s)$ is a martingale (under conditions) > [!info] Financial Interpretation > The martingale property means "fair game" - the best prediction of future value is the current value. This is the mathematical foundation of the efficient market hypothesis. --- ## 7. Quadratic Variation ### The Fundamental Difference from Classical Calculus In ordinary calculus, for smooth functions: $(df)^2 = 0$ (infinitesimal of higher order). For Brownian motion: $(dW)^2 = dt$ (first-order in time!) ### Formal Statement **Theorem (Quadratic Variation)**: For any partition $0 = t_0 < t_1 < \cdots < t_n = T$ with mesh size $\delta \to 0$: $\sum_{i=0}^{n-1} [W(t_{i+1}) - W(t_i)]^2 \xrightarrow{P} T$ ### Implications for Stochastic Calculus This non-zero quadratic variation leads to: 1. **Modified chain rule** (Itô's formula): $df(W(t)) = f'(W(t))dW(t) + \frac{1}{2}f''(W(t))dt$ The extra $\frac{1}{2}f''(W(t))dt$ term arises from $(dW)^2 = dt$. 2. **Itô vs. Stratonovich integrals**: Different conventions for handling this quadratic variation > [!example] The Key Example (from F21 Notes) > The difference between Itô and Stratonovich becomes clear when considering $\int_0^t W(\tilde{t}) dW(\tilde{t})$. This example, where "y returns the Wiener process itself," shows why the chain rule must be modified. > > See [Parrondo Part 4 - Itô's Formula](https://youtu.be/h1eNpKDOa2c) > - [12:30](https://youtu.be/h1eNpKDOa2c?t=750) - The $\int W dW$ example > - [18:00](https://youtu.be/h1eNpKDOa2c?t=1080) - Itô vs Stratonovich difference > > This is explored in detail in [[Ito-Formula]]. > [!important] Key Insight from F21 Notes > "The second order differential of the Wiener process is first order in time!" > This fundamentally changes the calculus and is why SDEs require special treatment. --- ## 8. Computational Simulation ### Efficient Generation Methods ```python class WienerProcess: """ Class for generating and analyzing Wiener process paths """ def __init__(self, T=1, n_steps=1000, seed=None): self.T = T self.n_steps = n_steps self.dt = T / n_steps self.times = np.linspace(0, T, n_steps + 1) if seed: np.random.seed(seed) def generate_path(self, drift=0, volatility=1): """ Generate a path of generalized Brownian motion B(t) = drift * t + volatility * W(t) """ # Standard Brownian increments dW = np.random.normal(0, np.sqrt(self.dt), self.n_steps) # Cumulative sum for Wiener process W = np.concatenate([[0], np.cumsum(dW)]) # Add drift if specified B = drift * self.times + volatility * W return B def estimate_quadratic_variation(self, path): """ Estimate quadratic variation from a sample path """ increments = np.diff(path) qv = np.sum(increments**2) return qv def test_martingale_property(self, n_simulations=10000): """ Verify E[W(t)|F(s)] = W(s) numerically """ s_idx = self.n_steps // 2 # Midpoint conditional_values = [] for _ in range(n_simulations): path = self.generate_path() W_s = path[s_idx] W_T = path[-1] conditional_values.append((W_s, W_T)) # Group by W(s) values and check conditional expectation conditional_values = np.array(conditional_values) # Bin W(s) values bins = np.percentile(conditional_values[:, 0], np.linspace(0, 100, 11)) print("Martingale Property Test:") print("E[W(T)|W(s)] should equal W(s)") print("-" * 40) for i in range(len(bins)-1): mask = (conditional_values[:, 0] >= bins[i]) & \ (conditional_values[:, 0] < bins[i+1]) if np.sum(mask) > 0: W_s_mean = np.mean(conditional_values[mask, 0]) W_T_mean = np.mean(conditional_values[mask, 1]) print(f"W(s) ≈ {W_s_mean:.3f}, E[W(T)|W(s)] ≈ {W_T_mean:.3f}") # Example usage wp = WienerProcess(T=1, n_steps=1000) # Generate and analyze a sample path path = wp.generate_path() qv = wp.estimate_quadratic_variation(path) print(f"Quadratic variation: {qv:.3f} (theoretical: {wp.T:.3f})") # Test martingale property wp.test_martingale_property(n_simulations=5000) ``` ### Visualization of Key Properties ```python def visualize_wiener_properties(): """ Comprehensive visualization of Wiener process properties """ fig = plt.figure(figsize=(15, 10)) # 1. Self-similarity ax1 = plt.subplot(2, 3, 1) wp = WienerProcess(T=1, n_steps=1000) path = wp.generate_path() # Original and scaled versions ax1.plot(wp.times, path, 'b-', alpha=0.7, label='W(t)') # Scale by factor 4 c = 4 times_scaled = wp.times / c path_scaled = path / np.sqrt(c) ax1.plot(times_scaled, path_scaled, 'r--', alpha=0.7, label=f'W(t/{c})/√{c}') ax1.set_title('Self-Similarity') ax1.set_xlabel('Time') ax1.legend() ax1.grid(True, alpha=0.3) # 2. Increments distribution ax2 = plt.subplot(2, 3, 2) increments = np.diff(path) ax2.hist(increments, bins=50, density=True, alpha=0.7, edgecolor='black', label='Empirical') x = np.linspace(increments.min(), increments.max(), 100) theoretical = (1/np.sqrt(2*np.pi*wp.dt)) * np.exp(-x**2/(2*wp.dt)) ax2.plot(x, theoretical, 'r-', label=f'N(0,{wp.dt:.4f})') ax2.set_title('Increment Distribution') ax2.set_xlabel('dW') ax2.set_ylabel('Density') ax2.legend() ax2.grid(True, alpha=0.3) # 3. Maximum and minimum ax3 = plt.subplot(2, 3, 3) n_paths = 100 max_vals = [] min_vals = [] for _ in range(n_paths): path = wp.generate_path() max_vals.append(np.max(path)) min_vals.append(np.min(path)) ax3.hist(max_vals, bins=30, alpha=0.5, label='Max(W)', color='red') ax3.hist(min_vals, bins=30, alpha=0.5, label='Min(W)', color='blue') ax3.set_title('Distribution of Extrema') ax3.set_xlabel('Value') ax3.set_ylabel('Frequency') ax3.legend() ax3.grid(True, alpha=0.3) # 4. First passage time ax4 = plt.subplot(2, 3, 4) barrier = 1.0 first_passage_times = [] for _ in range(1000): path = wp.generate_path() crossing_idx = np.where(path >= barrier)[0] if len(crossing_idx) > 0: first_passage_times.append(wp.times[crossing_idx[0]]) ax4.hist(first_passage_times, bins=30, density=True, alpha=0.7, edgecolor='black') ax4.set_title(f'First Passage Time (barrier={barrier})') ax4.set_xlabel('Time') ax4.set_ylabel('Density') ax4.grid(True, alpha=0.3) # 5. 2D Brownian motion ax5 = plt.subplot(2, 3, 5) path_x = wp.generate_path() path_y = wp.generate_path() ax5.plot(path_x, path_y, 'b-', alpha=0.5, linewidth=0.5) ax5.plot(0, 0, 'go', markersize=8, label='Start') ax5.plot(path_x[-1], path_y[-1], 'ro', markersize=8, label='End') ax5.set_title('2D Brownian Motion') ax5.set_xlabel('X') ax5.set_ylabel('Y') ax5.legend() ax5.grid(True, alpha=0.3) ax5.axis('equal') # 6. Running maximum ax6 = plt.subplot(2, 3, 6) path = wp.generate_path() running_max = np.maximum.accumulate(path) ax6.plot(wp.times, path, 'b-', alpha=0.7, label='W(t)') ax6.plot(wp.times, running_max, 'r-', alpha=0.7, label='max(W(s), s≤t)') ax6.fill_between(wp.times, path, running_max, alpha=0.3) ax6.set_title('Running Maximum') ax6.set_xlabel('Time') ax6.set_ylabel('Value') ax6.legend() ax6.grid(True, alpha=0.3) plt.tight_layout() plt.show() visualize_wiener_properties() ``` --- ## 9. Applications ### Physics and Chemistry - **Molecular diffusion**: Heat equation emerges from Brownian motion limit - **Polymer physics**: Random coil configurations - **Quantum mechanics**: Path integral formulation ### Finance - **Stock prices**: Geometric Brownian motion model $dS = \mu S dt + \sigma S dW$ - **Interest rates**: Vasicek, CIR models - **Option pricing**: Black-Scholes framework > [!info] Applications Video > [Parrondo Part 5 - Applications and Examples](https://youtu.be/7J82tcLynaU) > - [2:00](https://youtu.be/7J82tcLynaU?t=120) - Finance applications > - [10:30](https://youtu.be/7J82tcLynaU?t=630) - Physics and diffusion > - [18:15](https://youtu.be/7J82tcLynaU?t=1095) - Numerical methods > - [25:00](https://youtu.be/7J82tcLynaU?t=1500) - Real-world examples > - [32:45](https://youtu.be/7J82tcLynaU?t=1965) - Future directions ### Engineering - **Signal processing**: Modeling noise in communication systems - **Control theory**: Stochastic optimal control - **Filtering**: Kalman filter for state estimation ### Biology - **Population genetics**: Genetic drift - **Neuroscience**: Neuronal membrane potential fluctuations - **Ecology**: Animal foraging patterns --- ## 10. Exercises ### Conceptual Understanding 1. **Path Roughness**: Explain why $E[|W(t+h) - W(t)|] = \sqrt{\frac{2h}{\pi}}$. What does this tell us about the typical size of increments? 2. **Scaling Intuition**: If you observe Brownian motion for 1 second vs. 1 hour, how do the typical displacements compare? Why? ### Analytical Problems 3. **Covariance**: Prove that $\text{Cov}(W(s), W(t)) = \min\{s,t\}$ using the definition of covariance and properties of Brownian motion. 4. **Reflection Principle**: Show that for $a > 0$: $P(\max_{0 \leq s \leq t} W(s) \geq a) = 2P(W(t) \geq a)$ 5. **Exponential Martingale**: Verify that $M(t) = e^{\theta W(t) - \frac{\theta^2 t}{2}}$ is a martingale. ### Computational Exercises 6. **Quadratic Variation**: Simulate 1000 paths and verify that the sample quadratic variation converges to $t$ as the partition gets finer. 7. **Hitting Times**: For barrier $b > 0$, estimate the distribution of $\tau_b = \inf\{t : W(t) = b\}$. Compare with theoretical density: $f_{\tau_b}(t) = \frac{b}{\sqrt{2\pi t^3}} e^{-b^2/(2t)}$ ### Advanced Problems 8. **Law of Iterated Logarithm**: Investigate computationally: $\limsup_{t \to \infty} \frac{W(t)}{\sqrt{2t \log \log t}} = 1 \quad \text{a.s.}$ 9. **Brownian Bridge**: Construct and analyze a Brownian bridge (Brownian motion conditioned to return to 0 at time T): $B(t) = W(t) - \frac{t}{T}W(T)$ 10. **Feynman-Kac Formula**: Use simulation to verify that the solution to: $\frac{\partial u}{\partial t} + \frac{1}{2}\frac{\partial^2 u}{\partial x^2} - V(x)u = 0$ with $u(x,T) = f(x)$ is given by: $u(x,t) = E\left[f(W_T) e^{-\int_t^T V(W_s)ds} | W_t = x\right]$ --- ## Cross-References - [[Random-Walks]]: Discrete foundation and limiting procedures - [[Ito-Formula]]: The modified chain rule for Brownian motion - [[SDE-Fundamentals]]: Using Brownian motion to build SDEs - White noise, the formal derivative of Brownian motion: see [[Wiener-Process#4. L² Basis Construction]] above - Martingales: see [[Wiener-Process#6. Martingale Property]] above - Stochastic integration with respect to Brownian motion: see [[SDE-Fundamentals#3. The Stochastic Integral]] --- ## References ### Primary Sources - Wiener, N. (1923). "Differential Space." *Journal of Mathematics and Physics*, 2, 131-174 - Einstein, A. (1905). "Über die von der molekularkinetischen Theorie der Wärme geforderte Bewegung" - Bachelier, L. (1900). "Théorie de la spéculation" ### Course Materials - Evans, L.C. "An Introduction to Stochastic Differential Equations" - Chapter 3 - MATH310 F21 Notes: Sections on Brownian Motion and quadratic variation - Parrondo Lecture Series: Parts 1-3 on Wiener process construction - Random Walks F24: Foundation for continuum limit ### Additional Reading - Karatzas, I. & Shreve, S. "Brownian Motion and Stochastic Calculus" - Øksendal, B. "Stochastic Differential Equations: An Introduction with Applications" - Mörters, P. & Peres, Y. "Brownian Motion"