{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "using Plots, ComplexPhasePortrait, ApproxFun" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\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", "# M3M6: Methods of Mathematical Physics\n", "\n", "Dr. Sheehan Olver\n", "
\n", "s.olver@imperial.ac.uk\n", "\n", "\n", "\n", "# Lecture 2: Cauchy's theorem" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "References: \n", "\n", "1. M.J. Ablowitz & A.S. Fokas, Complex Variables: Introduction and Applications, Second Edition, Cambridge University Press, 2003\n", "2. R. Earl, Metric Spaces and Complex Analysis, https://courses.maths.ox.ac.uk/node/view_material/5392, 2015\n", "\n", "\n", "### Complex-differentiable functions \n", "\n", "\n", "**Definition (Complex-differentiable)** Let $D \\subset {\\mathbb C}$ be an open set. A function $f : D \\rightarrow {\\mathbb C}$ is called _complex-differentiable_ at a point $z_0 \\in D$ if \n", "$$ \n", " f'(z_0) = \\lim_{z \\rightarrow z_0} {f(z) - f(z_0) \\over z - z_0}\n", "$$\n", "exists, for any angle of approach to $z_0$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Holomorphic functions\n", "\n", "**Definition (Holomorphic)** Let $D \\subset {\\mathbb C}$ be an open set. A function $f : D \\rightarrow {\\mathbb C}$ is called _holomorphic_ in $D$ if it is complex-differentiable at all $z \\in D$.\n", "\n", "**Definition (Entire)** A function is _entire_ if it is holomorphic in ${\\mathbb C}$\n", "\n", "\n", "*Examples*\n", "\n", "1. $1$ is entire\n", "2. $z$ is entire\n", "3. $1/z$ is holomorphic in ${\\mathbb C} \\backslash \\{0\\}$\n", "4. $\\sin z$ is entire\n", "5. $\\csc z$ is holomorphic in ${\\mathbb C} \\backslash \\{\\ldots,-2\\pi,-\\pi,0,\\pi,2\\pi,\\ldots\\}$\n", "6. $\\sqrt z$ is holomorphic in ${\\mathbb C} \\backslash (-\\infty,0]$\n", "\n", "We can usually infer the domain where a function is holomorphic from a phase portrait, here we see that ${\\rm arcsinh}\\, z$ has cuts on $[\\I,\\I \\infty)$ and $[-\\I,-\\I \\infty)$, and a zero (red–green–blue–red) at zero, hence we can infer that it is holomorphic in $\\C \\backslash ([\\I,\\I \\infty) \\cup [-\\I,-\\I \\infty))$." ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "-4\n", "\n", "\n", "-2\n", "\n", "\n", "0\n", "\n", "\n", "2\n", "\n", "\n", "4\n", "\n", "\n", "-4\n", "\n", "\n", "-2\n", "\n", "\n", "0\n", "\n", "\n", "2\n", "\n", "\n", "4\n", "\n", "\n", "\n", "\n", "\n" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "phaseplot(-4..4, -4..4, z -> asinh(z))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The following example $\\sqrt{z-1} \\sqrt{z+1}$ is analytic in ${\\mathbb C}\\backslash [-1,1]$ and will be returned to:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "-4\n", "\n", "\n", "-2\n", "\n", "\n", "0\n", "\n", "\n", "2\n", "\n", "\n", "4\n", "\n", "\n", "-4\n", "\n", "\n", "-2\n", "\n", "\n", "0\n", "\n", "\n", "2\n", "\n", "\n", "4\n", "\n", "\n", "\n", "\n", "\n" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "phaseplot(-4..4, -4..4, z -> sqrt(z-1)sqrt(z+1))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Contours\n", "\n", "**Definition (Contour)** A _contour_ is a continuous & piecewise-continuously differentiable function $\\gamma : [a,b] \\rightarrow {\\mathbb C}$.\n", "\n", "**Definition (Simple)** A _simple contour_ is a contour that is 1-to-1.\n", "\n", "**Definition (Closed)** A _closed contour_ is a contour such that $\\gamma(a) = \\gamma(b)$\n", "\n", "*Examples of contours*\n", "\n", "1. Line segment $[a,b]$ is a simple contour, with $\\gamma(t) = t$\n", "1. Arc from $re^{ia}$ to $re^{ib}$ is a simple contour, with $\\gamma(t) = re^{i t}$\n", "2. Circle of radius $r$ is a closed simple contour, with $\\gamma(t) = re^{i t}$ and $a = -\\pi$, $b = \\pi$\n", "3. $\\gamma(t) = \\cos (t+i)^2$ defines a contour that is not simple or closed\n", "4. $\\gamma(t) = e^{i t} + e^{2i t}$ for $[a,b] = [-\\pi,\\pi]$ defines a contour that is closed but not simple\n", "\n", "Here's an example of a closed contour that is not simple:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "scrolled": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "-1\n", "\n", "\n", "0\n", "\n", "\n", "1\n", "\n", "\n", "2\n", "\n", "\n", "-1.5\n", "\n", "\n", "-1.0\n", "\n", "\n", "-0.5\n", "\n", "\n", "0.0\n", "\n", "\n", "0.5\n", "\n", "\n", "1.0\n", "\n", "\n", "1.5\n", "\n", "\n", "\n", "\n", "\n" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a,b = -π, π\n", "tt = range(a, stop=b, length=1000)\n", "\n", "γ = t -> exp(im*t) +exp(2im*t)\n", "\n", "plot(real.(γ.(tt)), imag.(γ.(tt)); ratio=1.0, legend=false, arrow=true)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Contour integrals\n", "\n", "**Definition (Contour integral)** The _contour integral_ over $\\gamma$ is defined by\n", "$$\n", "\\int_\\gamma f(z) dz := \\int_a^b f(\\gamma(t)) \\gamma'(t) dt\n", "$$\n", "\n" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "0.00\n", "\n", "\n", "0.25\n", "\n", "\n", "0.50\n", "\n", "\n", "0.75\n", "\n", "\n", "1.00\n", "\n", "\n", "0.00\n", "\n", "\n", "0.25\n", "\n", "\n", "0.50\n", "\n", "\n", "0.75\n", "\n", "\n", "1.00\n", "\n", "\n", "\n", "\n", "\n" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "f = Fun( z -> real(exp(z)), Arc(0.,1.,(0,π/2))) # Not holomorphic!\n", "\n", "plot(domain(f); legend=false, ratio=1.0, arrow=true)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "-1.2485382363935424 + 1.949326343919058im" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sum(f) # this means contour integral" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "-1.2485382363935429 + 1.9493263439190578im" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "g = im*Fun(t-> f(exp(im*t))*exp(im*t), 0 .. π/2)\n", "sum( g ) # this is standard integral" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "An important property of a contour is its _arclength_:\n", "\n", "**Definition (Arclength)** The _arclength_ of $\\gamma$ is defined as\n", "$$\n", " {\\cal L}(\\gamma) := \\int_a^b |\\gamma'(t)| dt\n", "$$\n", "\n", "A very useful result is that we can use the maximum and arclength to bound integrals:\n", "\n", "**Proposition (ML)** Let $f : \\gamma \\rightarrow {\\mathbb C}$ and \n", "$$\n", " M = \\sup_{z \\in \\gamma} |f(z)|\n", "$$ \n", "Then\n", "$$\n", " \\left|\\int_\\gamma f(z) dz \\right| \\leq M {\\cal L}(\\gamma)\n", " $$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Cauchy's theorem\n", "\n", "**Proposition** If $f(z)$ is holomorphic on $\\gamma$, then\n", "$$\\int_\\gamma f'(z) dz = f(\\gamma(b)) - f(\\gamma(a))$$" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(-2.1779795225909058 + 0.8414709848078968im, -2.177979522590906 + 0.8414709848078968im)" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "f = Fun( z -> exp(z), Arc(0.,1.,(0,π/2))) # Not holomorphic!\n", "\n", "sum(f) , f(im)-f(1)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(-2.1779795225909058 + 0.8414709848078968im, -2.177979522590906 + 0.8414709848078968im)" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "f = Fun( z -> exp(z), Arc(0.,1.,(0,π/2))) # Holomorphic!\n", "\n", "sum(f) , f(im)-f(1)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(-2.1779795225909053 + 0.8414709848078966im, -2.177979522590907 + 0.8414709848078968im)" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "f = Fun( z -> exp(z), Segment(1,im)) # Holomorphic!\n", "\n", "sum(f) , f(im)-f(1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Theorem (Cauchy)** If $f$ is holomorphic inside and on a closed contour $\\gamma$, then \n", "$$\\oint_\\gamma f(z) dz = 0$$" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "-3.3420237696193494e-16 + 3.141592653589793im" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "f = Fun( z -> real(exp(z)), Circle()) # Not holomorphic!\n", "\n", "sum(f)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2.9644937254112756e-17 - 1.4872544363724962e-16im" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "f = Fun( z -> exp(z), Circle()) # Holomorphic!\n", "\n", "sum(f)" ] } ], "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 }