Physicists Hermite Polynomial #
This file may eventually be upstreamed to Mathlib.
The Physicists Hermite polynomial are defined as polynomials over ℤ
in X
recursively
with physHermite 0 = 1
and
physHermite (n + 1) = 2 • X * physHermite n - derivative (physHermite n)
.
This polynomial will often be cast as a function ℝ → ℝ
by evaluating the polynomial at X
.
Equations
Instances For
theorem
PhysLean.coeff_physHermite_succ_succ
(n k : ℕ)
:
(physHermite (n + 1)).coeff (k + 1) = 2 * (physHermite n).coeff k - (↑k + 2) * (physHermite n).coeff (k + 2)
@[simp]
@[simp]
instance
PhysLean.instCoeFunPolynomialIntForallReal_physLean :
CoeFun (Polynomial ℤ) fun (x : Polynomial ℤ) => ℝ → ℝ
Equations
- PhysLean.instCoeFunPolynomialIntForallReal_physLean = { coe := fun (p : Polynomial ℤ) (x : ℝ) => (Polynomial.aeval x) p }
theorem
PhysLean.physHermite_pow
(n m : ℕ)
(x : ℝ)
:
(fun (x : ℝ) => (Polynomial.aeval x) (physHermite n)) x ^ m = (Polynomial.aeval x) (physHermite n ^ m)
theorem
PhysLean.physHermite_succ_fun
(n : ℕ)
:
(fun (x : ℝ) => (Polynomial.aeval x) (physHermite (n + 1))) = ((2 • fun (x : ℝ) => x) * fun (x : ℝ) => (Polynomial.aeval x) (physHermite n)) - (2 * ↑n) • fun (x : ℝ) => (Polynomial.aeval x) (physHermite (n - 1))
theorem
PhysLean.physHermite_succ_fun'
(n : ℕ)
:
(fun (x : ℝ) => (Polynomial.aeval x) (physHermite (n + 1))) = fun (x : ℝ) =>
2 • x * (fun (x : ℝ) => (Polynomial.aeval x) (physHermite n)) x - (2 * ↑n) • (fun (x : ℝ) => (Polynomial.aeval x) (physHermite (n - 1))) x
theorem
PhysLean.iterated_deriv_physHermite_eq_aeval
(n m : ℕ)
:
(deriv^[m] fun (x : ℝ) => (Polynomial.aeval x) (physHermite n)) = fun (x : ℝ) =>
(Polynomial.aeval x) ((⇑Polynomial.derivative)^[m] (physHermite n))
theorem
PhysLean.physHermite_differentiableAt
(n : ℕ)
(x : ℝ)
:
DifferentiableAt ℝ (fun (x : ℝ) => (Polynomial.aeval x) (physHermite n)) x
theorem
PhysLean.deriv_physHermite_differentiableAt
(n m : ℕ)
(x : ℝ)
:
DifferentiableAt ℝ (deriv^[m] fun (x : ℝ) => (Polynomial.aeval x) (physHermite n)) x
theorem
PhysLean.deriv_physHermite
(n : ℕ)
:
(deriv fun (x : ℝ) => (Polynomial.aeval x) (physHermite n)) = 2 * ↑n * fun (x : ℝ) => (Polynomial.aeval x) (physHermite (n - 1))
theorem
PhysLean.fderiv_physHermite
{E : Type u_1}
[NormedAddCommGroup E]
[NormedSpace ℝ E]
(x : E)
(f : E → ℝ)
(hf : DifferentiableAt ℝ f x)
(n : ℕ)
:
fderiv ℝ (fun (x : E) => (fun (x : ℝ) => (Polynomial.aeval x) (physHermite n)) (f x)) x = (2 * ↑n * (fun (x : ℝ) => (Polynomial.aeval x) (physHermite (n - 1))) (f x)) • fderiv ℝ f x
@[simp]
theorem
PhysLean.deriv_physHermite'
(x : ℝ)
(f : ℝ → ℝ)
(hf : DifferentiableAt ℝ f x)
(n : ℕ)
:
deriv (fun (x : ℝ) => (fun (x : ℝ) => (Polynomial.aeval x) (physHermite n)) (f x)) x = 2 * ↑n * (fun (x : ℝ) => (Polynomial.aeval x) (physHermite (n - 1))) (f x) * deriv f x
theorem
PhysLean.physHermite_parity
(n : ℕ)
(x : ℝ)
:
(fun (x : ℝ) => (Polynomial.aeval x) (physHermite n)) (-x) = (-1) ^ n * (fun (x : ℝ) => (Polynomial.aeval x) (physHermite n)) x
Relationship to Gaussians #
theorem
PhysLean.guassian_integrable_polynomial
{b : ℝ}
(hb : 0 < b)
(P : Polynomial ℤ)
:
MeasureTheory.Integrable (fun (x : ℝ) => (Polynomial.aeval x) P * Real.exp (-b * x ^ 2)) MeasureTheory.volume
theorem
PhysLean.guassian_integrable_polynomial_cons
{b c : ℝ}
(hb : 0 < b)
(P : Polynomial ℤ)
:
MeasureTheory.Integrable (fun (x : ℝ) => (Polynomial.aeval (c * x)) P * Real.exp (-b * x ^ 2)) MeasureTheory.volume
theorem
PhysLean.physHermite_gaussian_integrable
(n p m : ℕ)
:
MeasureTheory.Integrable
((deriv^[m] fun (x : ℝ) => (Polynomial.aeval x) (physHermite p)) * deriv^[n] fun (x : ℝ) => Real.exp (-x ^ 2))
MeasureTheory.volume
theorem
PhysLean.integral_physHermite_mul_physHermite_eq_integral_deriv_inductive
(n m p : ℕ)
(hpm : p ≤ m)
:
theorem
PhysLean.integral_physHermite_mul_physHermite_eq_integral_deriv
(n m : ℕ)
:
∫ (x : ℝ), (fun (x : ℝ) => (Polynomial.aeval x) (physHermite n)) x * (fun (x : ℝ) => (Polynomial.aeval x) (physHermite m)) x * Real.exp (-x ^ 2) = ∫ (x : ℝ), deriv^[m] (fun (x : ℝ) => (Polynomial.aeval x) (physHermite n)) x * Real.exp (-x ^ 2)
theorem
PhysLean.physHermite_orthogonal_lt
{n m : ℕ}
(hnm : n < m)
:
∫ (x : ℝ), (fun (x : ℝ) => (Polynomial.aeval x) (physHermite n)) x * (fun (x : ℝ) => (Polynomial.aeval x) (physHermite m)) x * Real.exp (-x ^ 2) = 0
theorem
PhysLean.physHermite_orthogonal
{n m : ℕ}
(hnm : n ≠ m)
:
∫ (x : ℝ), (fun (x : ℝ) => (Polynomial.aeval x) (physHermite n)) x * (fun (x : ℝ) => (Polynomial.aeval x) (physHermite m)) x * Real.exp (-x ^ 2) = 0
theorem
PhysLean.physHermite_orthogonal_cons
{n m : ℕ}
(hnm : n ≠ m)
(c : ℝ)
:
∫ (x : ℝ), (fun (x : ℝ) => (Polynomial.aeval x) (physHermite n)) (c * x) * (fun (x : ℝ) => (Polynomial.aeval x) (physHermite m)) (c * x) * Real.exp (-c ^ 2 * x ^ 2) = 0
@[irreducible]
theorem
PhysLean.polynomial_mem_physHermite_span_induction
(P : Polynomial ℤ)
(n : ℕ)
(hn : P.natDegree = n)
:
(fun (x : ℝ) => (Polynomial.aeval x) P) ∈ Submodule.span ℝ (Set.range fun (n : ℕ) (x : ℝ) => (Polynomial.aeval x) (physHermite n))
theorem
PhysLean.polynomial_mem_physHermite_span
(P : Polynomial ℤ)
:
(fun (x : ℝ) => (Polynomial.aeval x) P) ∈ Submodule.span ℝ (Set.range fun (n : ℕ) (x : ℝ) => (Polynomial.aeval x) (physHermite n))
theorem
PhysLean.cos_mem_physHermite_span_topologicalClosure
(c : ℝ)
:
(fun (x : ℝ) => Real.cos (c * x)) ∈ (Submodule.span ℝ (Set.range fun (n : ℕ) (x : ℝ) => (Polynomial.aeval x) (physHermite n))).topologicalClosure