{
"cells": [
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"using Plots, ComplexPhasePortrait, ApproxFun, SingularIntegralEquations\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\\dt{\\D t}\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",
"
\n",
"Website: https://github.com/dlfivefifty/M3M6LectureNotes\n",
"\n",
"# Lecture 11: Riemann–Hilbert problems\n",
"\n",
"\n",
"1. Constant coefficient Riemann–Hilbert problems\n",
" - Subtractive Riemann–Hilbert problem $\\phi_+(x) - \\phi_-(x) = f(x)$\n",
" - Additive Riemann–Hilbert problem $\\phi_+(x) + \\phi_-(x) = f(x)$\n",
" \n",
" \n",
"Let $\\Gamma$ be a set of contours, and for now assume $\\Gamma \\subset {\\mathbb R}$. Given functions $f$ and $g$ defined on $\\Gamma$, a (scalar) Riemann–Hilbert problem consists of finding a function $\\phi(z)$ with left/right limits \n",
"$$\\phi_\\pm(x) = \\lim_{\\epsilon \\rightarrow 0} \\phi(x \\pm \\I \\epsilon),$$\n",
"satisfying the following conditions:\n",
"\n",
"1. $\\phi(z)$ analytic in $\\bar\\C \\backslash \\Gamma$\n",
"2. $\\phi(\\infty) = C$\n",
"2. $\\phi(z)$ has weaker than pole singularities everywhere\n",
"2. $\\phi_+(x) - g(x) \\phi_-(x) = f(x)$ for $x \\in \\Gamma$\n",
"\n",
"\n",
"Numerous applications! See [\\[Trogdon & Olver 2015\\]](http://bookstore.siam.org/ot146/). Here are some classical applications:\n",
"\n",
"1. Ideal fluid flow\n",
"2. Solving integral equations via Weiner–Hopf factorization\n",
"2. Spectral analysis of Schrödinger operators\n",
"\n",
"More recently, non-classical applications have arisen from integrable systems:\n",
"\n",
"2. Solutions to Painlevé equations \n",
"3. Random matrix eigenvalue statistics\n",
"2. Solving partial differential equations like the Korteweg–de Vries (KdV) equation describing shallow water waves\n",
"$$\n",
"u_t + 6u u_x + u_{xxx} = 0\n",
"$$\n",
"\n",
""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Constant coefficient Riemann–Hilbert problems\n",
"\n",
"Consider the Riemann–Hilbert problem\n",
"$$\n",
" \\phi+(x) - c \\phi_-(x) = f(x)\n",
"$$\n",
"on the interval. General $c$ will be looked at in the problem sheets, so we only consider $c \\pm 1$.\n",
"\n",
"\n",
"### Subtractive Riemann–Hilbert problems\n",
"\n",
"The simplest example is when $c = 1$, in which case, assuming $f(x)$ satisfies the conditions of Plemelj theorem, the solution to \n",
"\n",
"1. $\\phi_+(x) - \\phi_-(x) = f(x)$ for $x \\in \\Gamma$\n",
"2. $\\phi(\\infty) = C$\n",
"2. $\\phi(z)$ has weaker than pole singularities\n",
"\n",
"is simply\n",
"\n",
"$$\n",
"\\phi(z) = \\CC_\\Gamma f(z) + C\n",
"$$"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"2.220446049250313e-16 + 0.0im"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x = Fun()\n",
"f = exp(x)\n",
"C = 2\n",
"φ = x -> cauchy(f, x) + C\n",
"\n",
"φ(0.1+0.0im)- φ(0.1-0.0im) -f(0.1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Analytic functions are continuous, hence if $\\Gamma$ is in the domain of analyticity, we have $\\phi_+(x) - \\phi_-(x) = 0$. This is why the constant $C$ does not impact the jump. This makes subtractive Riemann–Hilbert problems particularly nice as we can solve each component separately: that is \n",
"$$\n",
"\\CC_{\\Gamma_1 \\cup \\Gamma_2} f(z) = \\CC_{\\Gamma_1} f(z) + \\CC_{\\Gamma_2} f(z)\n",
"$$\n",
"We can also _fix_ up analyticity:\n",
"\n",
"**Example** \n",
"Solve the Riemann–Hilbert problem\n",
"\n",
"1. $\\phi(z)$ analytic in $\\bar\\C \\backslash [-1,1]$\n",
"2. $\\phi(\\infty) = -{\\I \\over 2}$\n",
"2. $\\phi(z)$ has weaker than pole singularities everywhere\n",
"2. $\\phi_+(x) - \\phi_-(x) = {\\sqrt{1-x^2} \\over x +2}$ for $-1 < x < 1$\n",
"\n",
"Consider the first guess\n",
"$$\n",
" \\psi(z) = - \\I {\\sqrt{z-1} \\sqrt{z+1} \\over 2(z + 2)}\n",
"$$\n",
"This satisfies 2, 3, and 4: it has the right jump on $-1 < x < 1$:\n",
"$$\n",
" \\psi_+(x) - \\psi_-(x) = {\\sqrt{1-x^2} \\over x+2}\n",
"$$"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"ψ(1.0e6) = 0.0 - 0.49999900000175im\n",
"f(0.1) = 0.47380354147934295\n",
"ψ(0.1 + 0.0im) - ψ(0.1 - 0.0im) = 0.47380354147934284 + 0.0im\n"
]
}
],
"source": [
"f = sqrt(1-x^2)/(x+2)\n",
"ψ = z -> -im*sqrt(z-1)sqrt(z+1)/(2(z+2))\n",
"@show ψ(1_000_000.0) # condition 2.\n",
"@show f(0.1)\n",
"@show ψ(0.1+0.0im) - ψ(0.1-0.0im); # condition 4."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The catch: it has a pole at $z = - 2$ 😩:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"\n",
"\n"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"phaseplot(-3..3, -2..2, ψ)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In particular, \n",
"$$\n",
"\\psi(z) = {\\I \\sqrt 3 \\over 2} {1 \\over z + 2} + O(1)\n",
"$$\n",
"near $z = -2$. Note that this takes a bit of care to work out since we are on the cancelling out branch cuts of $\\psi(z)$. But we do know away from $z = -2$ it is analytic, hence continuous, that is, \n",
"$$\n",
"\\psi(x) = \\lim_{\\epsilon \\rightarrow 0} \\psi(x \\pm \\I \\epsilon) = \\psi_\\pm(x)\n",
"$$\n",
"for real valued $x < -1$. In particular, we have\n",
"$$\n",
"\\psi(x) = \\psi_+(x) = - \\I { \\I \\sqrt{1-x} \\I \\sqrt{-x-1} \\over 2( x+2)} = \\I {\\sqrt{x^2 - 1} \\over 2( x+2)}\n",
"$$\n",
"\n",
"\n",
"Good thing it's a subtractive Riemann–Hilbert problem: we can subtract out the pole without impacting the jump. Therefore, we have\n",
"$$\n",
"\\phi(z) = \\psi(z) - {\\I \\sqrt 3 \\over 2} {1 \\over z + 2}=- \\I {\\sqrt{z-1} \\sqrt{z+1} \\over 2(z + 2)} - {\\I \\sqrt 3 \\over 2} {1 \\over z + 2}\n",
"$$\n",
"This is analytic off $[-2,2]$ (including at $z = -2$) and has the right jump:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"φ(1.0e6) = 0.0 - 0.49999986602542174im\n",
"f(0.1) = 0.47380354147934295\n",
"φ(0.1 + 0.0im) - φ(0.1 - 0.0im) = 0.47380354147934284 + 0.0im\n"
]
},
{
"data": {
"image/svg+xml": [
"\n",
"\n"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"φ = z -> ψ(z) - im*sqrt(3)/(2*(z+2))\n",
"@show φ(1_000_000.0) # condition 2.\n",
"@show f(0.1)\n",
"@show φ(0.1+0.0im) - φ(0.1-0.0im) # condition 4.\n",
"phaseplot(-3..3, -2..2, φ)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Additive Riemann–Hilbert problem\n",
"\n",
"We now introduce the case $c = -1$, in other words, we want to solve\n",
"$$\n",
"\\phi_+(x) + \\phi_-(x) = f(x) \\qquad \\phi(\\infty) = 0\n",
"$$\n",
"and take $\\Gamma = [-1,1]$. This is equivalent to finding an unknown function $u(x)$ such that\n",
"$$\n",
"-\\I \\HH u(x) = f(x)\n",
"$$\n",
"\n",
"\n",
"#### Reduction to Cauchy transform\n",
"\n",
"Consider $\\phi(z) = {\\psi(z) \\over \\sqrt{z-1}\\sqrt{z+1} }$, so that\n",
"$$\n",
" f(x) = \\phi_+(x) + \\phi_-(x) = { \\psi_+(x) \\over \\I \\sqrt{1-x^2}} - {\\psi_-(x) \\over \\I \\sqrt{1-x^2}} = {\\psi_+(x) - \\psi_-(x) \\over \\I \\sqrt{1-x^2}}\n",
"$$\n",
"Thus we have reduced an additive Riemann–Hilbert problem to a subtractive one: if\n",
"$$\\psi_+(x) - \\psi_-(x) = {f(x) \\I \\sqrt{1-x^2}},$$\n",
"we satisfy the correct jump. Therefore, we have the solution\n",
"$$\n",
"\\phi(z) = {\\I \\over \\sqrt{z-1}\\sqrt{z+1}} \\CC_{[-1,1]} \\left[{ f \\sqrt{1-\\diamond^2}}\\right](z) \n",
"$$"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"φ(1.0e8) = -2.825795526749808e-17 + 0.0im\n",
"f(0.1) = 1.1051709180756475\n",
"φ(0.1 + 0.0im) + φ(0.1 - 0.0im) = 1.1051709180756475 + 0.0im\n"
]
},
{
"data": {
"image/svg+xml": [
"\n",
"\n"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x = Fun()\n",
"f = exp(x)\n",
"\n",
"v = f*sqrt(1-x^2)\n",
"\n",
"φ = z -> im*cauchy(v, z)/(sqrt(z-1)sqrt(z+1))\n",
"\n",
"@show φ(1.0E8)\n",
"@show f(0.1)\n",
"@show φ(0.1+0.0im) + φ(0.1-0.0im);\n",
"\n",
"phaseplot(-3..3, -2..2, φ)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Is this the only solution? No! consider\n",
"$$\n",
"\\kappa(z) = {1 \\over \\sqrt{z-1}\\sqrt{z+1}}\n",
"$$\n",
"which satisfies $\\kappa_+(x) + \\kappa_-(x) = 0$. \n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"### General solution on $[-1,1]$ built _from_ a Cauchy transform\n",
"\n",
"Here we propose the general solution to an additive Riemann–Hilbert problem:\n",
"\n",
"**Theorem (Cauchy transform solution to Additive Riemann–Hilbert problem)** Suppose $\\phi(z)$ analytic in $\\C \\backslash [-1,1]$ satisfies\n",
"\n",
"1. $\\phi_+(x) + \\phi_-(x) = f(x) $ for $-1 < x < 1$, where $f$ is smooth on $[-1,1]$.\n",
"2. $\\phi(z)$ has weaker than pole singularities,\n",
"3. $\\phi(\\infty) = 0$.\n",
"\n",
"Then, for some constant $C$, \n",
"$$\n",
" \\phi(z) = {\\I \\over \\sqrt{z-1}\\sqrt{z+1}} \\CC_{[-1,1]} \\left[{ f(\\diamond) \\sqrt{1-\\diamond^2} }\\right](z) + {C \\over \\sqrt{z-1} \\sqrt{z+1}}\n",
"$$\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"φ(1.0e8) = -6.543337674831032e-9 + 0.0im\n",
"f(0.1) = 1.1051709180756475\n",
"φ(0.1 + 0.0im) + φ(0.1 - 0.0im) = 1.1051709180756475 + 0.0im\n"
]
},
{
"data": {
"image/svg+xml": [
"\n",
"\n"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x = Fun()\n",
"f = exp(x)\n",
"v = f*sqrt(1-x^2)\n",
"\n",
"C = randn() # doesn't matter\n",
"\n",
"φ = z -> im*cauchy(v, z)/(sqrt(z-1)sqrt(1+z)) + C/(sqrt(z-1)sqrt(z+1))\n",
"\n",
"@show φ(1.0E8)\n",
"@show f(0.1)\n",
"@show φ(0.1+0.0im) + φ(0.1-0.0im);\n",
"\n",
"phaseplot(-3..3, -2..2, φ)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"On other intervals $(a,b)$, we get the same forms of solution:\n",
"\n",
"$$\n",
" \\phi(z) = {\\I \\over \\sqrt{z-b}\\sqrt{z-a}} \\CC_{[a,b]} \\left[{ f(\\diamond) \\sqrt{b-\\diamond}\\sqrt{\\diamond-a} }\\right](z) + {C \\over \\sqrt{z-b} \\sqrt{z-a}}\n",
"$$\n",
"\n",
"### General solution on $[-1,1]$ _expressed as_ a Cauchy transform\n",
"\n",
"Note the expression above is _not_ a Cauchy transform of a function. We can determine a Cauchy transform expression by taking the difference: on $[-1,1]$ we have\n",
"\n",
"\\begin{align*}\n",
" u(x) &= \\phi_+(x) - \\phi_-(x) = {1 \\over \\sqrt{1 - x^2}}\\left( \\CC_{[-1,1]}^+ + \\CC_{[-1,1]}^- \\right) \\left[{ f(\\diamond) \\sqrt{1-\\diamond^2} }\\right](x) - {2C \\I \\over \\sqrt{1-x^2}} \\\\\n",
" &= {-\\I \\over \\sqrt{1 - x^2}}\\HH_{[-1,1]} \\left[{ f(\\diamond) \\sqrt{1-\\diamond^2} }\\right](x) - {2C \\I \\over \\sqrt{1-x^2}}\n",
"\\end{align*}\n",
"BY (**Plemelj II**), we guarantee that \n",
"$$\n",
"\\phi(z) = \\CC_{[-1,1]} u(z)\n",
"$$"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"φ(1.0 + 2.0im) = 0.1674484261991792 - 0.2713677090129005im\n",
"cauchy(u, 1.0 + 2.0im) = 0.16744842619917932 - 0.27136770901290047im\n"
]
}
],
"source": [
"x = Fun()\n",
"f = exp(x)\n",
"v = f*sqrt(1-x^2)\n",
"\n",
"C = randn() # doesn't matter\n",
"\n",
"φ = z -> im*cauchy(v, z)/(sqrt(z-1)sqrt(1+z)) + C/(sqrt(z-1)sqrt(z+1))\n",
"\n",
"u = -im/sqrt(1-x^2)*hilbert(f*sqrt(1-x^2)) - 2*C*im/sqrt(1-x^2)\n",
"\n",
"@show φ(1.0+2.0im);\n",
"@show cauchy(u, 1.0+2.0im);"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"On other intervals we have\n",
"\\begin{align*}\n",
" u(x) &= {-\\I \\over \\sqrt{b - x}\\sqrt{x-a}}\\HH_{[a,b]} \\left[{ f(\\diamond) \\sqrt{b-\\diamond}\\sqrt{\\diamond-a} }\\right](x) - {2C \\I \\over \\sqrt{b-x} \\sqrt{x-a}}\n",
"\\end{align*}\n",
"\n",
"\n",
"In the special case where we can calculate \n",
"$\\CC \\left[ f(\\diamond) \\sqrt{b-\\diamond}\\sqrt{\\diamond-a}\\right](z)$ exactly, we can work out the precise formula for $u(x)$ by taking the difference.\n",
"\n",
"\n",
"**Example** Consider solving\n",
"\n",
"1. $\\phi_+(x) + \\phi_-(x) = x $ for $-b < x < b$\n",
"2. $\\phi(z)$ has weaker than pole singularities,\n",
"3. $\\phi(\\infty) = 0$.\n",
"\n",
"Note that \n",
"$$\n",
" \\kappa(z) = {z \\sqrt{z-b} \\sqrt{z+b} - z^2 + b^2/2 \\over 2 \\I} \n",
"$$\n",
"satisfies\n",
"$$\n",
"\\kappa^+(x) - \\kappa^-(x) = x \\sqrt{b^2 - x^2}\n",
"$$\n",
"and $\\kappa(\\infty) = 0$. The second property follows since $\\kappa$ is analytic off $[-1,1]$ and has at most polynomial growth at $\\infty$. To understand the order of the polynomial growth, it's sufficient to study the limit on the real axis as $x \\rightarrow \\infty$, where we use the Taylor series of $\\sqrt x$ near $1$ to determine:\n",
"\\begin{align*}\n",
"x \\sqrt{x-b}\\sqrt{x + b} &= x^2 \\sqrt{1-b/x} \\sqrt{1 + b/x} = x^2 \\left(1 - {b\\over 2x} - {b^2 \\over 8x^2}\\right) \\left(1 + {b\\over 2x} - {b^2 \\over 8x^2}\\right)\\\\\n",
" = x^2 - {b^2\\over 2} + O(x^{-2})\n",
"\\end{align*}"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"κ(100000.0) = 0.0 - 0.0im\n"
]
},
{
"data": {
"text/plain": [
"(0.1997498435543818 + 0.0im, 0.1997498435543818)"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"b = 2\n",
"κ = z -> (z*sqrt(z-b)*sqrt(z+b) - z^2 + b^2/2)/(2im)\n",
"@show κ(1E5)\n",
"κ(0.1+0.0im)- κ(0.1-0.0im), 0.1sqrt(b^2-0.1^2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Hence every solution has the form\n",
"\\begin{align*}\n",
"\\phi(z) = {1 \\over \\sqrt{z-b} \\sqrt{z+b}} \\left({z \\sqrt{z-b} \\sqrt{z+b} - z^2 + b^2/2 \\over 2 } \\right) + {C \\over \\sqrt{z-b} \\sqrt{z+b}} \\\\\n",
"= {z \\over 2 } - {z^2 \\over 2 \\sqrt{z-b} \\sqrt{z+b}} + {D \\over \\sqrt{z-b} \\sqrt{z+b}}\n",
"\\end{align*}\n",
"where $D$ is again a arbitrary constant."
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.1 + 0.0im"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"D = randn()\n",
"\n",
"φ = z -> z/(2) - z^2/(2*sqrt(z-b)*sqrt(z+b)) + D/(sqrt(z-b)*sqrt(z+b))\n",
"φ(0.1+0.0im) + φ(0.1-0.0im)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Inspection reveals that\n",
"$$\n",
"u(x) = \\phi_+(x) - \\phi_-(x) = \\I {x^2 - 2D \\over \\sqrt{b^2-x^2}}\n",
"$$"
]
},
{
"cell_type": "code",
"execution_count": 65,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"cauchy(u, 2 + 2im) = -0.38895324392466324 + 0.8558850675485229im\n",
"φ(2 + 2im) = -0.3889532439246629 + 0.8558850675485228im\n"
]
}
],
"source": [
"x = Fun(-b..b)\n",
"u = im*(x^2 - 2D)/sqrt(b^2 - x^2)\n",
"@show cauchy(u ,2+2im)\n",
"@show φ(2+2im);"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Therefore, $\\CC u(z)$ satsifies $\\CC^+u(x) + \\CC^- u(x) = x$:"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.041082298011221145 + 0.0im"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cauchy(u, 0.1+0.0im) + cauchy(u, 0.1-0.0im)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$D$ is a free paremeter, hence, similar to ODEs, we can add a boundary condition. In other words we can ask for the solution satisfying, for example $u(0) = 0$. This is precisely when $D = 0$ and $u(x) = \\I x^2 / \\sqrt{b^2-x^2}$."
]
},
{
"cell_type": "code",
"execution_count": 66,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"\n",
"\n"
]
},
"execution_count": 66,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"D = 0\n",
"u = im*(x^2 - 2D)/sqrt(b^2 - x^2)\n",
"plot(imag(u); ylims=(-5,5), yaxis=\"Im\", label=\"u s.t. u(0) = 0\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Often we ask for the solution that is bounded at the left/right endpoint. Because of the symmetry in the problem (since $x$ is an odd function), we can actually get a solution that is bounded at both $\\pm b$ by choosing $D = b^2/2$:\n",
"$$\n",
"\\phi_+(x) - \\phi_-(x) = -\\I \\sqrt{b^2 - x^2}\n",
"$$"
]
},
{
"cell_type": "code",
"execution_count": 67,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"cauchy(u, 0.1 + 0.0im) + cauchy(u, 0.1 - 0.0im) = 0.10000000000000007 + 0.0im\n"
]
},
{
"data": {
"image/svg+xml": [
"\n",
"\n"
]
},
"execution_count": 67,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"b = 2.3\n",
"x = Fun(-b .. b)\n",
"u = -im*sqrt(b^2 - x^2)\n",
"@show cauchy(u, 0.1+0.0im) + cauchy(u, 0.1-0.0im)\n",
"plot(imag(u); label=\"u\", yaxis=\"Im\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In other words,\n",
"$$\n",
"\\phi(z) = - \\I \\CC_{[-b,b]} \\sqrt{b^2 - \\diamond^2}(z)\n",
"$$\n",
"is a bounded solution to the additive Riemann–Hilbert problem.\n",
"\n",
"## Inverting the Hilbert transform\n",
"\n",
"We can use this along with Plemelj's lemma to invert the Hilbert transform. That is, we want to find $v(x)$ such that\n",
"$$\n",
"\\HH v(x) = f(x)\n",
"$$\n",
"Based on the above construction of $u(x)$, consider\n",
"$$\n",
" v(x) =-\\I u(x) = {-1 \\over \\sqrt{1 - x^2}}\\HH_{[-1,1]} \\left[{ f(\\diamond) \\sqrt{1-\\diamond^2} }\\right](x) - {2C \\over \\sqrt{1-x^2}}\n",
"$$ "
]
},