using Plots, ComplexPhasePortrait, ApproxFun
gr();
Dr. Sheehan Olver
Office Hours: 3-4pm Mondays, Huxley 6M40
We now discuss functions with branch cuts
This is a step towards a Cauchy integral theorem on cuts, for recovering a holomorphic function from its behaviour on a cut.
We begin with logz.
Definition (Complex Logarithm) logz=∫z11ζdζ
Demonstration this shows the integral path for a point z. We see how the path avoids the pole of ζ−1 at the origin:
z = -2 + 1.0im
phaseplot(-3..3, -3..3, ζ -> 1/ζ)
t = 0:0.1:1
γ = 1 .+ (z-1)*t
plot!(real.(γ), imag.(γ); color=:black, label="contour", arrow=true)
This is well-defined apart from z∈(−∞,0], where there is a pole on the contour. This induces a branch cut: a jump in the value of the function.
phaseplot(-3..3, -3..3, z -> log(z))
We see that the limits from above and below exist: we can define log+x=limϵ→0+log(x+iϵ)log−x=limϵ→0+log(x−iϵ)
log(-1+0.0im), log(-1-0.0im)
(0.0 + 3.141592653589793im, 0.0 - 3.141592653589793im)
By deformation, the value of the integrals is independent of the path: here we calculate the integral on an arc:
θ = range(0, stop=0.9π, length=100)
a = exp.(im*θ)
z = exp(0.9*π*im)
γ = 1 .+ (z-1)*t
phaseplot(-3..3, -3..3, ζ -> 1/ζ)
plot!(real.(γ), imag.(γ); color=:black, label="contour", arrow=true)
plot!(real.(a), imag.(a), color=:black, linestyle=:dash, label="deformed", arrow=true)
This works all the way to the negative real axis. Here we calculate log±1 using integrals over half circles:
sum(Fun(ζ -> 1/ζ, Arc(0.,1.,(0.,π)))),
sum(Fun(ζ -> 1/ζ, Arc(0.,1.,(0.,-π))))
(9.692284352069077e-17 + 3.141592653589793im, 9.692284352069077e-17 - 3.141592653589793im)
Combining the two contours we have log+(−1)−log−(−1)=∮dζζ=2πi
log(-1.0+0im) - log(-1.0-0im), sum(Fun(ζ -> 1/ζ, Circle()))
(0.0 + 6.283185307179586im, -7.882330173426647e-16 + 6.283185307179586im)
We can establish some properties. First we show that logz=−log1z by considering the change of variables ζ=1s. Because γz(t)−1 stays uniformly in the lower-half plane, we can deform it to a straight contour, which gives us the result: logz=∫γzdζζ=−∫1ζ∘γzdss=−∫γz−1dss=−logz−1
Here's a plot of the relevant contours:
phaseplot(-3..3, -3..3, z -> log(z))
z = -2 + 2im
γ = (z,t) -> 1 + t*(z-1)
tt = range(0,stop=1,length=100)
plot!(real.(γ.(z,tt)), imag.(γ.(z,tt)); color=:black, label="contour", arrow=true)
plot!(real.(1 ./ γ.(z,tt)), imag.(1 ./ γ.(z,tt)); color=:black, linestyle=:dash, arrow=true, label="change of variables contour")
plot!(real.(γ.(1/z,tt)), imag.(γ.(1/z,tt)); color=:black, linestyle=:dashdot, arrow=true, label="deformed contour")
Here we see by looking at the phase plot that the two functions match:
phaseplot(-3..3, -3..3, z -> -log(1/z))
Definition (algebraic power) zα=eαlogz
Note, for example, when α=1/2, √z≡z1/2 is only one solution to y2=z.
Here's a phase plot showing that √z also has a branch cut on (−∞,0]:
α = 0.5
phaseplot(-3..3, -3..3, z -> z^α)
On the branch cut along (−∞,0] it has the jump:
xα+xα−=eα(log+x−log−x)=e2πiαIn particular,
√x+=−√x−=i√|x|sqrt(-1-0.0im) , -sqrt(-1 + 0.0im)
(0.0 - 1.0im, -0.0 - 1.0im)
These are multiplicative jumps. We also have a subtractive jumps:
xα+−xα−=eαlog+x−eαlog−x=eαlog(−x)+iπα−eαlog(−x)−iπα=2i(−x)αsinπαx = -2
(x+0.0im)^α - (x-0.0im)^α, 2im*(-x)^α*sin(π*α)
(0.0 + 2.8284271247461903im, 0.0 + 2.8284271247461903im)
and an additive jump: xα++xα−=2(−x)αcosπα
x = -1
(x+0.0im)^α + (-1-0.0im)^α, 2*(-x)^α*cos(π*α)
(0.0 + 0.0im, 1.2246467991473532e-16)
In particular, for x<0, √x+−√x−=2i√−x√x++√x−=0
sqrt(x+0.0im) - sqrt(x-0.0im) == 2im*sqrt(-x)
true
sqrt(x+0.0im) + sqrt(x-0.0im)
0.0 + 0.0im
Let's look at another example: φ(z)=√z−1√z+1.
φ = z -> sqrt(z-1)*sqrt(z+1)
phaseplot(-3..3, -3..3, φ)
For x>0 it's holomorphic. For −1<x<1 we have the multiplicative jump
φ+(x)=√x−1+√x+1=−√x−1−√x+1=−φ−(x)which gives the additive jump φ+(x)+φ−(x)=0
x = 0.1
φ(x + 0.0im) + φ(x - 0.0im)
0.0 + 0.0im
But we also have a subtractive jump: φ+(x)−φ−(x)=(√x−1+−√x−1−)√x+1=2i√1−x√x+1=2i√1−x2
x = 0.1
φ(x + 0.0im) - φ(x - 0.0im), 2im*sqrt(1-x^2)
(0.0 + 1.98997487421324im, 0.0 + 1.98997487421324im)
For x<−1 we actually have continuity:
φ+(x)=√x−1+√x+1+=(−√x−1−)(−√x+1−)=φ−(x)φ = z -> sqrt(z-1)sqrt(z+1)
x = -3.0
φ(x+0.0im), φ(x-0.0im)
(-2.8284271247461903 + 0.0im, -2.8284271247461903 - 0.0im)
But continuity implies analyticity, using Cauchy's integral formula:
Theorem (continuity on a curve implies analyticity) Let D be a domain and γ⊂D a contour. Suppose f is analytic in D∖γ, and continuous on the interior of γ. Then f is analytic in D∖{γ(a),γ(b)}.
Sketch of Proof
For simplicity, suppose D is a circle of radius 2 and γ is the interval [−1,1]. For any z off the interval, we can write f(z)=12πi∮Γxf(ζ)ζ−zdζ
z = 0.2+0.2im
x = 0.1
ε = 0.001
scatter([x],[0.]; label="x", xlims=(-1.5,1.5), ylims=(-0.5,0.5))
scatter!([real(z)],[imag(z)]; label="z")
plot!(-1..1; label="Unit interval", linestyle=:dot)
Γₓ = Arc(z, 0.1, (-π/2,π)) ∪ Segment(0.2+0.1im,0.2 +0.0im) ∪ Segment(0.2 +0.0im, -0.9 +0.0im) ∪
Circle(-1.0, 0.1) ∪ Segment(-0.9 -0.0im, 0.2 -0.0im) ∪ Segment(0.2-0.0im, 0.2 - 0.2im) ∪
Segment(0.2 - 0.2im, -1.2-0.2im) ∪ Segment(-1.2 -0.2im, -1.2+ 0.2im) ∪
Segment(-1.2+ 0.2im, 0.1+0.2im)
plot!(Γₓ; label="Contour")
Because f is continuous at x, we have f+(x)=f−(x)=f(x)
z = 0.2+0.2im
x = 0.1
ε = 0.001
scatter([x],[0.]; label="x", xlims=(-1.5,1.5), ylims=(-0.5,0.5))
scatter!([real(z)],[imag(z)]; label="z")
plot!(-1..1; label="Unit interval", linestyle=:dot)
Γ̃ₓ = Arc(z, 0.1, (-π/2,π)) ∪ Segment(0.2+0.1im,0.2 -0.2im) ∪ Circle(-1.0, 0.1) ∪
Segment(0.2 - 0.2im, -1.2-0.2im) ∪ Segment(-1.2 -0.2im, -1.2+ 0.2im) ∪
Segment(-1.2+ 0.2im, 0.1+0.2im)
plot!(Γ̃ₓ; label="Contour")
This integral expression holds for all z inside the contour ˜Γx but off the interval. But it therefore holds true for f(x)=f+(x)=f−(x) by taking limits. Thus f(x)=12πi∫˜Γxf(ζ)ζ−xdζ
⬛️
Theorem (weaker than pole singularity implies analyticity) Suppose f is analytic in D∖{z0} and has a weaker than pole singularity at z0: limz→z0(z−z0)f(z)=0
Proof
Around z0 is an annulus AR0 inside which f is analytic. Consider z in AR0 and a positively oriented circle γr of radius r with |r|<|z−z0|. Then we have f(z)=12πi∮γRf(ζ)ζ−zdζ−12πi∮γrf(ζ)ζ−zdζ.
z₀ = 0.2 +0.2im
z = 0.4 +0.2im
scatter([real(z₀)],[imag(z₀)]; label="z_0")
scatter!([real(z)],[imag(z)]; label="z")
plot!(Circle(z₀, 0.1); label="gamma_r")
plot!(Circle(z₀, 0.3); label="gamma_R")
But we have |∮γrf(ζ)ζ−zdζ|≤2πrsupζ∈γr|f(ζ)ζ−z|≤2π1|z0−z|−rsupζ∈γr|f(ζ)|
⬛️
Corollary (Weaker than linear growth implies analyticity at infinity) If limz→∞f(z)z=0,
From these result we can infer that ϕ(z)=√z−1√z+1
Recall that an important ingredient of complex analysis is Liouville's theorem:
Theorem (Liouville) If f is entire and bounded in C, then f must be constant.
We will see that knowledge of the behaviour of ϕ can be used to recover by its behaviour at its singularities at ∞ and jump on [−1,1]. But before that, we already have the following uniqueness results by combining the above with Liouville's theorem:
2. κ(z)=1√z−1√z+1 is the unique function analytic in ˉC∖[−1,1] with weaker than pole singularities at ±1 satisfying κ(∞)=0 and κ+(x)−κ−(x)=−2i√1−x2for−1<x<1.
Demonstration From the phase plot we see it has a branch cut on [−1,1]:
κ = z -> 1/(sqrt(z-1)sqrt(z+1))
phaseplot(-3..3, -3..3, κ)
On the branch there is the expected jump:
x = 0.1
κ(x + 0.0im) - κ(x - 0.0im) , -2im/sqrt(1-x^2)
(0.0 - 2.010075630518424im, 0.0 - 2.010075630518424im)
For x<−1 the branch cut is removable: we have continuity and therefore analyticity:
x = -2.3
κ(x + 0.0im) - κ(x - 0.0im)
0.0 - 0.0im
3. μ(z)=log(z−1)−log(z+1)2πi is the unique function analytic in C∖[−1,1] with weaker than pole singularities at ±1 satisfying μ(∞)=0 and μ+(x)−μ−(x)=1for−1<x<1.
Demonstration Here we see from the phase plot of mu that it has a branch cut on [−1,1]:
μ = z -> (log(z-1) - log(z+1))/(2π*im)
phaseplot(-3..3, -3..3, μ)
For −1<x<1 we have the jump 1:
x = 0.3
μ(x + 0.0im) - μ(x - 0.0im)
1.0 + 0.0im
For x<−1 we see that the branch cuts cancel and we have continuity:
x = -4.3
μ(x + 0.0im) - μ(x - 0.0im)
0.0 + 0.0im