|
8 | 8 |
|
9 | 9 | public import Mathlib.Analysis.SpecialFunctions.RegularizedHypergeometric |
10 | 10 |
|
| 11 | +import Mathlib.Analysis.Calculus.SmoothSeries |
| 12 | +import Mathlib.Analysis.Complex.LocallyUniformLimit |
| 13 | +import Mathlib.Analysis.Normed.Module.Connected |
11 | 14 | import Mathlib.Analysis.SpecialFunctions.Complex.Analytic |
12 | 15 |
|
13 | 16 | /-! |
@@ -37,7 +40,6 @@ $J_a(0) = 0$ for all complex $a \ne 0$. For $a = 0$, we have $J_0(0) = 1$. |
37 | 40 |
|
38 | 41 | * Bessel function of the second kind |
39 | 42 | * Differential equations |
40 | | -* Generating functions |
41 | 43 | * Bessel's integrals |
42 | 44 |
|
43 | 45 | -/ |
@@ -203,4 +205,111 @@ theorem mul_deriv_besselJ_eq_besselJ_sub_one_int (a : ℤ) (x : ℂ) : |
203 | 205 | x * deriv (J a) x = x * J (a - 1) x - a * J a x := by |
204 | 206 | linear_combination two_mul_self_mul_besselJ a x + mul_deriv_besselJ_eq_besselJ_add_one_int a x |
205 | 207 |
|
| 208 | +theorem norm_besselJ_le_exp {a : ℂ} (ha : 0 ≤ a.re) (x : ℂ) : |
| 209 | + ‖J a x‖ ≤ ‖Gamma (a + 1)‖⁻¹ * ‖(x / 2) ^ a‖ * Real.exp (‖x / 2‖ ^ 2) := by |
| 210 | + unfold besselJ |
| 211 | + grw [norm_mul, regularizedHGFun_le_exp_of_one_le_re (by simpa using ha)] |
| 212 | + apply le_of_eq |
| 213 | + simp |
| 214 | + ring |
| 215 | + |
| 216 | +theorem norm_besselJ_le_exp_int (a : ℤ) (x : ℂ) : |
| 217 | + ‖J a x‖ ≤ (a.natAbs ! : ℝ)⁻¹ * ‖x / 2‖ ^ a.natAbs * Real.exp (‖x / 2‖ ^ 2) := by |
| 218 | + wlog! ha : 0 ≤ a |
| 219 | + · specialize this (-a) (-x) (by simpa using ha.le) |
| 220 | + simpa [besselJ_neg_comm] using this |
| 221 | + obtain ⟨a, rfl⟩ := Int.eq_ofNat_of_zero_le ha |
| 222 | + grw [norm_besselJ_le_exp (by simp)] |
| 223 | + simp [Gamma_nat_eq_factorial] |
| 224 | + |
| 225 | +-- Within a bounded set, `J a x * t ^ a` can be bounded uniformly by exp series terms. |
| 226 | +private theorem deriv_besselJ_mul_pow_le (t : ℂ) {s : Set ℂ} (hs : Bornology.IsBounded s) : |
| 227 | + ∃ u v, ∀ a : ℤ, ∀ x ∈ s, |
| 228 | + ‖J a x * t ^ a‖ ≤ (a.natAbs ! : ℝ)⁻¹ * (u ^ a.natAbs * ‖t ^ a‖) * v := by |
| 229 | + obtain ⟨x, hx⟩ := hs.exists_norm_le |
| 230 | + use ‖x / 2‖, Real.exp (‖x / 2‖ ^ 2) |
| 231 | + intro a y hy |
| 232 | + have hy' : ‖y / 2‖ ≤ ‖x / 2‖ := by |
| 233 | + grw [norm_div, hx y hy, le_abs_self x] |
| 234 | + simp |
| 235 | + grw [norm_mul, norm_besselJ_le_exp_int, hy', hy'] |
| 236 | + apply le_of_eq |
| 237 | + ring |
| 238 | + |
| 239 | +-- The uniform bound on `J a x * t ^ a` is summable |
| 240 | +private theorem summable_bound (u v : ℝ) (t : ℂ) : |
| 241 | + Summable fun a : ℤ ↦ (a.natAbs ! : ℝ)⁻¹ * (u ^ a.natAbs * ‖t ^ a‖) * v := by |
| 242 | + refine summable_int_iff_summable_nat_and_neg.mpr ⟨?_, ?_⟩ |
| 243 | + · simpa [mul_pow] using |
| 244 | + (NormedSpace.exp_series_hasSum_exp' (𝕂 := ℝ) (u * ‖t‖)).summable.mul_right v |
| 245 | + · simpa [mul_pow] using |
| 246 | + (NormedSpace.exp_series_hasSum_exp' (𝕂 := ℝ) (u * ‖t‖⁻¹)).summable.mul_right v |
| 247 | + |
| 248 | +theorem analyticOnNhd_tsum_besselJ_mul_pow (t : ℂ) : |
| 249 | + AnalyticOnNhd ℂ (∑' a : ℤ, J a · * t ^ a) Set.univ := by |
| 250 | + refine (analyticOnNhd_iff_differentiableOn isOpen_univ).mpr fun x _ ↦ ?_ |
| 251 | + obtain ⟨u, v, h⟩ := deriv_besselJ_mul_pow_le t (Metric.isBounded_ball (x := x) (r := 1)) |
| 252 | + exact differentiableOn_tsum_of_summable_norm (summable_bound u v t) |
| 253 | + (fun _ _ _ ↦ AnalyticAt.differentiableWithinAt (by fun_prop)) Metric.isOpen_ball h |
| 254 | + |>.differentiableAt (Metric.ball_mem_nhds _ (by simp)) |>.differentiableWithinAt |
| 255 | + |
| 256 | +theorem summable_besselJ_mul_pow (x : ℂ) (t : ℂ) : Summable (fun a : ℤ ↦ J a x * t ^ a) := by |
| 257 | + obtain ⟨u, v, h⟩ := deriv_besselJ_mul_pow_le t (Bornology.isBounded_singleton (x := x)) |
| 258 | + exact (summable_bound u v t).of_norm_bounded fun a ↦ h a x (Set.mem_singleton x) |
| 259 | + |
| 260 | +@[dlmf 10.12.E1] |
| 261 | +theorem tsum_besselJ_mul_pow (x : ℂ) {t : ℂ} (ht : t ≠ 0) : |
| 262 | + ∑' a : ℤ, J a x * t ^ a = exp ((x / 2) * (t - t⁻¹)) := by |
| 263 | + -- It sufficies to prove the equality in a ball at x = 0 where LHS is non-zero |
| 264 | + have : ∀ᶠ x in nhds 0, ∑' a : ℤ, J a x * t ^ a ≠ 0 := by |
| 265 | + apply (analyticOnNhd_tsum_besselJ_mul_pow t).continuous.continuousAt.eventually_ne |
| 266 | + simp [besselJ_zero] |
| 267 | + obtain ⟨r, hr0, hr⟩ := Metric.eventually_nhds_iff_ball.mp this |
| 268 | + revert x |
| 269 | + rw [← funext_iff] |
| 270 | + refine (analyticOnNhd_tsum_besselJ_mul_pow t).eq_of_eventuallyEq (fun x hx ↦ by fun_prop) |
| 271 | + (Metric.eventually_nhds_iff_ball.mpr ⟨r, hr0, ?_⟩) (z₀ := 0) |
| 272 | + -- It sufficies to prove that both sides agree on logDeriv, because they agree at x = 0 |
| 273 | + suffices Set.EqOn (logDeriv fun x ↦ ∑' a : ℤ, J a x * t ^ a) |
| 274 | + (logDeriv fun x ↦ cexp (x / 2 * (t - t⁻¹))) (Metric.ball 0 r) by |
| 275 | + obtain ⟨k, hk0, hk⟩ := logDeriv_eqOn_iff |
| 276 | + ((analyticOnNhd_tsum_besselJ_mul_pow t).differentiableOn.mono (by simp)) |
| 277 | + (by fun_prop) Metric.isOpen_ball Metric.isPreconnected_ball (by simp) hr |>.mp this |
| 278 | + have hk1 : k = 1 := by simpa [besselJ_zero] using (hk (show 0 ∈ _ by simpa using hr0)).symm |
| 279 | + simpa [hk1, Set.EqOn] using hk |
| 280 | + intro x hx |
| 281 | + calc |
| 282 | + _ = deriv (∑' a : ℤ, J a · * t ^ a) x / ∑' a : ℤ, J a x * t ^ a := by rw [logDeriv_apply] |
| 283 | + _ = (∑' a : ℤ, deriv (J a · * t ^ a) x) / ∑' a : ℤ, J a x * t ^ a := by |
| 284 | + obtain ⟨u, v, h⟩ := deriv_besselJ_mul_pow_le t (Metric.isBounded_ball (x := 0) (r := r)) |
| 285 | + rw [hasSum_deriv_of_summable_norm (summable_bound u v t) |
| 286 | + (fun _ _ _ ↦ AnalyticAt.differentiableWithinAt (by fun_prop)) Metric.isOpen_ball h hx |
| 287 | + |>.tsum_eq] |
| 288 | + _ = (∑' a : ℤ, (J (a - 1) x - J (a + 1) x) * t ^ a) / 2 / ∑' a : ℤ, J a x * t ^ a := by |
| 289 | + simp [← two_mul_deriv_besselJ_int, ← tsum_div_const, mul_assoc] |
| 290 | + _ = (∑' a : ℤ, (J (a - 1) x * t ^ (a - 1) * t - J (a + 1) x * t ^ (a + 1) * t⁻¹)) / |
| 291 | + 2 / ∑' a : ℤ, J a x * t ^ a := by |
| 292 | + simp_rw [sub_mul, ← zpow_neg_one, mul_assoc, ← zpow_add_one₀ ht, ← zpow_add₀ ht] |
| 293 | + simp |
| 294 | + _ = ((∑' a : ℤ, J (a - 1) x * t ^ (a - 1)) * t - (∑' a : ℤ, J (a + 1) x * t ^ (a + 1)) * t⁻¹) / |
| 295 | + 2 / ∑' a : ℤ, J a x * t ^ a := by |
| 296 | + rw [Summable.tsum_sub ?_ ?_] |
| 297 | + · simp_rw [tsum_mul_right] |
| 298 | + · simpa using ((Equiv.subRight 1).summable_iff.mpr (summable_besselJ_mul_pow x t)).mul_right t |
| 299 | + · simpa using ((Equiv.addRight 1).summable_iff.mpr |
| 300 | + (summable_besselJ_mul_pow x t)).mul_right t⁻¹ |
| 301 | + _ = ((∑' a : ℤ, J a x * t ^ a) * t - (∑' a : ℤ, J a x * t ^ a) * t⁻¹) / |
| 302 | + 2 / ∑' a : ℤ, J a x * t ^ a := by |
| 303 | + congrm (?_ * _ - ?_ * _) / _ / _ |
| 304 | + · simpa using (Equiv.subRight 1).tsum_eq (fun a : ℤ ↦ J a x * t ^ a) |
| 305 | + · simpa using (Equiv.addRight 1).tsum_eq (fun a : ℤ ↦ J a x * t ^ a) |
| 306 | + _ = (t - t⁻¹) / 2 := by field [hr x hx] |
| 307 | + _ = _ := by |
| 308 | + rw [logDeriv_apply, deriv_cexp (by fun_prop)] |
| 309 | + simp [field] |
| 310 | + |
| 311 | +theorem hasSum_besselJ_mul_pow (x : ℂ) {t : ℂ} (ht : t ≠ 0) : |
| 312 | + HasSum (fun a : ℤ ↦ J a x * t ^ a) (exp ((x / 2) * (t - t⁻¹))) := |
| 313 | + (summable_besselJ_mul_pow x t).hasSum_iff.mpr (tsum_besselJ_mul_pow x ht) |
| 314 | + |
206 | 315 | end Complex |
0 commit comments