
{
"cell_type": "code",
"execution_count": 68,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"-2.220446049250313e-16"
]
},
"execution_count": 68,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x= Fun()\n",
"f = exp(x)\n",
"\n",
"C = randn()\n",
"v = -1/sqrt(1-x^2)*hilbert(f*sqrt(1-x^2)) - 2*C/sqrt(1-x^2)\n",
"hilbert(v, 0.1) - exp(0.1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This construction works since $\\phi(z) = \\CC u(z) = \\I \\CC v(z)$, and\n",
"$$\n",
"\\HH v(x) = \\I (\\CC^+ + \\CC^-) v(x) = \\phi^+(x) + \\phi^-(x) = f(x)\n",
"$$\n",
"\n",
"**Example** \n",
"\n",
"Consider $\\HH_{[-b,b]} v(x) = x$. We have \n",
"$$\n",
" -\\I \\HH_{[-b,b]} \\sqrt{b^2 - \\diamond^2}(x) = \\CC_{[-b,b]}^+ \\sqrt{b^2 - \\diamond^2}(z) + \\CC_{[-b,b]}^- \\sqrt{b^2 - \\diamond^2}(z) = \\I (\\phi^+(x) + \\phi^-(x) ) = \\I x\n",
"$$\n",
"which shows that the solution is\n",
"$$\n",
"v(x) = - \\sqrt{b^2 - \\diamond^2}\n",
"$$"
]
},
{
"cell_type": "code",
"execution_count": 69,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"\n",
"\n"
]
},
"execution_count": 69,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x = Fun(-b .. b)\n",
"v = -sqrt(b^2 - x^2)\n",
"\n",
"plot(v; label = \"v\")\n",
"plot!(hilbert(v); ylims=(-3,3), label=\"H[v]\")"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Julia 1.0.2",
"language": "julia",
"name": "julia-1.0"
},
"language_info": {
"file_extension": ".jl",
"mimetype": "application/julia",
"name": "julia",
"version": "1.0.2"
}
},
"nbformat": 4,
"nbformat_minor": 2
}