{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"using Plots, ComplexPhasePortrait, ApproxFun\n",
"gr();"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# M3M6: Methods of Mathematical Physics\n",
"\n",
"$$\n",
"\\def\\dashint{{\\int\\!\\!\\!\\!\\!\\!-\\,}}\n",
"\\def\\infdashint{\\dashint_{\\!\\!\\!-\\infty}^{\\,\\infty}}\n",
"\\def\\D{\\,{\\rm d}}\n",
"\\def\\dx{\\D x}\n",
"\\def\\C{{\\mathbb C}}\n",
"\\def\\CC{{\\cal C}}\n",
"\\def\\HH{{\\cal H}}\n",
"\\def\\I{{\\rm i}}\n",
"\\def\\qqfor{\\qquad\\hbox{for}\\qquad}\n",
"$$\n",
"\n",
"Dr. Sheehan Olver\n",
"
\n",
"s.olver@imperial.ac.uk\n",
"\n",
"Office Hours: 3-4pm Mondays, Huxley 6M40\n",
"
\n",
"Website: https://github.com/dlfivefifty/M3M6LectureNotes\n",
"\n",
"\n",
"\n",
"# Lecture 8: Functions with branch cuts\n",
"\n",
"\n",
"\n",
"We now discuss functions with branch cuts\n",
"\n",
"1. $\\log z$ with a cut on $(-\\infty,0]$\n",
"2. $z^\\alpha$ with a cut on $(-\\infty,0]$\n",
"3. $\\sqrt{z-1}\\sqrt{z+1}$ with a cut on $[-1,1]$\n",
"4. $\\rm{sign}(|z|-1)$ with a cut on the unit circle.\n",
"\n",
"This is a step towards a Cauchy integral theorem on cuts, for recovering a holomorphic function from its behaviour on a cut.\n",
"\n",
"1. Complex logarithm\n",
"2. Algebraic powers\n",
"3. Inferred analyticity\n",
"\n",
"We begin with $\\log z$. \n",
"\n",
"## Complex logarithm\n",
"\n",
"\n",
"\n",
"**Definition (Complex Logarithm)**\n",
"$$\\log z = \\int_1^z {1 \\over \\zeta} d\\zeta$$\n",
"where the integral is understood to be on a straight line segment, that is\n",
"$$\\log z = \\int_{\\gamma_z} {1 \\over \\zeta} d\\zeta$$\n",
"where\n",
"$\\gamma_z(t) = 1 + (z-1)t$ for $0 \\leq t \\leq 1$.\n",
"\n",
"_Demonstration_ this shows the integral path for a point $z$. We see how the path avoids the pole of $\\zeta^{-1}$ at the origin:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"image/svg+xml": [
"\n",
"\n"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"z = -2 + 1.0im\n",
"phaseplot(-3..3, -3..3, ζ -> 1/ζ)\n",
"t = 0:0.1:1\n",
"γ = 1 .+ (z-1)*t\n",
"plot!(real.(γ), imag.(γ); color=:black, label=\"contour\", arrow=true)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This is well-defined apart from $z \\in (-\\infty,0]$, where there is a pole on the contour. This induces a _branch cut_: a jump in the value of the function. "
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"\n",
"\n"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"phaseplot(-3..3, -3..3, z -> log(z))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We see that the limits from above and below exist: we can define\n",
"$$\n",
"\\begin{align*}\n",
"\\log_+ x &= \\lim_{\\epsilon \\rightarrow 0^+} \\log(x+\\I \\epsilon) \\\\\n",
"\\log_- x &= \\lim_{\\epsilon \\rightarrow 0^+} \\log(x-\\I \\epsilon)\n",
"\\end{align*}\n",
"$$\n",
"and calculate their values via:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(0.0 + 3.141592653589793im, 0.0 - 3.141592653589793im)"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"log(-1+0.0im), log(-1-0.0im)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"By deformation, the value of the integrals is independent of the path: here we calculate the integral on an arc:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"\n",
"\n"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"θ = range(0, stop=0.9π, length=100)\n",
"a = exp.(im*θ)\n",
"\n",
"z = exp(0.9*π*im)\n",
"\n",
"γ = 1 .+ (z-1)*t\n",
"phaseplot(-3..3, -3..3, ζ -> 1/ζ)\n",
"plot!(real.(γ), imag.(γ); color=:black, label=\"contour\", arrow=true)\n",
"plot!(real.(a), imag.(a), color=:black, linestyle=:dash, label=\"deformed\", arrow=true)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This works all the way to the negative real axis. Here we calculate $\\log_\\pm 1$ using integrals over half circles:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(9.692284352069077e-17 + 3.141592653589793im, 9.692284352069077e-17 - 3.141592653589793im)"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sum(Fun(ζ -> 1/ζ, Arc(0.,1.,(0.,π)))),\n",
"sum(Fun(ζ -> 1/ζ, Arc(0.,1.,(0.,-π))))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Combining the two contours we have\n",
"$$\n",
"\\log_+(-1) - \\log_-(-1) = \\oint {\\D\\zeta \\over \\zeta} = 2 \\pi \\I\n",
"$$"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(0.0 + 6.283185307179586im, -7.882330173426647e-16 + 6.283185307179586im)"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"log(-1.0+0im) - log(-1.0-0im), sum(Fun(ζ -> 1/ζ, Circle()))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can establish some properties. First we show that $\\log z = - \\log {1 \\over z}$ by considering the change of variables $\\zeta = {1 \\over s}$. Because $\\gamma_z(t)^{-1}$ stays uniformly in the lower-half plane, we can deform it to a straight contour, which gives us the result:\n",
"$$\n",
"\\log z = \\int_{\\gamma_z} {\\D\\zeta \\over \\zeta} = -\\int_{{1 \\over \\zeta} \\circ \\gamma_z} {\\D s \\over s} = - \\int_{\\gamma_{z^{-1}}} {\\D s \\over s} = -\\log z^{-1} \n",
"$$\n",
"\n",
"Here's a plot of the relevant contours:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"\n",
"\n"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"phaseplot(-3..3, -3..3, z -> log(z))\n",
"z = -2 + 2im\n",
"\n",
"γ = (z,t) -> 1 + t*(z-1)\n",
"tt = range(0,stop=1,length=100)\n",
"\n",
"plot!(real.(γ.(z,tt)), imag.(γ.(z,tt)); color=:black, label=\"contour\", arrow=true)\n",
"plot!(real.(1 ./ γ.(z,tt)), imag.(1 ./ γ.(z,tt)); color=:black, linestyle=:dash, arrow=true, label=\"change of variables contour\")\n",
"plot!(real.(γ.(1/z,tt)), imag.(γ.(1/z,tt)); color=:black, linestyle=:dashdot, arrow=true, label=\"deformed contour\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Here we see by looking at the phase plot that the two functions match:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"\n",
"\n"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"phaseplot(-3..3, -3..3, z -> -log(1/z))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Algebraic powers\n",
"\n",
"\n",
"**Definition (algebraic power)** \n",
"$$z^\\alpha = e^{\\alpha \\log z}$$\n",
"\n",
"Note, for example, when $\\alpha = 1/2$, $\\sqrt z \\equiv z^{1/2}$ is only one solution to $y^2 = z$.\n",
"\n",
"Here's a phase plot showing that $\\sqrt{z}$ also has a branch cut on $(-\\infty,0]$:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"\n",
"\n"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"α = 0.5\n",
"phaseplot(-3..3, -3..3, z -> z^α)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"On the branch cut along $(-\\infty,0]$ it has the jump:\n",
"\n",
"$${x_+^\\alpha \\over x_-^\\alpha} = e^{\\alpha (\\log_+ x - \\log_- x)} = e^{2 \\pi \\I \\alpha}$$\n",
"\n",
"In particular,\n",
"\n",
"$$\\sqrt{x}_+ = -\\sqrt{x}_- = i \\sqrt{|x|}$$"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(0.0 - 1.0im, -0.0 - 1.0im)"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sqrt(-1-0.0im) , -sqrt(-1 + 0.0im)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"These are _multiplicative jumps_. We also have a _subtractive jumps_:\n",
"\n",
"\\begin{align*}\n",
"x_+^\\alpha - x_-^\\alpha &= e^{\\alpha \\log_+ x} - e^{\\alpha \\log_- x} = e^{\\alpha \\log(-x) + \\I \\pi \\alpha} - e^{\\alpha \\log(-x) - \\I \\pi \\alpha} \\cr\n",
" & = 2 \\I (-x)^\\alpha \\sin \\pi \\alpha\n",
"\\end{align*}"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(0.0 + 2.8284271247461903im, 0.0 + 2.8284271247461903im)"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x = -2\n",
"(x+0.0im)^α - (x-0.0im)^α, 2im*(-x)^α*sin(π*α)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"and an _additive jump_:\n",
"\\begin{align*}\n",
"x_+^\\alpha + x_-^\\alpha & = 2 (-x)^\\alpha \\cos \\pi \\alpha\n",
"\\end{align*}"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(0.0 + 0.0im, 1.2246467991473532e-16)"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x = -1\n",
"(x+0.0im)^α + (-1-0.0im)^α, 2*(-x)^α*cos(π*α)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In particular, for $x < 0$,\n",
"\\begin{align*}\n",
"\\sqrt{x}_+ - \\sqrt{x}_- &= 2 \\I \\sqrt{-x} \\\\\n",
"\\sqrt{x}_+ + \\sqrt{x}_- &= 0\n",
"\\end{align*}"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"true"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sqrt(x+0.0im) - sqrt(x-0.0im) == 2im*sqrt(-x)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.0 + 0.0im"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sqrt(x+0.0im) + sqrt(x-0.0im)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's look at another example: $\\varphi(z) = \\sqrt{z-1}\\sqrt{z+1}$. "
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"\n",
"\n"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"φ = z -> sqrt(z-1)*sqrt(z+1)\n",
"phaseplot(-3..3, -3..3, φ)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"For $x > 0$ it's holomorphic. For $-1 < x < 1$ we have the multiplicative jump\n",
"\n",
"$$\\varphi_+(x) = \\sqrt{x-1}_+ \\sqrt{x+1} = - \\sqrt{x-1}_- \\sqrt{x+1} = -\\varphi_-(x)$$\n",
"which gives the additive jump\n",
"$$\n",
"\\varphi_+(x) + \\varphi_-(x) = 0\n",
"$$"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.0 + 0.0im"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x = 0.1\n",
"φ(x + 0.0im) + φ(x - 0.0im)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" But we also have a _subtractive jump_:\n",
"$$\n",
"\\varphi_+(x) - \\varphi_-(x) = (\\sqrt{x-1}_+ - \\sqrt{x-1}_-) \\sqrt{x+1} = 2\\I \\sqrt{1-x}\\sqrt{x+1} = 2\\I \\sqrt{1 - x^2}\n",
"$$"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(0.0 + 1.98997487421324im, 0.0 + 1.98997487421324im)"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x = 0.1\n",
"φ(x + 0.0im) - φ(x - 0.0im), 2im*sqrt(1-x^2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"For $x < -1$ we actually have continuity:\n",
"\n",
"$$\\varphi_+(x) = \\sqrt{x-1}_+ \\sqrt{x+1}_+ = (- \\sqrt{x-1}_-)(- \\sqrt{x+1}_-) = \\varphi_-(x)$$"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(-2.8284271247461903 + 0.0im, -2.8284271247461903 - 0.0im)"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"φ = z -> sqrt(z-1)sqrt(z+1)\n",
"\n",
"x = -3.0\n",
"φ(x+0.0im), φ(x-0.0im)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Inferred analyticity\n",
"\n",
"But continuity _implies_ analyticity, using Cauchy's integral formula:\n",
"\n",
"**Theorem (continuity on a curve implies analyticity)** Let $D$ be a domain and $\\gamma \\subset D$ a contour. Suppose $f$ is analytic in $D \\backslash \\gamma$, and continuous on the interior of $\\gamma$. Then $f$ is analytic in $D \\backslash \\{\\gamma(a), \\gamma(b) \\}$.\n",
"\n",
"**Sketch of Proof** \n",
"\n",
"For simplicity, suppose $D$ is a circle of radius 2 and $\\gamma$ is the interval $[-1,1]$. For any $z$ off the interval, we can write \n",
"$$\n",
"f(z) = {1 \\over 2 \\pi \\I} \\oint_{\\Gamma_x} {f(\\zeta) \\over \\zeta - z} \\D\\zeta\n",
"$$\n",
"where $\\Gamma_x$ is a simple closed contour that surrounds $z$ and passes through $x$ in both directions:"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"\n",
"\n"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"z = 0.2+0.2im\n",
"x = 0.1\n",
"ε = 0.001\n",
"scatter([x],[0.]; label=\"x\", xlims=(-1.5,1.5), ylims=(-0.5,0.5))\n",
"scatter!([real(z)],[imag(z)]; label=\"z\")\n",
"plot!(-1..1; label=\"Unit interval\", linestyle=:dot)\n",
"\n",
"Γₓ = Arc(z, 0.1, (-π/2,π)) ∪ Segment(0.2+0.1im,0.2 +0.0im) ∪ Segment(0.2 +0.0im, -0.9 +0.0im) ∪\n",
" Circle(-1.0, 0.1) ∪ Segment(-0.9 -0.0im, 0.2 -0.0im) ∪ Segment(0.2-0.0im, 0.2 - 0.2im) ∪\n",
" Segment(0.2 - 0.2im, -1.2-0.2im) ∪ Segment(-1.2 -0.2im, -1.2+ 0.2im) ∪ \n",
" Segment(-1.2+ 0.2im, 0.1+0.2im)\n",
"\n",
"plot!(Γₓ; label=\"Contour\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Because $f$ is continuous at $x$, we have\n",
"$$f_+(x) = f_-(x) = f(x)$$\n",
"where\n",
"$$f_\\pm(x) = \\lim_{\\epsilon \\rightarrow 0} f(x \\pm \\I \\epsilon)\n",
"$$\n",
"Therefore, the two integrals along $[-1,1]$ cancel out and we get:\n",
"$$\n",
" f(z) = {1 \\over 2 \\pi \\I} \\oint_{{\\tilde \\Gamma}_x} {f(\\zeta) \\over \\zeta - z} \\D \\zeta\n",
"$$\n",
"where ${\\tilde \\Gamma}_x$ is $\\Gamma_x$ with the contour on the interval removed:"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"\n",
"\n"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"z = 0.2+0.2im\n",
"x = 0.1\n",
"ε = 0.001\n",
"scatter([x],[0.]; label=\"x\", xlims=(-1.5,1.5), ylims=(-0.5,0.5))\n",
"scatter!([real(z)],[imag(z)]; label=\"z\")\n",
"plot!(-1..1; label=\"Unit interval\", linestyle=:dot)\n",
"\n",
"Γ̃ₓ = Arc(z, 0.1, (-π/2,π)) ∪ Segment(0.2+0.1im,0.2 -0.2im) ∪ Circle(-1.0, 0.1) ∪\n",
" Segment(0.2 - 0.2im, -1.2-0.2im) ∪ Segment(-1.2 -0.2im, -1.2+ 0.2im) ∪ \n",
" Segment(-1.2+ 0.2im, 0.1+0.2im)\n",
"\n",
"plot!(Γ̃ₓ; label=\"Contour\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This integral expression holds for all $z$ inside the contour $\\tilde \\Gamma_x$ but off the interval. But it therefore holds true for $f(x) = f_+(x) = f_-(x)$ by taking limits. Thus\n",
"$$f(x) = {1 \\over 2 \\pi \\I} \\int_{{\\tilde \\Gamma}_x} {f(\\zeta) \\over \\zeta -x} \\D\\zeta$$\n",
"hence $f$ is analytic at $x$.\n",
"\n",
"⬛️"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Theorem (weaker than pole singularity implies analyticity)** Suppose $f$ is analytic in $D \\backslash \\{ z_0 \\}$ and has a weaker than pole singularity at $z_0$:\n",
"$$\\lim_{z \\rightarrow z_0} (z-z_0) f(z) = 0$$\n",
"holds uniformly. Then $f$ is analytic at $z_0$. (More precisely: $f$ can be analytically continued to $z_0$.)\n",
"\n",
"**Proof** \n",
"\n",
"Around $z_0$ is an annulus $A_{R0}$ inside which $f$ is analytic. Consider $z$ in $A_{R0}$ and a positively oriented circle $\\gamma_r$ of radius $r$ with $|r| < |z-z_0|$. Then we have\n",
"$$\n",
" f(z) = {1 \\over 2 \\pi \\I} \\oint_{\\gamma_R} {f(\\zeta) \\over \\zeta - z} \\D \\zeta - {1 \\over 2 \\pi \\I} \\oint_{\\gamma_r} {f(\\zeta) \\over \\zeta - z} \\D \\zeta .\n",
"$$\n",
"here's a plot:"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"\n",
"\n"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"z₀ = 0.2 +0.2im\n",
"z = 0.4 +0.2im\n",
"\n",
"scatter([real(z₀)],[imag(z₀)]; label=\"z_0\")\n",
"scatter!([real(z)],[imag(z)]; label=\"z\")\n",
"plot!(Circle(z₀, 0.1); label=\"gamma_r\")\n",
"plot!(Circle(z₀, 0.3); label=\"gamma_R\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"But we have\n",
"$$\n",
" \\left| \\oint_{\\gamma_r} {f(\\zeta) \\over \\zeta - z} \\D \\zeta \\right| \\leq 2\\pi r \\sup_{\\zeta \\in \\gamma_r} \\left|{f(\\zeta) \\over \\zeta - z}\\right| \\leq 2 \\pi {1 \\over |z_0-z| - r} \\sup_{\\zeta \\in \\gamma_r} |f(\\zeta)|\n",
"$$\n",
"which tends to zero as $r \\rightarrow 0$.\n",
"\n",
"⬛️"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"**Corollary (Weaker than linear growth implies analyticity at infinity)** If \n",
"$$\n",
"\\lim_{z \\rightarrow \\infty} {f(z) \\over z} = 0,\n",
"$$ then $f$ is analytic at infinity.\n",
"\n",
"\n",
"From these result we can infer that \n",
"$$\\phi(z) = \\sqrt{z-1}\\sqrt{z+1}$$\n",
"is analytic on $\\C \\backslash [-1,1]$, and $\\phi(z) \\sim_{z \\rightarrow \\infty} z$.\n",
"\n",
"\n",
"### Uniqueness results from inferred singularity\n",
"\n",
"Recall that an important ingredient of complex analysis is Liouville's theorem:\n",
"\n",
"**Theorem (Liouville)** If $f$ is entire and bounded in ${\\mathbb C}$, then $f$ must be constant.\n",
"\n",
"\n",
"We will see that knowledge of the behaviour of $\\phi$ can be used to recover by its behaviour at its singularities at $\\infty$ and jump on $[-1,1]$. But before that, we already have the following uniqueness results by combining the above with Liouville's theorem:\n",
"\n",
"\n",
"1. $\\phi(z)$ is the unique function analytic in $\\C \\backslash [-1,1]$ with weaker than pole singularities at $\\pm 1$ satisfying $\\phi(z) \\sim z$ and \n",
"$$\\phi_+(x) - \\phi_-(x) = 2\\I \\sqrt{1-x^2} \\qqfor -1 < x <1.$$ \n",
"2. $\\kappa(z) = {1 \\over \\sqrt{z-1} \\sqrt{z+1}}$ is the unique function analytic in $\\bar\\C \\backslash [-1,1]$ with weaker than pole singularities at $\\pm 1$ satisfying $\\kappa(\\infty) = 0$ and \n",
"$$\n",
"\\kappa_+(x) - \\kappa_-(x) = {-2\\I \\over \\sqrt{1-x^2}}\\qqfor -1 < x <1.\n",
"$$\n",
"\n",
"_Demonstration_ From the phase plot we see it has a branch cut on $[-1,1]$:"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"image/svg+xml": [
"\n",
"\n"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"κ = z -> 1/(sqrt(z-1)sqrt(z+1))\n",
"phaseplot(-3..3, -3..3, κ)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"On the branch there is the expected jump:"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(0.0 - 2.010075630518424im, 0.0 - 2.010075630518424im)"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x = 0.1\n",
"κ(x + 0.0im) - κ(x - 0.0im) , -2im/sqrt(1-x^2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"For $x < -1$ the branch cut is removable: we have continuity and therefore analyticity:"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.0 - 0.0im"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x = -2.3\n",
"κ(x + 0.0im) - κ(x - 0.0im) "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"3\\. $\\mu(z) = {\\log(z -1) - \\log(z+1) \\over 2 \\pi \\I}$ is the unique function analytic in $\\C \\backslash [-1,1]$ with weaker than pole singularities at $\\pm 1$ satisfying $\\mu(\\infty) = 0$ and \n",
"$$\\mu_+(x) - \\mu_-(x) = 1 \\qqfor -1 < x < 1.$$\n",
"\n",
"_Demonstration_ Here we see from the phase plot of $mu$ that it has a branch cut on $[-1,1]$:"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"\n",
"\n"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"μ = z -> (log(z-1) - log(z+1))/(2π*im)\n",
"phaseplot(-3..3, -3..3, μ)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"For $-1 < x < 1$ we have the jump $1$:"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1.0 + 0.0im"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x = 0.3\n",
"μ(x + 0.0im) - μ(x - 0.0im) "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"For $x < -1$ we see that the branch cuts cancel and we have continuity:"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.0 + 0.0im"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x = -4.3\n",
"μ(x + 0.0im) - μ(x - 0.0im) "
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Julia 1.0.1",
"language": "julia",
"name": "julia-1.0"
},
"language_info": {
"file_extension": ".jl",
"mimetype": "application/julia",
"name": "julia",
"version": "1.0.1"
}
},
"nbformat": 4,
"nbformat_minor": 2
}