{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Fonctions d'une variable complexe (III)\n",
    "\n",
    "# Trigonométrie\n",
    "\n",
    "Marc Lorenzi\n",
    "\n",
    "7 avril 2019"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import cmath\n",
    "import math\n",
    "import colorsys\n",
    "import random"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "plt.rcParams['figure.figsize'] = (10, 10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "__Avertissement__ : Avant de lire ce notebook, regardez ceux intitulés Fonctions d'une variable complexe (I) et (II).\n",
    "\n",
    "Nous allons nous intéresser ici aux fonctions trigonométriques. Sinus, cosinus, tangente, ainsi que leurs \"réciproques\".\n",
    "\n",
    "Voici tout d'abord la fonction de tracé introduite dans le premier notebook."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "def arg01(z):\n",
    "    theta = cmath.phase(z) / (2 * math.pi)\n",
    "    if theta < 0: return theta + 1\n",
    "    else: return theta"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "def psi(x, m, d):\n",
    "    if x == 0: return 0\n",
    "    else:\n",
    "        return abs(math.sin(math.pi * math.log(x, 2) / m)) ** d"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "def plot_complex(f, extent=[-1.5, 1.5, -1.5, 1.5], m=1, d=0.2, nx=400, ny=400):\n",
    "    xmin, xmax, ymin, ymax = extent\n",
    "    ws = [[0 for i in range(nx)] for j in range(ny)]\n",
    "    plt.hsv()\n",
    "    for i in range(nx):\n",
    "        for j in range(ny):\n",
    "            x = xmin + j * (xmax - xmin) / nx\n",
    "            y = ymax - i * (ymax - ymin) / ny\n",
    "            z = x + 1j * y\n",
    "            try:\n",
    "                w = f(z)\n",
    "                r = psi(abs(w), m, d)\n",
    "                ph = arg01(w)\n",
    "                ws[i][j] = colorsys.hsv_to_rgb(ph, 1, r)\n",
    "            except:\n",
    "                ws[i][j] = (0., 0., 0.)\n",
    "    plt.imshow(ws, interpolation='bicubic', extent=extent, aspect='auto')\n",
    "    plt.grid()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1. Cosinus et sinus"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.1 La fonction $z\\mapsto e^{iz}$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Voici le graphe de $z\\mapsto e^{iz}$. C'est tout simplement le graphe de l'exponentielle, tourné de $\\frac\\pi 2$ par la multiplication par $i$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "M = 4\n",
    "plot_complex(lambda z: cmath.exp(1j * z), extent=[-4, 4, -4, 4])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Nous allons __définir__ fonctions réelles $\\cos$ et $\\sin$ comme la partie réelle et la partie imaginaire de $x\\mapsto e^{ix}$. Remarquons que\n",
    "\n",
    "$$e^{ix}=\\sum_{n=0}^{\\infty}i^n\\frac {x^n}{n!}$$\n",
    "\n",
    "$i^n$ est réel si $n$ est pair, et imaginaire pur si $n$ est impair. On en déduit facilement que pour tout réel $x$,\n",
    "\n",
    "$$\\cos x=\\sum_{n=0}^\\infty(-1)^n\\frac{x^{2n}}{(2n)!}$$\n",
    "\n",
    "et\n",
    "\n",
    "$$\\sin x=\\sum_{n=0}^\\infty(-1)^n\\frac{x^{2n+1}}{(2n+1)!}$$\n",
    "\n",
    "La fonction $\\cos$ est paire, la fonction $\\sin$ est impaire. Ces deux fonctions sont de classe $\\mathcal C^\\infty$ sur $\\mathbb R$ et la dérivation terme à terme des séries ci-dessus montre que\n",
    "\n",
    "$$\\cos'=-\\sin\\quad{\\rm et}\\quad \\sin'=\\cos$$\n",
    "\n",
    "\n",
    "__Proposition__ : Pour tout réel $x$, $\\cos^2 x+\\sin^2 x = 1$.\n",
    "\n",
    "__Démonstration__ : Soit $f:x\\mapsto\\cos^2 x+\\sin^2 x$. La fonction $f$ est dérivable sur $\\mathbb R$ et pour tout $x$ réel on a\n",
    "\n",
    "$$f'(x)=2\\cos x\\cos'x+2\\sin x\\sin' x=0$$\n",
    "\n",
    "$f$ est donc constante. Or $f(0)=1$."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "__Proposition__ : Les fonctions $\\cos$ et $\\sin$ sont périodiques sur $\\mathbb R$, de même période.\n",
    "\n",
    "__Démonstration__ : Considérons la fonction $f$ définie sur $\\mathbb R$ par \n",
    "\n",
    "$$f(x)=\\cos x - 1 + \\frac{x^2}{2}-\\frac{x^4}{24}$$\n",
    "\n",
    "On a pour tout réel $x$\n",
    "\n",
    "$$f'(x)=-\\sin x + x - \\frac{x^3}{6}$$\n",
    "\n",
    "$$f''(x)=-\\cos x + 1 - \\frac{x^2}{2}$$\n",
    "\n",
    "$$f'''(x)=\\sin x - x$$\n",
    "\n",
    "$$f^{(4)}(x)=\\cos x - 1$$\n",
    "\n",
    "Comme $\\cos^2 x + \\sin^2 x=1$ on a $\\cos x \\le 1$ donc $f^{(4)}\\le 0$. On en déduit que $f'''$ décroît. Or $f'''(0)=0$. Donc $f'''\\le 0$ sur $\\mathbb R_+$. Même raisonnement pour montrer que $f'', f'$ et $f$ sont négatives sur $\\mathbb R_+$. Par conséquent, pour tout $x$ positif on a \n",
    "\n",
    "$$\\cos x\\le 1 - \\frac{x^2}{2}+\\frac{x^4}{24}$$\n",
    "\n",
    "Prenons $x=\\sqrt 3$. On obtient \n",
    "\n",
    "$$\\cos \\sqrt 3\\le 1 - \\frac 3 2 + \\frac 9 {24}=-\\frac 1 8 < 0$$\n",
    "\n",
    "Comme $\\cos 0=1>0$, le théorème des valeurs intermédiaires montre qu'il existe $a\\in]0,\\sqrt 3[$ tel que $\\cos a=0$. De l'égalité $\\cos^2 a+\\sin^2 a=1$, on déduit $\\sin a=\\pm 1$. Ainsi, $e^{ia}=\\pm i$, donc \n",
    "\n",
    "$$e^{4ia}=1$$\n",
    "\n",
    "Posons $T=4a$. On a pour tout réel $x$, $e^{i(x+T)}=e^{ix}e^{iT}=e^{ix}$, donc $\\cos(x+T)=\\cos x$ et $\\sin(x+T)=\\sin x$. Les fonctions $\\cos$ et $\\sin$ sont donc périodiques, de période $T$.\n",
    "\n",
    "__Remarque__ : $T$ est la plus petite période de $\\cos$ et $\\sin$. En effet, soit $0<x<a$. On a $\\sin x\\ge x - \\frac{x^3} 6$ (voir $f'$ ci-dessus), ou encore \n",
    "\n",
    "$$\\sin x\\ge x (1- \\frac{x^2} 6)>x(1-\\frac {a^2}6)> x(1-\\frac{\\sqrt 3^2}6)=\\frac x 2$$\n",
    "\n",
    "Ainsi, $-\\cos' x= \\sin x >0$ donc $\\cos$ décroît strictement sur $[0,a]$ et $a$ est la plus petite racine strictement positive de $\\cos$. De là, $\\cos$ est strictement positif sur $[0, a[$ donc $\\sin$ croît strictement sur $[0,a]$. Donc $\\sin a=1$. Et $a$ est le plus petit réel positif tel que $\\sin a=1$. Résumons nous : pour tout $x\\in ]0,a[$, on a\n",
    "\n",
    "$$0<\\cos x<1\\quad{\\rm et}\\quad 0<\\sin x< 1$$\n",
    "\n",
    "Ainsi (facile) $e^{ix}\\ne \\pm 1,\\pm i$ donc $e^{4ix}\\ne 1$. Il s'ensuit que $4x$ n'est pas une période de $\\sin$ ou de $\\cos$. En effet, $\\cos(0+4x)=\\cos 0$ entraînerait que $\\cos 4x=1$, d'où $\\sin 4x=0$ et donc $e^{4ix}=1$. De la même façon, si on suppose que $\\sin(a+4x)=\\sin a=1$, alors, $\\cos(a+4x)=0$ d'où $1=e^{i(a+4x)}=e^{ia}e^{4ix}=e^{4ix}$."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "__Définition__ : On note $\\pi=\\frac T 2$, la moitié de la période commune de $\\sin$ et $\\cos$.\n",
    "\n",
    "Eh oui, on vient de __définir__ $\\pi$ ... Nous avons donc également montré ci-dessus que $\\frac \\pi 2$ est la plus petite racine positive de la fonction $\\cos$, et également le plus petit réel positif en lequel la fonction $\\sin$ vaut 1. À partir de là, il n'est pas difficile de trouver tous les réels en lesquels $\\cos$ ou $\\sin$ valent 0, $1$ ou $-1$. Je ne le ferai pas ici."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.2 Cosinus et sinus complexes"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Pour $z\\in\\mathbb C$, on pose $\\cos z=\\frac{e^{iz}+e^{-iz}}{2}$ et $\\sin z=\\frac{e^{iz}-e^{-iz}}{2i}$. Si $z$ est réel, on retrouve évidemment les fonctions $\\cos$ et $\\sin$ définies au paragraphe précédent. Nous venons donc de prolonger ces deux fonctions à $\\mathbb C$. La parité de $\\cos$ et l'imparité de $\\sin$ sont trivialement conservées. Quoi d'autre ?\n",
    "\n",
    "__Proposition__ : $\\cos$ et $\\sin$ sont holomorphes sur $\\mathbb C$. On a $\\cos'=-\\sin$ et $\\sin'=\\cos$.\n",
    "\n",
    "__Démonstration__ : C'est facile, vous savez déjà dériver l'exponentielle.\n",
    "\n",
    "Toutes les formules de trigonométrie classiques s'étendent au cosinus et au sinus complexe.\n",
    "\n",
    "__Proposition__ : Pour tous $a,b\\in\\mathbb C$, on a\n",
    "\n",
    "$$\\sin(a+b)=\\sin a\\cos b+\\cos a\\sin b$$\n",
    "\n",
    "__Démonstration__ :\n",
    "\n",
    "$$\\sin a \\cos b = \\frac 1 {4i}\\left(e^{ia}-e^{-ia}\\right)\\left(e^{ib}+e^{-ib}\\right)=\\frac 1 {4i} e^{i(a+b)}-\\frac 1 {4i} e^{-i(a+b)}+\\frac 1 {4i} e^{i(a-b)}-\\frac 1 {4i} e^{i(-a+b)}$$\n",
    "\n",
    "et\n",
    "\n",
    "$$\\cos a \\sin b = \\frac 1 {4i}\\left(e^{ia}+e^{-ia}\\right)\\left(e^{ib}-e^{-ib}\\right)=\\frac 1 {4i} e^{i(a+b)}-\\frac 1 {4i} e^{-i(a+b)}-\\frac 1 {4i} e^{i(a-b)}+\\frac 1 {4i} e^{i(-a+b)}$$\n",
    "\n",
    "En additionnant, on obtient\n",
    "\n",
    "$$\\sin a\\cos b + \\cos a\\sin b=\\frac 1 {2i} e^{i(a+b)}-\\frac 1 {2i} e^{-i(a+b)}=\\sin(a+b)$$\n",
    "\n",
    "Indication : Démontrez les autres formules :-)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Aucune surprise non plus sur l'annulation du sinus et du cosinus.\n",
    "\n",
    "__Proposition__ : Soit $z\\in\\mathbb C$. On a $\\sin z =0$ si et seulement si $z=k\\pi$ où $k\\in\\mathbb Z$.\n",
    "\n",
    "__Démonstration__ : On a $\\sin z=0$ si et seulement si $e^{iz}=e^{-iz}$, c'est à dire $e^{2iz}=1$. Posons $z=x+iy$. Cette condition équivaut à $e^{2ix}e^{-y}=1$. Passant au module, on obtient $e^{-y}=1$, d'où $y =0$. De là, $e^{2ix}=1$, c'est à dire $\\cos(2x)=1$ et $\\sin(2x)=0$, qui se produit si et seulement si $x$ est un multiple de $\\pi$.\n",
    "\n",
    "__Exercice__ : Faire de même pour la fonction cosinus."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.3 Les graphes"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Voici le graphe de la fonction cosinus (à gauche) et de la fonction sinus (à droite)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "plt.rcParams['figure.figsize'] = (16, 8)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "M = 4\n",
    "plt.subplot(121)\n",
    "plot_complex(lambda z: cmath.cos(z), extent=[-4, 4, -4, 4])\n",
    "plt.subplot(122)\n",
    "plot_complex(lambda z: cmath.sin(z), extent=[-4, 4, -4, 4])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "plt.rcParams['figure.figsize'] = (10, 10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Que voit-on sur ces deux graphes ? \n",
    "\n",
    "1. On passe du premier au second graphe par une translation.\n",
    "1. Une répétition des motifs de la gauche vers la droite.\n",
    "2. Des racines simples (1 cycle de couleurs) aux points $\\frac\\pi 2 + k\\pi$, $k\\in \\mathbb Z$.\n",
    "3. Lorsqu'on s'éloigne de l'axe $Ox$, des bandes horizontales qui ressemblent beaucoup à celles que nous avions vues dans le graphe de la fonction exponentielle.\n",
    "\n",
    "Mathématiquement que signifient ces observations ?"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "__Propriété 1__ : Pour tout $z\\in\\mathbb C$, $\\cos(z-\\frac\\pi 2)= \\sin z$."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "__Propriété 2__ : La fonction $\\cos$ est périodique, de période $2\\pi$ :\n",
    "\n",
    "$$\\forall z\\in\\mathbb C,\\cos(z+2\\pi)=\\cos z$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "__Propriété 3__ : Soit $z\\in\\mathbb C$. \n",
    "\n",
    "- On a $\\cos z=0$ si et seulement si il existe $k\\in\\mathbb Z$ tel que $z=\\frac\\pi 2+k\\pi$. En ces points, la dérivée du cosinus est non nulle (elle vaut en fait $\\pm 1$).\n",
    "- On a $\\sin z=0$ si et seulement si il existe $k\\in\\mathbb Z$ tel que $z=k\\pi$. En ces points, la dérivée du sinus est non nulle (elle vaut en fait $\\pm 1$)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "__Propriété 4__ : $\\sin(z) - \\frac 1 2 e^{-iz}$ tend vers 0 lorsque $\\Im z$ tend vers $+\\infty$, _uniformément_ en $\\Re z$.\n",
    "\n",
    "__Démonstration__ : Posons $z=x+iy$. On a \n",
    "\n",
    "$$|\\sin(z) - \\frac 1 2 e^{-iz}|=\\frac 1 2 |e^{iz}|$$\n",
    "\n",
    "Or\n",
    "\n",
    "$$|e^{iz}|=|e^{ix}e^{-y}|=e^{-y}$$\n",
    "\n",
    "et cette quantité tend vers vers 0 lorsque $y$ tend vers $+\\infty$.\n",
    "\n",
    "Ainsi, lorsqu'on s'éloigne de l'axe $Ox$, le graphe du sinus ressemble fortement à celui de $z\\mapsto \\frac 1 2 e^{-iz}$.\n",
    "\n",
    "__Exercice__ : Je vous laisse faire de même lorsque $y$ tend vers $-\\infty$. Et également pour la fonction cosinus."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Il y aurait encore bien des choses à regarder, comme par exemple la position des couleurs les unes par rapport aux autres, au-dessus et au-dessous de l'axe $Ox$, etc. Mais je ne voudrais pas lasser mon éventuel lecteur."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3. Tangente"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "On définit bien évidemment $\\tan z =\\frac{\\sin z}{\\cos z}$. La fonction tangente est définie sur $\\mathbb C$ privé des points où le cosinus s'annule, c'est à dire $\\{\\frac\\pi 2 + k\\pi, k\\in\\mathbb Z\\}$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "M = 3\n",
    "plot_complex(lambda z: cmath.tan(z), extent=[-M, M, -M, M])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "La fonction tangente a des racines simples aux multiples de $\\pi$ et des pôles simples aux points où elle n'est pas définie. Comment les distinguer sur le graphique ? Au risque de me répéter, dans quel sens tournent les couleurs :-) ?"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 4. Fonctions hyperboliques"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Très brève évocation des fonctions hyperboliques ... Pour $z\\in\\mathbb C$, on pose\n",
    "\n",
    "$$\\cosh z=\\frac{e^z+e^{-z}}{2},\\quad \\sinh z=\\frac{e^z-e^{-z}}{2}, \\quad \\tanh z=\\frac{\\sinh z}{\\cosh z}$$\n",
    "\n",
    "Pourquoi \"brève évocation\" ? Tout simplement parce que ces fonctions sont quasi-identiques aux fonctions $\\cos$, $\\sin$ et $\\tan$. En effet\n",
    "\n",
    "$$\\cosh z=\\frac{e^{i^2z}+e^{-i^2z}} 2=\\cos (iz)$$\n",
    "\n",
    "et, de même,\n",
    "\n",
    "$$\\sinh z=\\frac{e^{-i^2z}-e^{-i^2z}} {2}=-i\\sin (iz)$$\n",
    "\n",
    "d'où\n",
    "\n",
    "$$\\tanh z=\\frac{-i\\sin(iz)}{\\cos(iz)}=-i\\tan(iz)$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Traçons tout de même quelques graphes."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "plt.rcParams['figure.figsize'] = (16, 8)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Tout d'abord, $\\cosh$ et $\\cos$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "M = 3\n",
    "plt.subplot(121, aspect='equal')\n",
    "plot_complex(lambda z: cmath.cosh(z), extent=[-M, M, -M, M])\n",
    "plt.subplot(122, aspect='equal')\n",
    "plot_complex(lambda z: cmath.cos(z), extent=[-M, M, -M, M])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Puis $\\sinh$ et $\\sin$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "M = 3\n",
    "plt.subplot(121, aspect='equal')\n",
    "plot_complex(lambda z: cmath.sinh(z), extent=[-M, M, -M, M])\n",
    "plt.subplot(122, aspect='equal')\n",
    "plot_complex(lambda z: cmath.sin(z), extent=[-M, M, -M, M])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Et enfin, $\\tanh$ et $\\tan$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "M = 3\n",
    "plt.subplot(121, aspect='equal')\n",
    "plot_complex(lambda z: cmath.tanh(z), extent=[-M, M, -M, M])\n",
    "plt.subplot(122, aspect='equal')\n",
    "plot_complex(lambda z: cmath.tan(z), extent=[-M, M, -M, M])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Je vous laisse méditer sur ces graphes. Exemple de méditation : si vous tournez le graphe de $\\cosh$ de $90$ degrés, vous obtenez celui de $\\cos$. En revanche, si vous tentez l'expérience avec $\\sinh$ et $\\sin$, les couleurs ne correspondent pas. Pourquoi ? "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "plt.rcParams['figure.figsize'] = (10, 10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 5. Fonctions trigonométriques \"réciproques\""
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 5.1 La fonction $h$ du second notebook"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Voici la fonction $h$ introduite dans le second notebook. Nous allons en avoir besoin."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "def h(z):\n",
    "    w = cmath.sqrt(z ** 2 - 1)\n",
    "    if z.imag < 0 and z.real > 0: return -w\n",
    "    elif z.imag > 0 and z.real < 0: return -w\n",
    "    else: return w"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Rappelez-vous le graphe de $h$. La fonction $h$ est holomorphe sur $\\mathbb C$ privé des demi-droites $]-\\infty,-1]$ et $[1,\\infty[$. Remarquons que pour tout $z$ dans cet ensemble, on a $h(z)^2=z^2-1$. En dérivant, on obtient $2h(z)h'(z)=2z$. Ainsi,\n",
    "\n",
    "$$h'(z)=\\frac{z}{h(z)}$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "M = 3\n",
    "plot_complex(h, extent=[-M, M, -M, M])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 5.2 La fonction arc cosinus"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Soit $z\\in\\mathbb C$. Trouvons tous les nombres complexes $w$ tels que $\\cos w=z$. Cette égalité équivaut à\n",
    "\n",
    "$$e^{iw}+e^{-iw}=2z$$\n",
    "\n",
    "ou encore\n",
    "\n",
    "$$W^2-2zW+1=0$$\n",
    "\n",
    "où on a posé $W=e^{iw}$. Le discriminant de cette équation du second degré est $\\Delta=4(z^2-1)$. Ainsi, $w$ convient si et seulement si\n",
    "\n",
    "$$e^{iw}=z\\pm \\sqrt{z^2-1}$$\n",
    "\n",
    "où le symbole $\\sqrt{}$ désigne une racine carrée de $z$. Finalement, $\\cos w =z$ si et seulement si\n",
    "\n",
    "$$w=-i\\log(z\\pm \\sqrt{z^2-1})$$\n",
    "\n",
    "Remarquons que $(z+ \\sqrt{z^2-1})(z- \\sqrt{z^2-1})=z^2-(z^2-1)=1$. Or, deux nombres inverses l'un de l'autre ont des logarithmes oppposés (modulo $2i\\pi$). Ainsi, on peut réécrire l'égalité ci-dessus\n",
    "\n",
    "$$w=\\pm i\\log(z - \\sqrt{z^2-1})$$\n",
    "\n",
    "L'indétermination de signe sur la racine carrée et le signe $\\pm$ reflètent la parité du cosinus. Le logarithme, quant à lui, est défini modulo $2i\\pi$, ce qui entraîne que $w$ est défini modulo $2\\pi$. Normal, puisque la fonction $\\cos$ est $2\\pi$-périodique."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Quel est le choix fait par Pyhon ? Lisons la documentation :\n",
    "\n",
    "`cmath.acos(x)\n",
    "Return the arc cosine of x. There are two branch cuts: One extends right from 1 along the real axis to ∞, continuous from below. The other extends left from -1 along the real axis to -∞, continuous from above.`\n",
    "\n",
    "Rappelez-vous la fonction $h$ dont nous avons parlé dans le paragraphe sur la racine carrée ! Le choix fait par Python est $\\arccos z=i\\log(z-h(z))$. Si cela ne vous paraît pas clair, rassurez-vous c'est normal. Nous allons le vérifier graphiquement. En faisant ce choix, on obtient une fonction $\\arccos$ holomorphe sur $\\mathbb C\\setminus (]-\\infty,-1]\\cup [1,+\\infty[)$. Que vaut sa dérivée ? Eh bien\n",
    "\n",
    "$$\\arccos'(z)=\\frac i {z-h(z)}(1-h'(z))=\\frac i {z-h(z)}(1-\\frac z {h(z)})=-\\frac i {h(z)}$$\n",
    "\n",
    "Si on __pose__ $i\\sqrt{1-z^2}=h(z)$, alors, oui, on a\n",
    "\n",
    "$$\\arccos' z=-\\frac 1 {\\sqrt{1-z^2}}$$\n",
    "\n",
    "La fonction `myarccos` ci-dessous renvoie les mêmes valeurs que `cmath.acos` ..."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "def myarccos(z):\n",
    "    return 1j * cmath.log(z - h(z))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "M = 3\n",
    "plot_complex(lambda z: cmath.acos(z), extent=[-M, M, -M, M], m=0.25)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "M = 3\n",
    "plot_complex(lambda z: myarccos(z), extent=[-M, M, -M, M], m=0.25)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "__Exercice__ : En réalité, notre fonction `myarccos` est \"presque\" égale à la la fonction `cmath.acos`. Il y a une différence pour les images de certains réels et certains imaginaires purs.\n",
    "\n",
    "1. Regardez attenbtivement le graphe ci-dessus, il y a des segments hrizontaux et verticaux \"un peu épais\". Mais ceci n'apparaît pas dans le graphe de `cmath.acos` !\n",
    "\n",
    "2. Relisez la documentation de `cmath.acos`.\n",
    "3. Comparez les valeurs `cmath.acos` et `myarccos` pour les réels inférieurs à $-1$  et les réels supérieurs à $1$.\n",
    "4. Modifiez en conséquence la fonction $h$ pour que ce petit souci soit résolu."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "__Exercice__ : Lisez la documentation de la fonction `cmath.asin` et fabriquez votre propre fonction `myarcsin`. Qui sait, peut-être vous suffira-t-il d'utiliser `myarccos`???"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 6. L' arc tangente"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 6.1 C'est quoi ?"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Soit $z\\in\\mathbb C$. Trouvons tous les nombres complexes $w$ tels que $\\tan w=z$. Cette égalité équivaut à\n",
    "\n",
    "$$e^{iw}-e^{-iw}=iz(e^{iw}+e^{-iw})$$\n",
    "\n",
    "ou encore\n",
    "\n",
    "$$W-1 = iz(W+1)$$\n",
    "\n",
    "où on a posé $W=e^{2iw}$. Cette égalité s'écrit encore\n",
    "\n",
    "$$W(1-iz)=1+iz$$\n",
    "\n",
    "Si $z=-i$ cette équation n'a pas de solution. Si $z=i$, cette équation a pour seule solution $W=0$, mais ceci est impossible puisque $W$ est une exponentielle, et est donc non nul. Sinon, on obtient\n",
    "\n",
    "$$W=\\frac{1-iz}{1+iz}$$\n",
    "\n",
    "et donc\n",
    "\n",
    "$$w=\\frac 1 {2i}\\log\\frac{1+iz}{1-iz}$$\n",
    "\n",
    "Factorisons $i$ en haut et en bas de la fraction pour obtenir l'expression finale\n",
    "\n",
    "$$w=\\frac 1 {2i}\\log\\frac{i - z}{i + z}$$\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "__Définition__ : $\\arctan z=\\frac 1 {2i}\\log\\frac{i-z}{i+z}$\n",
    "\n",
    "__Exercice__ : Quelle est la dérivée de la fonction $\\arctan$ ?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "def myarctan(z):\n",
    "    return cmath.log((1j - z) / (1j + z)) / (2 * 1j)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 6.2 Le graphe"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "scrolled": false
   },
   "outputs": [],
   "source": [
    "M = 2\n",
    "plot_complex(lambda z: cmath.atan(z), extent=[-M, M, -M, M])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 6.3 Holomorphie"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Où la fonction arc tangente est-elle holomorphe ? Les théorèmes généraux nous disent \"au moins\" là où $\\frac{i-z}{i+z}\\not\\in\\mathbb R_-$. Allons, un petit calcul. Soit $z\\in\\mathbb C$, différent de $\\pm i$. On a $Z=\\frac{i-z}{i+z}\\in\\mathbb R$ si et seulement $\\overline Z=Z$, c'est à dire\n",
    "\n",
    "$$\\frac{-i-\\overline z}{-i+\\overline z}=\\frac{i-z}{i+z}$$\n",
    "\n",
    "ou encore\n",
    "\n",
    "$$(i+z)(i+\\overline z)=(i-z)(i-\\overline z)$$\n",
    "\n",
    "En développant on obtient la condition équivalente $z+\\overline z=0$, c'est à dire $z\\in i\\mathbb R$. Posons donc $z=it$, où $t\\in\\mathbb R$. On a alors\n",
    "\n",
    "$$\\frac{i-z}{i+z}=\\frac{1-t}{1+t}$$\n",
    "\n",
    "et cette quantité est négative si et seulement si (facile) $t\\ge 1$ ou $t\\le -1$. Conséquence :\n",
    "\n",
    "__Proposition__ : $\\arctan$ est holomorphe sur $\\mathbb C$ privé des demi-droites $\\{it, t\\in]-\\infty, -1]\\}$ et $\\{it, t\\in [1,+\\infty[\\}$."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 6.4 Comportement à l'infini"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Faisons un zoom arrière sur le graphe de l'arc tangente ..."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "scrolled": false
   },
   "outputs": [],
   "source": [
    "M = 5\n",
    "plot_complex(lambda z: cmath.atan(z), extent=[-M, M, -M, M])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "C'est tout cyan à gauche et tout rouge à droite. Pourquoi ?\n",
    "\n",
    "Lorsque $|z|$ tend vers $+\\infty$, on a $\\frac{i-z}{i+z}$ qui tend vers $-1$. Son logarithme tend donc vers ... vers quoi ? Le nombre $-1$ est justement un point où le logarithme est discontinu ! Il nous faut connaître le signe de la partie imaginaire : si $Z\\to -1$ et $\\Im Z>0$, alors $\\log Z$ tend vers $i\\pi$. Si, au contraire, $\\Im Z<0$, alors $\\log Z$ tend vers $-i\\pi$.\n",
    "\n",
    "__Exercice__ : Soit $z=x+iy$ un nombre complexe différent de $-i$. Montrez que la partie imaginaire de $\\frac{i-z}{i+z}$ est $\\frac{2x}{x^2+(1+y)^2}$.\n",
    "\n",
    "Dans le demi-plan à droite de l'axe $Oy$, cette partie imaginaire est donc strictement positive. Ainsi, lorsque $z$ tend vers l'infini en restant dans le demi-plan de droite,\n",
    "\n",
    "$$\\arctan z=\\frac 1 {2i}\\log \\frac{i-z}{i+z}\\to  \\frac 1 {2i} i\\pi=\\frac \\pi 2$$\n",
    "\n",
    "Comme l'argument de $\\frac \\pi 2$ est 0, cela explique la couleur rouge.\n",
    "\n",
    "En revanche, dans le demi-plan de gauche, $\\arctan z$ tend vers $-\\frac\\pi 2$, dont l'argument est $\\pi$, d'où la couleur cyan."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 7. Conclusion"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Sous le prétexte de dessiner quelques fonctions de la variable complexe, nous avons pu mettre en évidence quelques caractéristiques de ces fonctions. Holomorphie, racines et pôles, ordres de multiplicité, coupures, singularités essentielles. Ce n'est bien entendu pas la fin de l'histoire : il existe bien d'autres fonction \"usuelles\" que celle que nous avons introduites ici ..."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
