using Plots, ComplexPhasePortrait, ApproxFun, SingularIntegralEquations, DifferentialEquations
gr();
Dr. Sheehan Olver
This lecture we do the following:
Given a family of orthogonal polynomials pk(x) with respect to the weight w(x) on (a,b), we always know it satisfies a three-term recurrence: xp0(x)=a0p0(x)+b0p1(x)xpk(x)=ckpk−1(x)+akpk(x)+bkpk+1(x)
Consider now the Cauchy transform of the weighted orthogonal polynomial: Qk(z):=C[a,b][pkw](z)=12πi∫bapk(x)w(x)x−zdx
Theorem (Three-term recurrence Cauchy transform of weighted OPs) Ck(z) satisfies the same recurrence relationship as pk(x) for k=1,2,…: zC0(z)=a0C0(z)+b0C1(z)−12πi∫baw(x)dxzCk(z)=ckCk−1(z)+akCk(z)+bkCk+1(z)
Proof zCk(z)=12πi∫bazpk(x)w(x)x−zdx=12πi∫ba(z−x)pk(x)w(x)x−zdx+∫baxpk(x)w(x)x−zdx=−12πi∫bapk(x)w(x)dx+∫ba(ckpk−1(x)+akpk(x)+bkpk+1(x)w(x)x−zdx=−12πi∫bapk(x)w(x)dx+ckCk−1(z)+akCk(z)+bkCk+1(z)
This gives a convenient way to calculate the Cauchy transforms: if we know C0(z)=Cw(z) and ∫baw(x)dx, solve the lower triangular system: (1a0−zb0c1a1−zb1c2a2−zb2c3a3−z⋱⋱⋱)(C0(z)C1(z)C2(z)C3(z)⋮)=(C0(z)12πi∫baw(x)dx00⋮)
Example (Chebyshev Cauchy transform)
Consider the Chebyshev case w(x)=1√1−x2, which satisfies ∫1−1w(x)dx=π. Recall that C0(z)=Cw(z)=i2√z−1√z+1
x = Fun()
w = 1/sqrt(1-x^2)
z = 0.1+0.1im
n = 10
L = zeros(ComplexF64,n,n)
L[1,1] = 1
L[2,1] = -z
L[2,2] = 1
for k=3:n
L[k,k-1] = -z
L[k,k-2] = L[k,k] = 1/2
end
C = L \ [ im/(2sqrt(z-1)sqrt(z+1)); 1/(2im); zeros(n-2)]
10-element Array{Complex{Float64},1}: 0.4999250218677838 + 0.004998750393615982im 0.049492627147416784 - 0.44950762277386im -0.40012497188352847 - 0.08500174951890464im -0.11251727162034156 + 0.35248227849337344im 0.3071250618607855 + 0.13299475089351104im 0.14734333381379644 - 0.2644583159425141im -0.22476473190952334 - 0.15641774731925456im -0.16101273073185018 + 0.18822182009675853im 0.1549178217438016 + 0.16185956519223624im 0.15962438204216325 - 0.12486634270955096im
T₅ = Fun(Chebyshev(), [zeros(5);1])
cauchy(T₅*w,z) - C[6]
-5.551115123125783e-17 + 5.551115123125783e-17im
Warning This fails for large n or large z:
x = Fun()
w = 1/sqrt(1-x^2)
z = 5+6im
n = 100
L = zeros(ComplexF64,n,n)
L[1,1] = 1
L[2,1] = -z
L[2,2] = 1
for k=3:n
L[k,k-1] = -z
L[k,k-2] = L[k,k] = 1/2
end
C = L \ [ im/(2sqrt(z-1)sqrt(z+1)); 1/(2im); zeros(n-2)]
T₂₀ = Fun(Chebyshev(), [zeros(20);1])
C[21], cauchy(T₂₀*w, z)
(-2.2332625421658917e6 + 521568.0612707699im, 0.0 + 8.834874115176436e-18im)
Get around it by dropping the first row:
L[2:end,1:end-1]
99×99 Array{Complex{Float64},2}: -5.0-6.0im 1.0+0.0im 0.0+0.0im … 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.5+0.0im -5.0-6.0im 0.5+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.5+0.0im -5.0-6.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.5+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im … 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im … 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im ⋮ ⋱ 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im … 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im … 0.5+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im -5.0-6.0im 0.5+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.5+0.0im -5.0-6.0im 0.5+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.0+0.0im 0.5+0.0im -5.0-6.0im
C = L[2:end,1:end-1]\ [1/(2im); zeros(n-2)]
C[6]- cauchy(T₅*w, z)
-3.072062106493749e-17 + 4.410020129853371e-17im
Now consider the Hilbert transform of weighted orthogonal polynomials: Hk(x)=H[a,b][pkw](x)=1π∫bapk(t)w(t)t−xdt
Just like Cauchy transforms, the Hilbert transforms have
Corollary (Hilbert transform recurrence) xH0(x)=a0H0(x)+b0H1(x)−1π∫baw(x)dxxHk(x)=ckHk−1(x)+akHk(x)+bkHk+1(x)
Proof Recall C+f(x)+C−f(x)=−iHf(x)
⬛️
For Hk(x)=∫1−1Tk(t)(t−x)√1−t2dt
x = 0.1
T = Fun(Chebyshev(),[zeros(n);1])
hilbert(w*T,x) - Fun(Ultraspherical(1), [zeros(n-1);1])(x)
0.0
This gives a very easy way to compute Hilbert transforms: if f(x)=∞∑k=0fkTk(x)