using Plots, ComplexPhasePortrait, ApproxFun, SingularIntegralEquations
gr();
Dr. Sheehan Olver
Understanding branch cuts and Cauchy transforms allows us to systematically solve equations involving Laplace equation. A classic example is Ideal fluid flow. Consider the case of uniform flow with angle θ around an infinitesimally small plate on [−1,1]. We can model this as v(x,y)∼ycosθ−xsinθvxx+vyy=0v(x,0)=0for−1<x<1
μ = z -> -im*(sqrt(z-1)sqrt(z+1) - z)
Φ = (θ,z) -> exp(-im*θ)*z + sin(θ)μ(z)
u = (θ,x,y) -> imag(Φ(θ, x + im*y))
xx = yy = range(-3; stop=3 , length=500)
contour(xx, yy, u.(1.3,xx',yy); nlevels = 100)
plot!(Segment(-1.,1.); color=:black, label="obstacle")
We divide this task into stages:
The real and imaginary parts of an analytic function satisfy Laplace's equation: that is if ϕ(z)=ϕ(x+iy)=u(x,y)+iv(x,y) where u and v are the real/imaginary parts, then uxx+uyy=0vxx+vyy=0
Therefore we can rewrite the ideal fluid flow equation as a problem of calculating ϕ(z)=u(x,y)+iv(x,y) whose imaginary part is the solution too the ideal fluid flow PDE (we don't use the real part u). That is, we want to find analytic ϕ(z) that satisfies ϕ(z)∼e−iθzℑϕ(x)=0for−1<x<1
Write ϕ(z)=e−iθz+c+C[−1,1]w(z)
We now plug the problem into the inverse Hilbert transform formula:
w(x)=−1√1−x2H[f√1−⋄2](x)+D√1−x2where f(x)=−2xsinθ. Now that
Similar to last lecture, we find C[⋄√1−⋄2](z)=z√z−1√z+1−z2+1/22i
Demonstration Here we see that this gives us the right Hilbert transform:
D = randn()
θ = 0.1
x = Fun()
w = 2sin(θ) * (D-x^2)/sqrt(1-x^2)
hilbert(w,0.2)- (-2sin(θ)*0.2)
0.0
D is arbitrary, but from physical principles we know that we don't want the solution to blow up. If w blows up then so does its Cauchy transform. Therefore, we choose D=−1 so that
w(x)=2sinθ√1−x2Now recall C[√1−⋄2](z)=√z−1√z+1−z2i
Therefore, w(x)=2sinθ√1−x2, implies Cw(z)=−isinθ(√z−1√z+1−z)
We note that for obstacles on the real line, represented by a contour Γ, the problem of ideal fluid flow around γ is still reducible to solving the singular integral equation HΓf(x)=−2xsinθ
a = 0.3
θ = 1.3
Γ = Segment(-1,-a) ∪ Segment(a, 1)
x = Fun(Γ)
sp = PiecewiseSpace(JacobiWeight.(0.5,0.5,components(Γ))...)
H = Hilbert(sp)
o₁ = Fun(x -> -1 ≤ x ≤ -a ? 1 : 0, Γ )
o₂ = Fun(x -> a ≤ x ≤ 1 ? 1 : 0, Γ )
a, b, f = [o₁ o₂ H] \ [-2x*sin(θ)]
Φ = (θ,z) -> exp(-im*θ)*z + cauchy(f, z)
v = (θ,x,y) -> imag(Φ(θ, x + im*y))
xx = yy = range(-3.; stop=3., length=500)
contour(xx, yy, v.(θ, xx',yy); nlevels = 100)
plot!(Γ; color=:black, label="obstacle")