{ "cells": [ { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Douglas Rachford Proximal Splitting\n", "===================================\n", "\n", "$\\newcommand{\\dotp}[2]{\\langle #1, #2 \\rangle}$\n", "$\\newcommand{\\enscond}[2]{\\lbrace #1, #2 \\rbrace}$\n", "$\\newcommand{\\pd}[2]{ \\frac{ \\partial #1}{\\partial #2} }$\n", "$\\newcommand{\\umin}[1]{\\underset{#1}{\\min}\\;}$\n", "$\\newcommand{\\umax}[1]{\\underset{#1}{\\max}\\;}$\n", "$\\newcommand{\\umin}[1]{\\underset{#1}{\\min}\\;}$\n", "$\\newcommand{\\uargmin}[1]{\\underset{#1}{argmin}\\;}$\n", "$\\newcommand{\\norm}[1]{\\|#1\\|}$\n", "$\\newcommand{\\abs}[1]{\\left|#1\\right|}$\n", "$\\newcommand{\\choice}[1]{ \\left\\{ \\begin{array}{l} #1 \\end{array} \\right. }$\n", "$\\newcommand{\\pa}[1]{\\left(#1\\right)}$\n", "$\\newcommand{\\diag}[1]{{diag}\\left( #1 \\right)}$\n", "$\\newcommand{\\qandq}{\\quad\\text{and}\\quad}$\n", "$\\newcommand{\\qwhereq}{\\quad\\text{where}\\quad}$\n", "$\\newcommand{\\qifq}{ \\quad \\text{if} \\quad }$\n", "$\\newcommand{\\qarrq}{ \\quad \\Longrightarrow \\quad }$\n", "$\\newcommand{\\ZZ}{\\mathbb{Z}}$\n", "$\\newcommand{\\CC}{\\mathbb{C}}$\n", "$\\newcommand{\\RR}{\\mathbb{R}}$\n", "$\\newcommand{\\EE}{\\mathbb{E}}$\n", "$\\newcommand{\\Zz}{\\mathcal{Z}}$\n", "$\\newcommand{\\Ww}{\\mathcal{W}}$\n", "$\\newcommand{\\Vv}{\\mathcal{V}}$\n", "$\\newcommand{\\Nn}{\\mathcal{N}}$\n", "$\\newcommand{\\NN}{\\mathcal{N}}$\n", "$\\newcommand{\\Hh}{\\mathcal{H}}$\n", "$\\newcommand{\\Bb}{\\mathcal{B}}$\n", "$\\newcommand{\\Ee}{\\mathcal{E}}$\n", "$\\newcommand{\\Cc}{\\mathcal{C}}$\n", "$\\newcommand{\\Gg}{\\mathcal{G}}$\n", "$\\newcommand{\\Ss}{\\mathcal{S}}$\n", "$\\newcommand{\\Pp}{\\mathcal{P}}$\n", "$\\newcommand{\\Ff}{\\mathcal{F}}$\n", "$\\newcommand{\\Xx}{\\mathcal{X}}$\n", "$\\newcommand{\\Mm}{\\mathcal{M}}$\n", "$\\newcommand{\\Ii}{\\mathcal{I}}$\n", "$\\newcommand{\\Dd}{\\mathcal{D}}$\n", "$\\newcommand{\\Ll}{\\mathcal{L}}$\n", "$\\newcommand{\\Tt}{\\mathcal{T}}$\n", "$\\newcommand{\\si}{\\sigma}$\n", "$\\newcommand{\\al}{\\alpha}$\n", "$\\newcommand{\\la}{\\lambda}$\n", "$\\newcommand{\\ga}{\\gamma}$\n", "$\\newcommand{\\Ga}{\\Gamma}$\n", "$\\newcommand{\\La}{\\Lambda}$\n", "$\\newcommand{\\si}{\\sigma}$\n", "$\\newcommand{\\Si}{\\Sigma}$\n", "$\\newcommand{\\be}{\\beta}$\n", "$\\newcommand{\\de}{\\delta}$\n", "$\\newcommand{\\De}{\\Delta}$\n", "$\\newcommand{\\phi}{\\varphi}$\n", "$\\newcommand{\\th}{\\theta}$\n", "$\\newcommand{\\om}{\\omega}$\n", "$\\newcommand{\\Om}{\\Omega}$\n" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "This numerical tour presents the Douglas-Rachford (DR) algorithm to\n", "minimize the sum of two simple functions. It shows an\n", "application to\n", "reconstruction of exactly sparse signal from noiseless measurement using\n", "$\\ell^1$ minimization." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "using PyPlot" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Douglas-Rachford Algorithm\n", "--------------------------\n", "The Douglas-Rachford (DR) algorithm is an iterative scheme to minimize\n", "functionals of the form\n", "$$ \\umin{x} f(x) + g(x) $$\n", "where $f$ and $g$ are convex functions, of which one is able to\n", "compute the proximity operators.\n", "\n", "This algorithm was introduced in\n", "\n", "P. L. Lions and B. Mercier\n", "\"Splitting Algorithms for the Sum of Two Nonlinear Operators,\"\n", "_SIAM Journal on Numerical Analysis_\n", "vol. 16, no. 6, 1979,\n", "\n", "\n", "as a generalization of an algorithm introduced by Douglas and Rachford in\n", "the case of quadratic minimization (which corresponds to solving\n", "a positive definite linear system).\n", "\n", "\n", "To learn more about this algorithm, you can read:\n", "\n", "\n", "Patrick L. Combettes and Jean-Christophe Pesquet,\n", "\"Proximal Splitting Methods in Signal Processing,\"\n", "in: _Fixed-Point Algorithms for Inverse\n", "Problems in Science and Engineering_, New York: Springer-Verlag, 2010.\n", "\n", "\n", "\n", "The Douglas-Rachford algorithm takes an arbitrary element $s^{(0)}$, a parameter $\\ga>0$, a relaxation parameter $0<\\rho<2$ and iterates, for $k=1,2,\\ldots$\n", "$$\n", "\\left|\\begin{array}{l}\n", "x^{(k)} = \\mathrm{prox}_{\\gamma f} (s^{(k-1)} )\\\\\n", "s^{(k)} = s^{(k-1)}+\\rho\\big(\\text{prox}_{\\ga g}( 2x^{(k)}-s^{(k-1)})-x^{(k)}\\big).\n", "\\end{array}\\right.\n", "$$\n", "\n", "It is of course possible to inter-change the roles of $f$ and $g$,\n", "which defines a different algorithm.\n", "\n", "The iterates $x^{(k)}$ converge to a solution $x^\\star$ of the problem, i.e. a minimizer of $f+g$.\n", "\n", "Compressed Sensing Acquisition\n", "------------------------------\n", "Compressed sensing acquisition corresponds to a random projection\n", "$y=Ax^\\sharp$ of a signal $x^\\sharp$ on a\n", "few linear vectors (the rows of the matrix $A$). For the recovery of $x^\\sharp$ to be possible, this vector is supposed\n", "to be sparse in some basis. Here, we suppose $x^\\sharp$ itself is sparse." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "We initialize the random number generator for reproducibility." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "srand(0);" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Dimension of the problem." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "N = 400;" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Number of measurements." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "P = Int(round(N/4));" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "We create a random Gaussian measurement matrix $A$." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "A = randn(P, N) ./ sqrt(P);" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Sparsity of the signal." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "S = 17;" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "We begin by generating a $S$-sparse signal $x^\\sharp$ with $S$ randomized values.\n", "Since the measurement matrix is random, one does not care about the sign\n", "of the nonzero elements, so we set values equal to one." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "sel = randperm(N)\n", "sel = sel[1 : S] # indices of the nonzero elements of xsharp\n", "xsharp = zeros(N)\n", "xsharp[sel] = 1;" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "We perform random measurements $y=Ax^\\sharp$ without noise." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "y = A*xsharp;" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Compressed Sensing Recovery with the Douglas-Rachford algorithm\n", "------------------------------------\n", "Compressed sensing recovery corresponds\n", "to solving the inverse problem $y=A x^\\sharp$, which is ill posed because\n", "$x^\\sharp$ is\n", "higher dimensional than $y$.\n", "\n", "\n", "The reconstruction can be performed by $\\ell^1$ minimization,\n", "which regularizes the problem by exploiting the prior knowledge that the solution is sparse.\n", "$$ x^\\star \\in \\arg\\min_x \\norm{x}_1 \\quad\\mbox{s.t.}\\quad Ax=y$$\n", "where the $\\ell^1$ norm is defined as\n", "$$ \\norm{x}_1 = \\sum_{n=1}^N \\abs{x_n}. $$\n", "\n", "\n", "This is the minimization of a non-smooth function under affine\n", "constraints. This can be shown to be equivalent to a linear programming\n", "problem, for wich various algorithms can be used (simplex, interior\n", "points). We propose here to use the Douglas-Rachford algorithm.\n", "\n", "\n", "It is possible to recast this problem as the minimization of $f+g$\n", "where $g(x) = \\norm{x}_1$ and $f(x)=\\iota_{\\Omega}$ where $\\Omega =\n", "\\enscond{x}{Ax=y}$ is an affine space, and $\\iota_\\Omega$ is the indicator\n", "function\n", "$$ \\iota_\\Omega(x) = \\choice{ 0 \\qifq x \\in \\Omega, \\\\ +\\infty \\qifq x \\notin \\Omega. } $$\n", "\n", "\n", "The proximal operator of the $\\ell^1$ norm is soft thresholding:\n", "$$ \\text{prox}_{\\gamma \\norm{\\cdot}_1}(x)_n = \\max\\pa{ 0, 1-\\frac{\\ga}{\\abs{x_n}} } x_n. $$" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "prox_gamma_g = (x, gamma) -> x - x./max(abs(x)./gamma, 1);" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Display the 1-D curve of the thresholding." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjIAAAGgCAYAAACwio2MAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAIABJREFUeJzt3Xt4VPWB//HPJCETvGSy3BJSIogXbqIol9lQVqmMhcVb1T6AsnJZhEWFKqGUpF2h7HafiGUVCyhVC9iKQmkBrdooclmEjSABqoWACioRmCDNZgKKATLf3x/+mDrmwkwyZ2bOzPv1POd5OiffM/P9egjz7syZwWGMMQIAALChlFhPAAAAoLkIGQAAYFuEDAAAsC1CBgAA2BYhAwAAbIuQAQAAtkXIAAAA2yJkAACAbREyAADAtggZAABgW4QMAACwrbRYTyDS/H6/jhw5oosvvlgOhyPW0wEAACEwxujEiRPKzc1VSkoYr7OYKFi4cKHp3LmzcTqdZsCAAWbbtm1Njn/hhRfM1VdfbVq3bm1ycnLM+PHjzfHjx0N6rIqKCiOJjY2NjY2NzYZbRUVFWI3hMMbaf/165cqVGjNmjBYvXiy326358+dr1apV2r9/vzp06FBv/NatW3X99dfriSee0K233qrDhw9r8uTJuvLKK7V69erzPp7P51NWVpYqKiqUmZlpxZIAAECE1dTUKC8vT9XV1XK5XCEfZ3nIuN1u9e/fXwsXLpT09Vs/eXl5mjp1qgoLC+uNnzdvnp5++mkdOHAgsG/BggWaO3euPvvss/M+Xk1NjVwul3w+HyEDAIBNNPf529KLfU+fPq2ysjJ5PJ6/P2BKijwej0pLSxs8Jj8/XxUVFXr99ddljFFlZaVWrVql4cOHNzi+trZWNTU1QRsAAEgOlobM8ePHVVdXp+zs7KD92dnZ8nq9DR7z3e9+V8uXL9fIkSOVnp6unJwcZWVladGiRQ2OLy4ulsvlCmx5eXkRXwcAAIhPcffx67179+qhhx7SrFmzVFZWppKSEn3yySeaPHlyg+OLiork8/kCW0VFRZRnDAAAYsXSj1+3a9dOqampqqysDNpfWVmpnJycBo8pLi7WwIEDNWPGDEnS1VdfrQsvvFD/9E//pF/84hfq2LFj0Hin0ymn02nNAgAAQFyz9BWZ9PR09e3bV+vXrw/s8/v9Wr9+vfLz8xs85ssvv1RaWnBfpaamSpIsvi4ZAADYjOVvLRUUFOjZZ5/V888/r/Lyct1///364osvNH78eElfvzU0ZsyYwPhbb71Vf/zjH/X000/r4MGD2rp1q370ox9pwIABys3NtXq6AADARiz/Zt+RI0fq888/16xZs+T1etWnTx+VlJQELgA+evSoDh06FBg/btw4nThxQgsXLtT06dOVlZWlG2+8UXPnzrV6qgAAwGYs/x6ZaON7ZAAAsJ+4/B4ZAAAAKxEyAADAtggZAABgW4QMAACwLUIGAADYFiEDAABsi5ABAAC2RcgAAADbImQAAIBtETIAAMC2CBkAAGBbhAwAALAtQgYAANgWIQMAAGyLkAEAACFbsf2QNn/weaynEUDIAACAkLy0/ZAKV7+v+367Qx8dOxHr6UgiZAAAQAhe2n5IRavflyT9i7uzLmt/UYxn9DVCBgAANOmbEfOv371Uj9zSQw6HI8az+hohAwAAGhXPESMRMgAAoBHxHjESIQMAABpgh4iRCBkAAPAtdokYiZABAADfYKeIkQgZAADw/9ktYiRCBgAAyJ4RIxEyAAAkPbtGjETIAACQ1OwcMRIhAwBA0rJ7xEiEDAAASSkRIkYiZAAASDqJEjESIQMAQFJJpIiRCBkAAJJGokWMRMgAAJAUEjFiJEIGAICEl6gRIxEyAAAktESOGClKIbNo0SJ16dJFGRkZcrvd2r59e5Pja2tr9bOf/UydO3eW0+lUly5dtGTJkmhMFQCAhJHoESNJaVY/wMqVK1VQUKDFixfL7XZr/vz5Gjp0qPbv368OHTo0eMyIESNUWVmp3/zmN7r88st19OhR+f1+q6cKAEDCSIaIkSSHMcZY+QBut1v9+/fXwoULJUl+v195eXmaOnWqCgsL640vKSnRqFGjdPDgQbVp0+a8919bW6va2trA7ZqaGuXl5cnn8ykzMzNyCwEAwCbsGDE1NTVyuVxhP39b+tbS6dOnVVZWJo/H8/cHTEmRx+NRaWlpg8e88sor6tevnx577DF95zvf0ZVXXqkf//jHOnXqVIPji4uL5XK5AlteXp4lawEAwA7sGDEtYWnIHD9+XHV1dcrOzg7an52dLa/X2+AxBw8e1JYtW/TXv/5Va9as0fz58/WHP/xBDzzwQIPji4qK5PP5AltFRUXE1wEAgB0kW8RIUbhGJlx+v18Oh0PLly+Xy+WSJD3++OP64Q9/qKeeekqtW7cOGu90OuV0OmMxVQAA4kYyRoxk8Ssy7dq1U2pqqiorK4P2V1ZWKicnp8FjOnbsqO985zuBiJGkHj16yBijzz77zMrpAgBgS8kaMZLFIZOenq6+fftq/fr1gX1+v1/r169Xfn5+g8d897vf1ZEjR3Ty5MnAvg8++EApKSnq1KmTldMFAMB2kjlipCh8j0xBQYGeffZZPf/88yovL9f999+vL774QuPHj5f09TUuY8aMCYy/55571LZtW40fP1579+7V5s2bNWPGDP3rv/5rvbeVAABIZskeMVIUrpEZOXKkPv/8c82aNUter1d9+vRRSUlJ4ALgo0eP6tChQ4HxF110kdatW6epU6eqX79+atu2rUaMGKFf/OIXVk8VAADbIGK+Zvn3yERbcz+HDgCAXSRixMTl98gAAIDISsSIaQlCBgAAmyBi6iNkAACwASKmYYQMAABxjohpHCEDAEAcI2KaRsgAABCniJjzI2QAAIhDRExoCBkAAOIMERM6QgYAgDhCxISHkAEAIE4QMeEjZAAAiANETPMQMgAAxBgR03yEDAAAMUTEtAwhAwBAjBAxLUfIAAAQA0RMZBAyAABEGRETOYQMAABRRMREFiEDAECUEDGRR8gAABAFRIw1CBkAACxGxFiHkAEAwEJEjLUIGQAALELEWI+QAQDAAkRMdBAyAABEGBETPYQMAAARRMREFyEDAECEEDHRR8gAABABRExsEDIAALQQERM7hAwAAC1AxMQWIQMAQDMRMbFHyAAA0AxETHwgZAAACBMREz8IGQAAwkDExBdCBgCAEBEx8ScqIbNo0SJ16dJFGRkZcrvd2r59e0jHbd26VWlpaerTp4/FMwQAoGlETHyyPGRWrlypgoICzZ49Wzt37tQ111yjoUOH6tixY00eV11drTFjxmjIkCFWTxEAgCYRMfHLYYwxVj6A2+1W//79tXDhQkmS3+9XXl6epk6dqsLCwkaPGzVqlK644gqlpqZq7dq12r17d4PjamtrVVtbG7hdU1OjvLw8+Xw+ZWZmRnYxAICkQ8RER01NjVwuV9jP35a+InP69GmVlZXJ4/H8/QFTUuTxeFRaWtrocUuXLtXBgwc1e/bs8z5GcXGxXC5XYMvLy4vI3AEAIGLin6Uhc/z4cdXV1Sk7Oztof3Z2trxeb4PHfPjhhyosLNQLL7ygtLS08z5GUVGRfD5fYKuoqIjI3AEAyY2IsYfzl0IU1dXV6Z577tGcOXN05ZVXhnSM0+mU0+m0eGYAgGRCxNiHpSHTrl07paamqrKyMmh/ZWWlcnJy6o0/ceKEduzYoV27dmnKlCmSvr6mxhijtLQ0vfnmm7rxxhutnDIAIMkRMfZi6VtL6enp6tu3r9avXx/Y5/f7tX79euXn59cbn5mZqffff1+7d+8ObJMnT1a3bt20e/duud1uK6cLAEhyRIz9WP7WUkFBgcaOHat+/fppwIABmj9/vr744guNHz9e0tfXuBw+fFi//e1vlZKSoquuuiro+A4dOigjI6PefgAAIomIsSfLQ2bkyJH6/PPPNWvWLHm9XvXp00clJSWBC4CPHj2qQ4cOWT0NAAAaRcTYl+XfIxNtzf0cOgAgOREx8SEuv0cGAIB4RsTYHyEDAEhKRExiIGQAAEmHiEkchAwAIKkQMYmFkAEAJA0iJvEQMgCApEDEJCZCBgCQ8IiYxEXIAAASGhGT2AgZAEDCImISHyEDAEhIRExyIGQAAAmHiEkehAwAIKEQMcmFkAEAJAwiJvkQMgCAhEDEJCdCBgBge0RM8iJkAAC2RsQkN0IGAGBbRAwIGQCALRExkAgZAIANETE4h5ABANgKEYNvImQAALZBxODbCBkAgC0QMWgIIQMAiHtEDBpDyAAA4hoRg6YQMgCAuEXE4HwIGQBAXCJiEApCBgAQd4gYhIqQAQDEFSIG4SBkAABxg4hBuAgZAEBcIGLQHIQMACDmiBg0FyEDAIgpIgYtQcgAAGKGiEFLETIAgJggYhAJUQmZRYsWqUuXLsrIyJDb7db27dsbHbt69WrddNNNat++vTIzM5Wfn6833ngjGtMEAEQJEYNIsTxkVq5cqYKCAs2ePVs7d+7UNddco6FDh+rYsWMNjt+8ebNuuukmvf766yorK9P3vvc93Xrrrdq1a5fVUwUARAERg0hyGGOMlQ/gdrvVv39/LVy4UJLk9/uVl5enqVOnqrCwMKT76NWrl0aOHKlZs2bV+1ltba1qa2sDt2tqapSXlyefz6fMzMzILAIAEBFEDBpTU1Mjl8sV9vO3pa/InD59WmVlZfJ4PH9/wJQUeTwelZaWhnQffr9fJ06cUJs2bRr8eXFxsVwuV2DLy8uLyNwBAJFFxMAKlobM8ePHVVdXp+zs7KD92dnZ8nq9Id3HvHnzdPLkSY0YMaLBnxcVFcnn8wW2ioqKFs8bABBZRAyskhbrCTTlxRdf1Jw5c/Tyyy+rQ4cODY5xOp1yOp1RnhkAIFREDKxkaci0a9dOqampqqysDNpfWVmpnJycJo9dsWKF7rvvPq1atSrorSkAgH0QMbCapW8tpaenq2/fvlq/fn1gn9/v1/r165Wfn9/ocS+99JLGjx+vl156STfffLOVUwQAWISIQTRY/tZSQUGBxo4dq379+mnAgAGaP3++vvjiC40fP17S19e4HD58WL/97W8lff120tixY/Xkk0/K7XYHrqVp3bq1XC6X1dMFAEQAEYNosTxkRo4cqc8//1yzZs2S1+tVnz59VFJSErgA+OjRozp06FBg/DPPPKOzZ8/qwQcf1IMPPhjYP3bsWC1btszq6QIAWoiIQTRZ/j0y0dbcz6EDAFqOiEFzxeX3yAAAkgcRg1ggZAAALUbEIFYIGQBAixAxiCVCBgDQbEQMYo2QAQA0CxGDeEDIAADCRsQgXhAyAICwEDGIJ4QMACBkRAziDSEDAAgJEYN4RMgAAM6LiEG8ImQAAE0iYhDPCBkAQKOIGMQ7QgYA0CAiBnZAyAAA6iFiYBeEDAAgCBEDOyFkAAABRAzshpABAEgiYmBPhAwAgIiBbREyAJDkiBjYGSEDAEmMiIHdETIAkKSIGCQCQgYAkhARg0RByABAkiFikEgIGQBIIkQMEg0hAwBJgohBIiJkACAJEDFIVIQMACQ4IgaJjJABgARGxCDRETIAkKCIGCQDQgYAEhARg2RByABAgiFikEwIGQBIIEQMkg0hAwAJgohBMiJkACABEDFIVlEJmUWLFqlLly7KyMiQ2+3W9u3bmxy/adMmXXfddXI6nbr88su1bNmyaEwTAGyJiEEyszxkVq5cqYKCAs2ePVs7d+7UNddco6FDh+rYsWMNjv/44491880363vf+552796thx9+WPfdd5/eeOMNq6cKALZDxCDZOYwxxsoHcLvd6t+/vxYuXChJ8vv9ysvL09SpU1VYWFhv/MyZM/Xaa6/pr3/9a2DfqFGjVF1drZKSknrja2trVVtbG7hdU1OjvLw8+Xw+ZWZmWrAiIHrO1vn14vZD+vj4F7GeCuLQya/OalXZZ5KIGNhfTU2NXC5X2M/faRbOSadPn1ZZWZmKiooC+1JSUuTxeFRaWtrgMaWlpfJ4PEH7hg4dqocffrjB8cXFxZozZ07kJg3EibN1fhX8/i965S9HYj0VxDkiBsnM0pA5fvy46urqlJ2dHbQ/Oztb+/bta/AYr9fb4PiamhqdOnVKrVu3DvpZUVGRCgoKArfPvSID2Nk3IyYtxaEx+V3UOp1r81HfldkX67ZrcokYJC1LQyYanE6nnE5nrKcBRMy3I+ap0dfp+71yYj0tAIhLlv5fvHbt2ik1NVWVlZVB+ysrK5WT0/BfzDk5OQ2Oz8zMrPdqDJBoiBgACI+lIZOenq6+fftq/fr1gX1+v1/r169Xfn5+g8fk5+cHjZekdevWNToeSBREDACEz/I33QsKCvTss8/q+eefV3l5ue6//3598cUXGj9+vKSvr3EZM2ZMYPzkyZN18OBB/eQnP9G+ffv01FNP6fe//72mTZtm9VSBmCFiAKB5LL9GZuTIkfr88881a9Yseb1e9enTRyUlJYELeo8ePapDhw4Fxl966aV67bXXNG3aND355JPq1KmTnnvuOQ0dOtTqqQIxQcQAQPNZ/j0y0dbcz6EDsUDEAMDXmvv8zec5gRghYgCg5QgZIAaIGACIDEIGiDIiBgAih5ABooiIAYDIImSAKCFiACDyCBkgCogYALAGIQNYjIgBAOsQMoCFiBgAsBYhA1iEiAEA6xEygAWIGACIDkIGiDAiBgCih5ABIoiIAYDoImSACCFiACD6CBkgAogYAIgNQgZoISIGAGKHkAFagIgBgNgiZIBmImIAIPYIGaAZiBgAiA+EDBAmIgYA4gchA4SBiAGA+ELIACEiYgAg/hAyQAiIGACIT4QMcB5EDADEL0IGaAIRAwDxjZABGkHEAED8I2SABhAxAGAPhAzwLUQMANgHIQN8AxEDAPZCyAD/HxEDAPZDyAAiYgDArggZJD0iBgDsi5BBUiNiAMDeCBkkLSIGAOyPkEFSImIAIDFYFjJVVVUaPXq0MjMzlZWVpQkTJujkyZONjj9z5oxmzpyp3r1768ILL1Rubq7GjBmjI0eOWDVFJCkiBgASh2UhM3r0aO3Zs0fr1q3Tq6++qs2bN2vSpEmNjv/yyy+1c+dOPfLII9q5c6dWr16t/fv367bbbrNqikhCRAwAJBaHMcZE+k7Ly8vVs2dPvfvuu+rXr58kqaSkRMOHD9dnn32m3NzckO7n3Xff1YABA/Tpp5/qkksuCemYmpoauVwu+Xw+ZWZmNnsNSDxEDADEr+Y+f1vyikxpaamysrICESNJHo9HKSkp2rZtW8j34/P55HA4lJWV1eiY2tpa1dTUBG3AtxExAJCYLAkZr9erDh06BO1LS0tTmzZt5PV6Q7qPr776SjNnztTdd9/dZJkVFxfL5XIFtry8vBbNHYmHiAGAxBVWyBQWFsrhcDS57du3r8WTOnPmjEaMGCFjjJ5++ukmxxYVFcnn8wW2ioqKFj8+EgcRAwCJLS2cwdOnT9e4ceOaHNO1a1fl5OTo2LFjQfvPnj2rqqoq5eQ0/SRyLmI+/fRTbdiw4bzvkzmdTjmdzpDmj+RCxABA4gsrZNq3b6/27dufd1x+fr6qq6tVVlamvn37SpI2bNggv98vt9vd6HHnIubDDz/Uxo0b1bZt23CmBwQQMQCQHCy5RqZHjx4aNmyYJk6cqO3bt2vr1q2aMmWKRo0aFfSJpe7du2vNmjWSvo6YH/7wh9qxY4eWL1+uuro6eb1eeb1enT592oppIkERMQCQPMJ6RSYcy5cv15QpUzRkyBClpKTorrvu0q9+9augMfv375fP55MkHT58WK+88ookqU+fPkHjNm7cqMGDB1s1VSQQIgYAkosl3yMTS3yPTPIiYgDAvuLqe2SAaCNiACA5ETKwPSIGAJIXIQNbI2IAILkRMrAtIgYAQMjAlogYAIBEyMCGiBgAwDmEDGyFiAEAfBMhA9sgYgAA30bIwBaIGABAQwgZxD0iBgDQGEIGcY2IAQA0hZBB3CJiAADnQ8ggLhExAIBQEDKIO0QMACBUhAziChEDAAgHIYO4QcQAAMJFyCAuEDEAgOYgZBBzRAwAoLkIGcQUEQMAaAlCBjFDxAAAWoqQQUwQMQCASCBkEHVEDAAgUggZRBURAwCIJEIGUUPEAAAijZBBVBAxAAArEDKwHBEDALAKIQNLETEAACsRMrAMEQMAsBohA0sQMQCAaCBkEHFEDAAgWggZRBQRAwCIJkIGEUPEAACijZBBRBAxAIBYIGTQYkQMACBWLAuZqqoqjR49WpmZmcrKytKECRN08uTJkI+fPHmyHA6H5s+fb9UUEQFEDAAgliwLmdGjR2vPnj1at26dXn31VW3evFmTJk0K6dg1a9bonXfeUW5urlXTQwQQMQCAWLMkZMrLy1VSUqLnnntObrdbgwYN0oIFC7RixQodOXKkyWMPHz6sqVOnavny5WrVqpUV00MEEDEAgHhgSciUlpYqKytL/fr1C+zzeDxKSUnRtm3bGj3O7/fr3nvv1YwZM9SrV6+QHqu2tlY1NTVBG6xFxAAA4oUlIeP1etWhQ4egfWlpaWrTpo28Xm+jx82dO1dpaWn60Y9+FPJjFRcXy+VyBba8vLxmzxvnR8QAAOJJWCFTWFgoh8PR5LZv375mTaSsrExPPvmkli1bJofDEfJxRUVF8vl8ga2ioqJZj4/zI2IAAPEmLZzB06dP17hx45oc07VrV+Xk5OjYsWNB+8+ePauqqirl5DT8xPf222/r2LFjuuSSSwL76urqNH36dM2fP1+ffPJJg8c5nU45nc5wloFmIGIAAPEorJBp37692rdvf95x+fn5qq6uVllZmfr27StJ2rBhg/x+v9xud4PH3HvvvfJ4PEH7hg4dqnvvvVfjx48PZ5qIMCIGABCvwgqZUPXo0UPDhg3TxIkTtXjxYp05c0ZTpkzRqFGjgj5S3b17dxUXF+uOO+5Q27Zt1bZt26D7adWqlXJyctStWzcrpokQEDEAgHhm2ffILF++XN27d9eQIUM0fPhwDRo0SM8880zQmP3798vn81k1BbQQEQMAiHcOY4yJ9SQiqaamRi6XSz6fT5mZmbGejm0RMQCAaGru8zf/1hLqIWIAAHZByCAIEQMAsBNCBgFEDADAbggZSCJiAAD2RMiAiAEA2BYhk+SIGACAnREySYyIAQDYHSGTpIgYAEAiIGSSEBEDAEgUhEySIWIAAImEkEkiRAwAINEQMkmCiAEAJCJCJgkQMQCAREXIJDgiBgCQyAiZBEbEAAASHSGToIgYAEAyIGQSEBEDAEgWhEyCIWIAAMmEkEkgRAwAINkQMgmCiAEAJCNCJgEQMQCAZEXI2BwRAwBIZoSMjRExAIBkR8jYFBEDAAAhY0tEDAAAXyNkbIaIAQDg7wgZGyFiAAAIRsjYBBEDAEB9hIwNEDEAADSMkIlzRAwAAI0jZOIYEQMAQNMImThFxAAAcH6ETBwiYgAACA0hE2eIGAAAQmdZyFRVVWn06NHKzMxUVlaWJkyYoJMnT573uPLyct12221yuVy68MIL1b9/fx06dMiqacYVIgYAgPBYFjKjR4/Wnj17tG7dOr366qvavHmzJk2a1OQxBw4c0KBBg9S9e3dt2rRJ7733nh555BFlZGRYNc24QcQAABA+hzHGRPpOy8vL1bNnT7377rvq16+fJKmkpETDhw/XZ599ptzc3AaPGzVqlFq1aqXf/e53zX7smpoauVwu+Xw+ZWZmNvt+oomIAQAku+Y+f1vyikxpaamysrICESNJHo9HKSkp2rZtW4PH+P1+vfbaa7ryyis1dOhQdejQQW63W2vXrm3ysWpra1VTUxO02QkRAwBA81kSMl6vVx06dAjal5aWpjZt2sjr9TZ4zLFjx3Ty5Ek9+uijGjZsmN58803dcccduvPOO/U///M/jT5WcXGxXC5XYMvLy4voWqxExAAA0DJhhUxhYaEcDkeT2759+5o1Eb/fL0m6/fbbNW3aNPXp00eFhYW65ZZbtHjx4kaPKyoqks/nC2wVFRXNevxoI2IAAGi5tHAGT58+XePGjWtyTNeuXZWTk6Njx44F7T979qyqqqqUk9Pwk3W7du2Ulpamnj17Bu3v0aOHtmzZ0ujjOZ1OOZ3O0BYQJ4gYAAAiI6yQad++vdq3b3/ecfn5+aqurlZZWZn69u0rSdqwYYP8fr/cbneDx6Snp6t///7av39/0P4PPvhAnTt3DmeacY2IAQAgciy5RqZHjx4aNmyYJk6cqO3bt2vr1q2aMmWKRo0aFfSJpe7du2vNmjWB2zNmzNDKlSv17LPP6qOPPtLChQv1pz/9SQ888IAV04w6IgYAgMiy7Htkli9fru7du2vIkCEaPny4Bg0apGeeeSZozP79++Xz+QK377jjDi1evFiPPfaYevfureeee05//OMfNWjQIKumGTVEDAAAkWfJ98jEUjx+jwwRAwBA0+Lqe2Twd0QMAADWIWQsRMQAAGAtQsYiRAwAANYjZCxAxAAAEB2ETIQRMQAARA8hE0FEDAAA0UXIRAgRAwBA9BEyEUDEAAAQG4RMCxExAADEDiHTAkQMAACxRcg0ExEDAEDsETLNQMQAABAfCJkwETEAAMQPQiYMRAwAAPGFkAkREQMAQPwhZEJUfvSESv7qJWIAAIgjabGegF307uTSr8f01emzfiIGAIA4QciE4XvdOsR6CgAA4Bt4awkAANgWIQMAAGyLkAEAALZFyAAAANsiZAAAgG0RMgAAwLYIGQAAYFuEDAAAsC1CBgAA2BYhAwAAbIuQAQAAtkXIAAAA2yJkAACAbREyAADAtggZAABgW4QMAACwLctCpqqqSqNHj1ZmZqaysrI0YcIEnTx5ssljTp48qSlTpqhTp05q3bq1evbsqcWLF1s1RQAAYHOWhczo0aO1Z88erVu3Tq+++qo2b96sSZMmNXlMQUGBSkpK9MILL6i8vFzTpk3TlClT9Morr1g1TQAAYGOWhEx5eblKSkr03HPPye12a9CgQVqwYIFWrFihI0eONHrc//7v/2rs2LEaPHiwunTpookTJ+qaa67R9u3brZgmAACwOUtCprS0VFlZWerXr1/D1dy9AAAPE0lEQVRgn8fjUUpKirZt29bocQMHDtQrr7yiw4cPyxijjRs36oMPPtD3v//9Ro+pra1VTU1N0AYAAJKDJSHj9XrVoUOHoH1paWlq06aNvF5vo8ctWLBAPXv2VKdOnZSenq5hw4Zp0aJFuv766xs9pri4WC6XK7Dl5eVFbB0AACC+hRUyhYWFcjgcTW779u1r9mQWLFigd955R6+88orKysr03//933rwwQf11ltvNXpMUVGRfD5fYKuoqGj24wMAAHtJC2fw9OnTNW7cuCbHdO3aVTk5OTp27FjQ/rNnz6qqqko5OTkNHnfq1Cn99Kc/1erVq3XLLbdIkq6++mrt3r1b8+bNk8fjafA4p9Mpp9MZzjIAAECCCCtk2rdvr/bt2593XH5+vqqrq1VWVqa+fftKkjZs2CC/3y+3293gMWfOnNGZM2eUlhY8pdTUVPn9/pDnaIyRJK6VAQDARs49b597Hg+ZsciwYcPMtddea7Zt22a2bNlirrjiCnP33XcHjenWrZtZvXp14PYNN9xgevXqZTZu3GgOHjxoli5dajIyMsxTTz0V8uNWVFQYSWxsbGxsbGw23CoqKsLqDYcx4aZPaKqqqjRlyhT96U9/UkpKiu666y796le/0kUXXRQY43A4tHTp0sDbVV6vV0VFRXrzzTdVVVWlzp07a9KkSZo2bZocDkdIj+v3+3XkyBFdfPHFIR8TqpqaGuXl5amiokKZmZkRve94kOjrkxJ/jazP/hJ9jYm+Pinx12jV+owxOnHihHJzc5WSEvolvJaFTCKqqamRy+WSz+dL2D+cibw+KfHXyPrsL9HXmOjrkxJ/jfG2Pv6tJQAAYFuEDAAAsK3Un//85z+P9STsJDU1VYMHD6736apEkejrkxJ/jazP/hJ9jYm+Pinx1xhP6+MaGQAAYFu8tQQAAGyLkAEAALZFyAAAANsiZAAAgG0RMgAAwLYImW/4r//6Lw0cOFAXXHCBsrKyQjrGGKNZs2apY8eOat26tTwejz788MOgMV999ZUefPBBtW3bVhdddJHuuusuVVZWWrGE86qqqtLo0aOVmZmprKwsTZgwQSdPnmzyGIfD0eD2y1/+MjBm8ODB9X4+efJkq5dTT3PWN27cuHpzHzZsWNCYeDmH4a7vzJkzmjlzpnr37q0LL7xQubm5GjNmjI4cORI0Lpbnb9GiRerSpYsyMjLkdru1ffv2Jsdv2rRJ1113nZxOpy6//HItW7as3phVq1ape/fuysjIUO/evfX6669bNPvzC2d9q1ev1k033aT27dsrMzNT+fn5euONN4LGLFu2rN65ysjIsHoZTQpnjZs2bWrw7xOv1xs0zq7nsKG/TxwOh3r16hUYE0/ncPPmzbr11luVm5srh8OhtWvXnveYuPsdDOtfZkpws2bNMo8//rgpKCgwLpcrpGMeffRR43K5zNq1a81f/vIXc9ttt5lLL73UnDp1KjBm8uTJJi8vz6xfv97s2LHD/OM//qMZOHCgVcto0rBhw8w111xj3nnnHfP222+byy+/vN4/5vltR48eDdqWLFliHA6HOXDgQGDMDTfcYCZOnBg0zufzWb2cepqzvrFjx5phw4YFzb2qqipoTLycw3DXV11dbTwej1m5cqXZt2+fKS0tNQMGDDB9+/YNGher87dixQqTnp5ulixZYvbs2WMmTpxosrKyTGVlZYPjDx48aC644AJTUFBg9u7daxYsWGBSU1NNSUlJYMzWrVtNamqqeeyxx8zevXvNv//7v5tWrVqZ999/3/L1fFu463vooYfM3Llzzfbt280HH3xgioqKTKtWrczOnTsDY5YuXWoyMzODzpXX643WkuoJd40bN240ksz+/fuD1lBXVxcYY+dzWF1dHbSuiooK06ZNGzN79uzAmHg6h6+//rr52c9+ZlavXm0kmTVr1jQ5Ph5/BwmZBixdujSkkPH7/SYnJ8f88pe/DOyrrq42TqfTvPTSS4HbrVq1MqtWrQqMKS8vN5JMaWlp5CffhL179xpJ5t133w3s+/Of/2wcDoc5fPhwyPdz++23mxtvvDFo3w033GAeeuihiM21OZq7vrFjx5rbb7+90Z/HyzmM1Pnbvn27kWQ+/fTTwL5Ynb8BAwaYBx98MHC7rq7O5ObmmuLi4gbH/+QnPzG9evUK2jdy5EgzdOjQwO0RI0aYm2++OWiM2+02//Zv/xbBmYcm3PU1pGfPnmbOnDmB26H+/RQt4a7xXMj83//9X6P3mUjncM2aNcbhcJhPPvkksC/ezuE5oYRMPP4O8tZSC3z88cfyer3yeDyBfS6XS263W6WlpZKksrIynTlzJmhM9+7ddckllwTGREtpaamysrLUr1+/wD6Px6OUlBRt27YtpPuorKzUa6+9pgkTJtT72fLly9WuXTtdddVVKioq0pdffhmxuYeiJevbtGmTOnTooG7duun+++/X3/72t8DP4uUcRuL8SZLP55PD4aj39mm0z9/p06dVVlYW9N81JSVFHo+n0f+upaWlQeMlaejQoUHjQxkTDc1Z37f5/X6dOHFCbdq0Cdp/8uRJde7cWXl5ebr99tu1Z8+eiM49VC1ZY58+fdSxY0fddNNN2rp1a9DPEukc/uY3v5HH41Hnzp2D9sfLOQxXPP4Oxv67hW3s3Hu62dnZQfuzs7MDP/N6vUpPT6/3pPHNMdHi9XrVoUOHoH1paWlq06ZNyHN5/vnndfHFF+vOO+8M2n/PPfeoc+fOys3N1XvvvaeZM2dq//79Wr16dcTmfz7NXd+wYcN055136tJLL9WBAwf005/+VP/8z/+s0tJSpaamxs05jMT5++qrrzRz5kzdfffdQf9qbSzO3/Hjx1VXV9fg78++ffsaPMbr9TY4vqamRqdOnVLr1q0bHRPt37fmrO/b5s2bp5MnT2rEiBGBfd26ddOSJUt09dVXy+fzad68eRo4cKD27NmjTp06RXQN59OcNXbs2FGLFy9Wv379VFtbq+eee06DBw/Wtm3bdN1110lq/Dzb7RweOXJEf/7zn/Xiiy8G7Y+ncxiuePwdTPiQKSws1Ny5c5scU15eru7du0dpRpEX6hojYcmSJRo9enS9C9MmTZoU+N+9e/dWbm6ubrzxRh04cECXXXZZix7T6vWNGjUq8L979+6tq6++Wpdddpk2bdqkIUOGNPt+QxWt83fmzBmNGDFCxhg9/fTTQT+z8vyheV588UXNmTNHL7/8clDA5ufnKz8/P3B74MCB6tGjh37961/rP//zP2Mx1bB069ZN3bp1C9weOHCgDhw4oCeeeEK/+93vYjizyHv++eeVlZWlH/zgB0H77X4O403Ch8z06dM1bty4Jsd07dq1Wfedk5Mj6eu3Wzp27BjYX1lZqT59+gTGnD59WtXV1UH/j76ysjJwfEuFusacnBwdO3YsaP/Zs2dVVVUV0lzefvtt7d+/XytXrjzv2AEDBkiSPvrooxY/EUZrfd+8r3bt2umjjz7SkCFDLD+H0VjfuYj59NNPtWHDhqBXYxoSyfPXmHbt2ik1NbXep7+a+u+ak5PT4PjMzEy1bt26yTGR+n0LVXPWd86KFSt03333adWqVfVeov+2Vq1a6dprr9VHH33U4jmHqyVr/KYBAwZoy5YtgduJcA6NMVqyZInuvfdepaenNzk2lucwXHH5O2jJlTc2F+7FvvPmzQvs8/l8DV7s+4c//CEwZt++fTG92HfHjh2BfW+88UbIF4uOHTu23qddGrNlyxYjyfzlL39p9nzD1dL1nVNRUWEcDod5+eWXjTHxcw6bu77Tp0+bH/zgB6ZXr17m2LFjIT1WtM7fgAEDzJQpUwK36+rqzHe+850mL/a96qqrgvbdfffd9S40vOWWW4LG5Ofnx+xC0XDWZ4wxL774osnIyDBr164N6THOnj1runXrZqZNm9bi+TZHc9b4bR6Px9xxxx2B23Y/h8b8/aLmUD6pE+tzeI5CvNg33n4HCZlv+PTTT82uXbvMnDlzzEUXXWR27dpldu3aZU6cOBEY061bN7N69erA7UcffdRkZWWZl19+2bz33nvm9ttvb/Dj15dcconZsGGD2bFjh8nPzzf5+flRXds5w4YNM9dee63Ztm2b2bJli7niiivqfXz322s05utAu+CCC8zTTz9d7z4/+ugj8x//8R9mx44d5uOPPzYvv/yy6dq1q7n++ustXUtDwl3fiRMnzI9//GNTWlpqPv74Y/PWW2+Z6667zlxxxRXmq6++ChwTL+cw3PWdPn3a3HbbbaZTp05m9+7dQR/3rK2tNcbE9vytWLHCOJ1Os2zZMrN3714zadIkk5WVFfgoamFhobn33nsD48999HPGjBmmvLzcLFq0qMGPfqalpZl58+aZ8vJyM3v27Jh+dDec9S1fvtykpaWZRYsWBZ2r6urqwJg5c+aYN954wxw4cMCUlZWZUaNGmYyMDLNnz56or8+Y8Nf4xBNPmLVr15oPP/zQvP/+++ahhx4yKSkp5q233gqMsfM5POdf/uVfjNvtbvA+4+kcnjhxIvBcJ8k8/vjjZteuXYFPNdrhd5CQ+YaxY8caSfW2jRs3BsZIMkuXLg3c9vv95pFHHjHZ2dnG6XSaIUOGmP379wfd76lTp8wDDzxg/uEf/sFccMEF5o477jBHjx6N0qqC/e1vfzN33323ueiii0xmZqYZP358UKgZU3+Nxhjz61//2rRu3TroL9RzDh06ZK6//nrTpk0b43Q6zeWXX25mzJgRk++RCXd9X375pfn+979v2rdvb1q1amU6d+5sJk6cWO87HeLlHIa7vo8//rjBP9Pf/HMd6/O3YMECc8kll5j09HQzYMAA88477wR+NnbsWHPDDTcEjd+4caPp06ePSU9PN127dq33Z9UYY37/+9+bK6+80qSnp5tevXqZ1157zeJVNC6c9d1www0NnquxY8cGxjz88MOB+8vOzjbDhw8P+p6ZWAhnjXPnzjWXXXaZycjIMG3atDGDBw82GzZsqHefdj2Hxnz9Km7r1q3NM8880+D9xdM5PPfKUWN/5uzwO+gwxhhr3rQCAACwFt8jAwAAbIuQAQAAtkXIAAAA2yJkAACAbREyAADAtggZAABgW4QMAACwLUIGAADYFiEDAABsi5ABAAC2RcgAAADb+n85ea8M8FWwcQAAAABJRU5ErkJggg==", "text/plain": [ "PyPlot.Figure(PyObject )" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "(-1.1,1.1,-0.7699999999999999,0.7699999999999999)" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "figsize = (9, 6)\n", "t = -1 : 0.001 : 1\n", "plot(t, prox_gamma_g(t, 0.3))\n", "axis(\"equal\")" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "The proximity operator of $\\gamma$ times the indicator function of $\\Omega$ is projection onto $\\Omega$ \n", " and does not depends on $\\gamma$.\n", "$$ \\mathrm{prox}_{\\gamma f}(x)=\\mathrm{prox}_{\\iota_\\Omega}(x)=P_\\Omega(x) = x + A^* (A A^*)^{-1} (y-Ax). $$" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "pA = pinv(A) # pseudo-inverse. Equivalent to pA = A.T.dot(inv(A.dot(A.T)))\n", "prox_f = (x, y) -> x + pA*(y - A*x);" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "We set the values of $\\gamma$ and $\\rho$.\n", "Try different values to speed up the convergence." ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "1" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gamma = 0.1 # try 1, 10, 0.1\n", "rho = 1 # try 1, 1.5, 1.9" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Number of iterations." ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "nbiter = 700;" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "

\n", " \n", "__Exercise: Implement nbiter iterations of the Douglas-Rachford algorithm.\n", "Keep track of the evolution of the $\\ell^1$ norm.__

" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "s = zeros(N)\n", "En_array = zeros(nbiter)\n", "x = prox_f(s,y)\n", "s += rho.*(prox_gamma_g(2.*x - s, gamma) - x)\n", "En_array[1] = maximum(sum(abs(x), 1))\n", "for iter in 2 : nbiter # iter goes from 1 to nbiter\n", " x = prox_f(s,y)\n", " s += rho.*(prox_gamma_g(2.*x - s, gamma) - x)\n", " En_array[iter] = maximum(sum(abs(x), 1))\n", "end\n", "x_restored = x;" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "\n", "We display the original and the recovered signals." ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABQ8AAAJfCAYAAADRkCDWAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAIABJREFUeJzs3X9wlfWd6PFPQiDBCmGBEn5lhVZrdb1KiyWTut5VS5fWXu7udlaZa7vyY6GLNbora10Yd1GnWna3LbVbsKhdikxd19puHTu2qGVGrcgsLdq6K9r2DlqihAjaBqQWhOT+4W1q4APNiclJTs7rNXNm6pPnOc/3+SZP+c475+RUdHR0dAQAAAAAwBEq+3sAAAAAAMDAJB4CAAAAACnxEAAAAABIiYcAAAAAQEo8BAAAAABS4iEAAAAAkBIPAQAAAICUeAgAAAAApMRDgN/h8ccf7+8hAAAAQL8QDwGO4dlnn42IiFdeeSV27tzZz6MBAACA4hMPAY7h+eefj0ceeSRWrFgR3/jGN/p7OAAAAFB0FR0dHR39PQiAgaajoyPOPffceMc73hHvec974qqrrurvIQEAAEDReeUhwDHMnTs31q9fH6ecckrs27evv4cDAAAARSceAiQqKiqivr4+nn766fiXf/mXuPXWW/t7SAAAAFB04iFQVl588cWoqamJBQsWdNn+ve99L4YOHdr59uSOjo5YtWpVXHvttXHBBRfE1Vdf3R/DBQAAgH4lHgJlZdKkSbFw4cL42te+Fj//+c8j4o1PVb7oooviwx/+cHz+85/v3Pecc86Je++9N84777x+Gi0AAP2pu794BhjMfGAKUHZefPHFeOc73xkLFiyIT3/609HQ0BAjRoyIxx57LN72trd17vfAAw/ErFmz+nGkAAD0t6amprjtttviZz/7WZx00knx7LPPRmNjY5x77rlx7733RmWl1+QAg5t4CJSlK664Im6//faYNm1aNDc3x5YtW2LSpEn9PSwAAAaY7v7iGWCwEg+BsvTzn/88pkyZEsOHD4/vf//7MX369P4eEgAAA9Rg/MXzeeedFwsXLoyPf/zj/T0UYIDz+mqgLN10000REXHo0KEYPXp0P48GAICB7Oqrr44DBw7EU089Fffdd1+fhcMpU6bEY4891ifPDdBT4iFQdj772c/GV77ylVi1alVUVVV1hkQAAMgU8ovnQ4cOFWNI/X5OoHyIh0BZuffee2Pp0qXx6U9/Oi6//PL4xCc+EevXr4/nnnuuv4cGAMAA1J1fPFdUVMSqVati6tSpcf7550dExI4dO+IjH/lIjBkzJk477bTYsGFDRES0t7fHlVdeGWPHjo1Ro0bF+973vtizZ08sXLgwduzYEX/8x38cJ554Ytx5553x9NNPx7nnnhujRo2K6dOnx6ZNm3p0zoiIH/zgB3HmmWfGyJEjY/HixdHe3t6X0wYMIuIhUDa2bt0aH/vYx+JjH/tYXHvttRERcc0110RlZaVXHwIAcJRCfvH80EMPxY9//ON48MEHo729PWbPnh2zZs2K1tbWWLt2bfzFX/xFtLa2xoMPPhiPP/54bN++PV5++eW49dZbo6amJr7yla/E7//+78eDDz4Yr776alx00UUxe/bsuOiii2L37t1xzTXXxOzZs+MXv/hFwec8ePBgfPSjH43LLrssXn755fiDP/iDePzxx4s5lUAJEw+BsvDCCy/E7Nmz4z3veU/cfvvtndsnTpwYCxYs8OpDAAC6KPQXz0uXLo2RI0fG8OHDY8uWLfHaa6/FlVdeGVVVVdHY2Bh/9Ed/FN/97ndj6NChsW/fvnj22WejsrIy3vve98aJJ5541PP953/+Z+erFIcOHRpz5syJU089tcurCbt7zs2bN0dVVVVcdtllMXTo0GhqaooJEyb03eQBg4p4CJSFyZMnx86dO+Oxxx6L6urqLl+75ZZb4uDBgzF16tR+Gh0AAANJT37xPHny5M7/vWPHjnjuuedi1KhRnY8NGzZES0tLfOADH4jFixfHJz7xiZgwYUJcffXV8frrrx81hp07d0Z9fX2XbSeddFLs3Lmz4HO2tLR02beioqLLfwMcT1V/DwAAAAAGkt/84jlzyy23xC233HLU9oqKis7/PWnSpDjttNPiqaeeSp/jqquuiquuuiqam5vjwgsvjDPOOCPmzZvX5TkmTpwYzc3NXY7bsWNH/Mmf/EnB53zkkUfihRde6LLtyP8GOBavPAQAAIBe1NDQEO3t7fHlL385Dh48GAcPHozvf//7sWPHjvjhD38YP/jBD+LQoUMxYsSIGDp0aAwZMiQiIsaNGxfPP/9853NERKxatSoOHToU99xzTzzzzDPxoQ99qOBzNjY2xuuvvx633XZbvP7667F69epoaWkpylwApU88BAAAgF5UVVUV999/fzzwwAMxadKkmDhxYtx0003R3t4ebW1tsWDBghg1alSceuqpcc45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Y8c0ORaTqTctLQ1hYWFubVpaWnDu3DlNjslvv/2GixcvIjY2FkDw1y8i2LhxIyorK3H48GEkJSW5ndf6Gpiofk+0tgZGczqdGBwc1PzcX83IGHiitfnPzMzEqVOn0NDQ4Pq66667sH79ejQ0NCA5OVnZdUAzC/OounkU0H4emQotPR6pnkcBZlJPVM+kzKNBmEen5WNZZriKigoJDw+XPXv2yM8//yxPPfWUGAwGsdvtge6azz377LNSU1MjbW1t8sMPP4jFYpHo6GhxOBwiIlJWViYGg0E+++wzOXnypOTk5EhSUpL09/cHuOdT09PTI/X19VJfXy8A5M0335T6+no5e/asiEyu3g0bNkhCQoIcPnxYTpw4IWazWcxmc6BK8srV6u/p6ZHnnntObDabtLW1ybfffivLli2TRYsWycDAgOsawVx/fn6+REZGSk1NjbS3t7u++vr6XG20vAYmql/ra6C4uFisVqu0tbXJyZMnpbi4WHQ6nXzzzTciou25H3G1MdD6/I/nr59uJ6LGOqDgwDyq3TwqwkyqciZVPY+KMJOqnkmZR8cKxjzKzcM/7dq1SxISEkSv10t6erocPXo00F3yi7Vr10psbKzo9Xq56aabZO3atdLa2uo673Q65eWXX5aYmBgJDw+XzMxMaWlpCWCPr82RI0cEwJiv3NxcEZlcvf39/fL0009LVFSUXHfddfLQQw9Je3t7AKrx3tXq7+vrk5UrV8r8+fMlLCxMEhMT5cknnxzzJCWY6/dUOwD58MMPXW20vAYmql/ra+Dxxx+XxMRE0ev1Mn/+fMnMzHSFNBFtz/2Iq42B1ud/PKPDmgrrgIIH8+gVWsujIsykKmdS1fOoCDOp6pmUeXSsYMyjOhER3/89IxEREREREREREQU75d/zkIiIiIiIiIiIiDzj5iERERERERERERF5xM1DIiIiIiIiIiIi8oibh0REREREREREROQRNw+JiIiIiIiIiIjII24eEhERERERERERkUfcPCQiIiIiIiIiIiKPuHlIREREREREREREHnHzkIiIiIiIiIiIiDzi5iERERERERERERF5xM1DIiIiIiIiIiIi8oibh0REREREREREROTR/wMZXshplya2QgAAAABJRU5ErkJggg==", "text/plain": [ "PyPlot.Figure(PyObject )" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "PyObject " ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fig, (subfig1, subfig2) = subplots(1, 2, figsize = (16, 7)) # one figure with two horizontal subfigures\n", "subfig1[:stem](xsharp)\n", "subfig1[:set_ylim](0, 1.1)\n", "subfig2[:stem](x_restored)\n", "subfig2[:set_ylim](0, 1.1)\n", "subfig1[:set_title](L\"$x^\\sharp$\")\n", "subfig2[:set_title](L\"$x_\\mathrm{restored}$\")" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Since the original signal is highly sparse, it is perfectly recovered.\n", "\n", "We display the convergence speed of the $\\ell^1$ norm on the first half iterations, in log\n", "scale." ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "PyPlot.Figure(PyObject )" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "1-element Array{Any,1}:\n", " PyObject " ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "plot(log10(En_array - minimum(En_array)))" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "The convergence is linear in practice. Convergence up to machine precision (1e-14 here) is achieved after a few hundreds of iterations." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "

\n", " \n", "__Exercise: test the recovery of a less sparse signal.\n", "What do you observe?__

" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "S = 31\n", "srand(0)\n", "sel = randperm(N)\n", "sel = sel[1 : S] # indices of the nonzero elements of xsharp\n", "xsharp = zeros(N)\n", "xsharp[sel] = 1\n", "\n", "y = A*xsharp\n", "\n", "gamma = 1\n", "rho = 1 \n", "nbiter = 1000\n", "s = zeros(N)\n", "En_array = zeros(nbiter)\n", "x = prox_f(s,y)\n", "s += rho.*(prox_gamma_g(2*x - s, gamma) - x)\n", "En_array[1] = norm(x, 1)\n", "for iter in 2 : nbiter\n", " x = prox_f(s,y)\n", " s += rho.*(prox_gamma_g(2*x - s, gamma) - x)\n", " En_array[iter] = norm(x, 1)\n", "end\n", "x_restored = x;" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABQ8AAAJfCAYAAADRkCDWAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAIABJREFUeJzs3X90VeWdP/oPIZBINWGAISDyNXSqrdQpKBZuap2pNp20uuh0uqYyizooVFroBDumamHZBTi1w7ftlHFmBGm1iF6ZDtqOXXTZiTLprT9o7lCx9AdK23vBEiVE0JEg2qAk9w+vmUYeyDknOck58fVaa68lO/t5ns+z93P2OnlnH8+wrq6urgAAAAAAeJOSwS4AAAAAAChMwkMAAAAAIEl4CAAAAAAkCQ8BAAAAgCThIQAAAACQJDwEAAAAAJKEhwAAAABAkvAQAAAAAEgSHgL04sc//vFglwAAAACDQngIcAK7du2KiIgXXngh9u3bN8jVAAAAwMATHgKcwNNPPx0PP/xwrFq1Kr7zne8MdjkAAAAw4IZ1dXV1DXYRAIWmq6srLrroonj7298e5513Xlx77bWDXRIAAAAMOE8eApzAlVdeGXfffXecddZZcfjw4cEuBwAAAAac8BAgYdiwYTF58uTYuXNn/PM//3N84xvfGOySAAAAYMAJD4G3lGeffTbKy8tjwYIFPfb/53/+Z4wYMaL748ldXV1x6623xo033hiXXHJJXHfddYNRLgAAAAwq4SHwljJp0qS4+uqr45577onf/va3EfH6typ/4hOfiI985CPx9a9/vfvYCy+8ML73ve/FBz7wgUGqFgCAwZTpH54BhjJfmAK85Tz77LPxR3/0R7FgwYL40pe+FLNmzYrTTjstHnvssXjb297WfdyDDz4YdXV1g1gpAACDrb6+Pr75zW/Gb37zmzjzzDNj165dUVNTExdddFF873vfi5ISz+QAQ5vwEHhLWrJkSdx+++0xffr0aGlpiW3btsWkSZMGuywAAApMpn94BhiqhIfAW9Jvf/vbqK6ujlNOOSUeffTRmDFjxmCXBABAgRqKf3j+wAc+EFdffXVcccUVg10KUOA8Xw28JX35y1+OiIjXXnstxowZM8jVAABQyK677rro6OiIn//857F58+a8BYfV1dXx2GOP5aVvgFwJD4G3nK997Wtxxx13xK233hqlpaXdQSIAAKRk84fn1157bSBKGvQxgbcO4SHwlvK9730vli5dGl/60pfib/7mb+LTn/503H333bFnz57BLg0AgAKUyR+ehw0bFrfeemtMmTIlLr744oiI2Lt3b1x22WUxduzYOOecc6KxsTEiIjo7O+Oaa66JcePGxejRo+O9731vHDx4MK6++urYu3dv/Nmf/VmceuqpsXHjxti5c2dcdNFFMXr06JgxY0Zs3bo1pzEjIn7yk5/Ee97znqioqIhFixZFZ2dnPk8bMIQID4G3jO3bt8cnP/nJ+OQnPxk33nhjRETccMMNUVJS4ulDAACOk80fnrds2RI/+9nP4qGHHorOzs6YPXt21NXVRVtbW6xfvz7++q//Otra2uKhhx6KH//4x7F79+54/vnn4xvf+EaUl5fHHXfcEf/rf/2veOihh+Kll16KT3ziEzF79uz4xCc+EQcOHIgbbrghZs+eHf/93/+d9ZhHjx6Nj3/847F48eJ4/vnn493vfnf8+Mc/HshTCRQx4SHwlvDMM8/E7Nmz47zzzovbb7+9e//pp58eCxYs8PQhAAA9ZPuH56VLl0ZFRUWccsopsW3btnjllVfimmuuidLS0qipqYk//dM/jf/4j/+IESNGxOHDh2PXrl1RUlIS559/fpx66qnH9fdf//Vf3U8pjhgxIubMmRPvfOc7ezxNmOmYzc3NUVpaGosXL44RI0ZEfX19TJw4MX8nDxhShIfAW8IZZ5wR+/bti8ceeyzKysp6/Gzt2rVx9OjRmDJlyiBVBwBAIcnlD89nnHFG93/v3bs39uzZE6NHj+7eGhsbo7W1NT74wQ/GokWL4tOf/nRMnDgxrrvuunj11VePq2Hfvn0xefLkHvvOPPPM2LdvX9Zjtra29jh22LBhPf4NcDKlg10AAAAAFJI3/vCcsnbt2li7du1x+4cNG9b935MmTYpzzjknfv7znyf7uPbaa+Paa6+NlpaWuPTSS+Pcc8+Nq666qkcfp59+erS0tPRot3fv3vjzP//zrMd8+OGH45lnnumx783/BjgRTx4CAABAP5o1a1Z0dnbGbbfdFkePHo2jR4/Go48+Gnv37o3HH388fvKTn8Rrr70Wp512WowYMSKGDx8eERHjx4+Pp59+uruPiIhbb701Xnvttbjvvvviqaeeig9/+MNZj1lTUxOvvvpqfPOb34xXX3011qxZE62trQNyLoDiJzwEAACAflRaWhoPPPBAPPjggzFp0qQ4/fTT48tf/nJ0dnbGoUOHYsGCBTF69Oh45zvfGRdeeGHMnTs3IiK+8IUvxNKlS2P06NHxne98JzZv3hzf/va3Y+zYsbFq1arYvHlz/MEf/EHWY44cOTK++93vxr/8y7/E2LFj4+c//3m8733vG8hTAhSxYV1dXV2DXQQAAAAAUHg8eQgAAAAAJAkPAQAAAIAk4SEAAAAAkFQ62AVkorOzM/bt2xennXZaj6+iBwAoBl1dXXH48OE4/fTTo6TE326LkfejAECxy/U9aVGEh/v27YvJkycPdhkAAH3S0tISZ5xxxmCXQQ68HwUAhops35MWRXh42mmnRcTrk6uoqBjkagAAstPe3h6TJ0/ufk9D8fF+FAAodrm+Jy2K8PCNj4ZUVFR4swYAFC0fdy1e3o8CAENFtu9J/U93AAAAAIAk4SEAAAAAkCQ8BAAAAACShIcAAAAAQJLwEAAAAABIEh4CAAAAAEnCQwAAAAAgSXgIAAAAACQJDwEAAACAJOEhAAAAAJAkPAQAAAAAkoSHAAAAAECS8BAAAAAASBIeAgAAAABJwkMAAAAAIEl4CAAAAAAkCQ8BAAAAgKTSwS4AAACy8cgjj8TXvva12L59e7S2tsb9998fH/vYx07a5kc/+lE0NDTEzp07Y/LkyfHFL34xrrrqqoEpOAvHOrti254X4rnDv4vxp5XHzCljYnjJsH5tk8sYmda9/9Ar8cKRozHm1LKYUNE/fQ+mfJyrQh43l7oiIi+1FtKa6sv1KJRrORTm0FfZrN/+nHNvfeXznpzq80Q/y7WOTNrls++THRvR+/2pP2vLZLxiJTwEAKCoHDlyJKZNmxYLFiyIj3/8470ev2fPnrjsssti0aJFsXHjxmhqaoqrr746Jk6cGHV1dQNQcWYaf9kaN33/yWg99LvufRMry2PF7Knx4XMn9kubXMbIpe7+6nsw5eNcFfK4udQ1etSIiIh48eVXu/f1R62FtKb6cj0K5VoOhTn0VTbr96PTJsbmn7X2y5x7O38DdU9+o8+ISP4s1zlnUn+uc8ymXa73p/6sLV/3w0IxrKurq2uwi+hNe3t7VFZWxqFDh6KiomKwywEAyIr3MvkzbNiwXp88/MIXvhAPPPBA/PKXv+ze91d/9Vfx4osvRmNjY0bj5PsaNv6yNRbf80S8+Y35G88r3HbF+clflrJpk8sYudb95v5z6Xsw5eNcFfK4vcnkOr+hr7UW0prqy/UolGs5FObQV9ms3xPJZc69nb9P/8mU+OYjewbknjwsIuv591ZHJusjInJaQ9msvVzvT/1dW2/jFcprJdf3M/6fhwAADGnNzc1RW1vbY19dXV00NzcPUkU9Hevsipu+/2TyF5E39t30/SfjWGdXzm1yGaMvdb9Ztn0Ppnycq0IetzfZXOeIvtVaSGuqL9ejUK7lUJhDX2W7fk8k2zn3dv66IuL2R48PDnMZK9Mxs3WyOjIZa+XmnbFyc/ZrKJu1l+v9KR+1nWy8Ynit9EZ4CADAkLZ///6oqqrqsa+qqira29vjlVdeSbbp6OiI9vb2Hlu+bNvzQvLjmW/oiojWQ7+LbXteyLlNLmP0te6+9D2Y8nGuCnnc3mR6nX9frrUW0prqy/UolGs5FObQV7ms3xPJZs6ZjHuyLCmf9+RsnKiOTNbH/vaO2N+e/RrKZu3len/KV23Z9FVshIcAAPAmq1atisrKyu5t8uTJeRvrucOZ/SLy+8dl2yaXMfrz2FyOHyz5OFeFPG4+x8v3GsnnuejL9SiUazkU5tBX+agvkz77a9x83pP7Ukd/jpVr388d/t2Av4YG8n5YaISHAAAMaRMmTIi2trYe+9ra2qKioiJOOeWUZJtly5bFoUOHureWlpa81Tf+tPKsj8u2TS5j9OexuRw/WPJxrgp53HyOl+81ks9z0ZfrUSjXcijMoa/yUV8mffbXuPm8J/eljv4cK9e+x59WPuCvoYG8HxYa4SEAAENaTU1NNDU19di3ZcuWqKmpOWGbsrKyqKio6LHly8wpY2JiZXn3/1j9zYbF69/YOHPKmJzb5DJGpnX3Jpe+B1M+zlUhj9ub3upKybXWQlpTfbkehXIth8Ic+iqX9Xsi2cw5k3FLhkVe7sn9Mdfe6shkfUyoKIsJFdmvoWzWXq73p3zVlk1fxUZ4CABAUXnppZdix44dsWPHjoiI2LNnT+zYsSP27t0bEa8/NThv3rzu4xctWhS7d++OG264IXbt2hVr166Ne++9N6699tpBqf/NhpcMixWzpyZ/9sYvKCtmT43hJcNybpPLGJnWnUmLbPseTPk4V4U8bm9OVldKX2otpDXVl+tRKNdyKMyhr7JdvyeS7Zx7O3/DImLhRVP6ZaxMx8zWyerIZKyVH313rPxo9msom7WX6/0pH7Vl21exER4CAFBUHn/88TjvvPPivPPOi4iIhoaGOO+882L58uUREdHa2todJEZETJkyJR544IHYsmVLTJs2Lb7+9a/HHXfcEXV1dYNSf8qHz50Yt11xflRVlPXYP6GyPG674vz48LkT+9wmlzFyrfsNE/vQ92DKx7kq5HFzrWv0qBFReUppj319rbWQ1lRfrkehXMuhMIe+ymb9Tqwsj8/8yZR+mXNv52/ZpVMH7J48obI81l1xfqxL/CzXOWeyPnJdQ9m0y/X+1N+15eN+WEiGdXV1Ffz3Rbe3t0dlZWUcOnQorx8ZAQDIB+9lit9AXcPDv3s1/njlQxERcedV740/OfsPe31aIds2uYyRTd1v6K++B1M+zlUhj9ubVF0vH30tL7UW0prqy/UolGs5FObQV9ms3/6cc2995fue/OY+T/SzXOvIpF0++z7ZsZncn/qztnzdD/tTru9nPHkIAAAF4vd/yZj19jEZfzwumza5jJFNDf3d92DKx7kq5HF7k6orX7UW0prqyxwL5VoOhTn0VTbrtz/n3Ftf+b4nv7nP/p5zJu3y2ffJjh3o2obKayVFeAgAAAAAJAkPAQAAAIAk4SEAAAAAkCQ8BAAAAACShIcAAAAAQJLwEAAAAABIEh4CAAAAAEnCQwAAAAAgSXgIAAAAACQJDwEAAACAJOEhAAAAAJAkPAQAAAAAkkoHu4BCcqyzK7bteSGeO/y7GH9aecycMiaGlwzrtza59J9p3f/3//t8NO8+GBHDouaPxsb/8fax/dL3YMrX+Sq0MTOVqi0ihvya6ss1KYTr2dcaCmEO/SHT9Zval+t8ezt3+bwnp/o92Xi51pJJu3z2faLjInq/jv392s5kTAAAIHtZh4ePPPJIfO1rX4vt27dHa2tr3H///fGxj33spG1+9KMfRUNDQ+zcuTMmT54cX/ziF+Oqq67Ktea8aPxla9z0/Sej9dDvuvdNrCyPFbOnxofPndjnNrn0n2ndS//9F/Hiy69277v1//p/YvSoEfG/P/7Hfep7MOXrfBXamJlK1TZ61IiIiB7Xfqitqb5ck0K4nn2toRDm0B8yXb/9uaZ7O3f5vCen+v3otImx+WetyfEiIqdaMplDrvPMtF2u96b+fm3n634IAADk8LHlI0eOxLRp02LNmjUZHb9nz5647LLL4uKLL44dO3bE3/7t38bVV18dDz74YNbF5kvjL1tj8T1P9PhFJCJi/6HfxeJ7nojGX7b2qU0u/Wda96J7nujxy9IbXnz51VjUh74HU77OV6GNmakT1fbiy68ed+2H0prqyzUphOvZ1xoKYQ79IZv1219rurdzt+oHT+btnpzqt/XQ7+Ibj+xJjrfonidiUQ61ZLI+cl1DmbbL9d6Uj9d2Pu6HAADA67IODz/ykY/EzTffHH/xF3+R0fHr1q2LKVOmxNe//vU455xzor6+Pv7yL/8y/vEf/zHrYvPhWGdX3PT9J6Mr8bM39t30/SfjWGdXTm1y6T/Tuldu3tnrcbn0PZjydb4KbcxMnay2lKGypvpyTQrheva1hkKYQ3/Idv2mZDvf3s5dV0Tc/uievNyTs53ryY49WS2ZrI+Vm3fGys3Zr6FM197R1zpzujflWldvtZ1szGJ4rQAAQCHL+xemNDc3R21tbY99dXV10dzcfMI2HR0d0d7e3mPLl217XjjuCYbf1xWvPzWybc8LObXJpf9M697f3tHrcbn0PZjydb4KbcxM9VZbylBYU325JoVwPftaQyHMoT/ksn5TsplvJmOeLEfqy+unP+aaSS2ZrI/97R2xvz37NZTp2vs/m5/O6d6Ua12Z1JZtfwAAQGbyHh7u378/qqqqeuyrqqqK9vb2eOWVV5JtVq1aFZWVld3b5MmT81bfc4cz+0Xk94/Lpk0u/ff38dn2PZjydb4KbcxM9WXMYl5TfbkmhXA9+1pDIcyhP/R3fZn0119j5vP1k603953P+1+mff/2hZf7rYaUvry2M+0PAADITN7Dw1wsW7YsDh061L21tLTkbazxp5VnfVw2bXLpv7+Pz7bvwZSv81VoY2aqL2MW85rqyzUphOvZ1xoKYQ79ob/ry6S//hozn6+fbL2573ze/zLt+8wxo/qthpS+vLYz7Q8AAMhM3sPDCRMmRFtbW499bW1tUVFREaecckqyTVlZWVRUVPTY8mXmlDExsbI8hp3g58Pi9W9snDllTE5tcuk/07onVJT1elwufQ+mfJ2vQhszU73VljIU1lRfrkkhXM++1lAIc+gPuazflGzmm8mYJcMiL/fk/phrJrVksj4mVJTFhIrs11Cma++va6pzujflWlcmtWXbHwAAkJm8h4c1NTXR1NTUY9+WLVuipqYm30NnZHjJsFgxe2ryZ2/8grJi9tQYXjIspza59J9p3Ss/+u5ej8ul78GUr/NVaGNm6mS1pQyVNdWXa1II17OvNRTCHPpDtus3Jdv59nbuhkXEwoum9MtYmY57Iicb4WS1ZLI+Vn703bHyo9mvoUzX3sjSkpzuTbnW1VttufQHAABkJuvw8KWXXoodO3bEjh07IiJiz549sWPHjti7d29EvP6R43nz5nUfv2jRoti9e3fccMMNsWvXrli7dm3ce++9ce211/bTFPruw+dOjNuuOD+q3vTU1YTK8rjtivPjw+dO7FObXPrPtO51V5wflaeUHvezPxg1Itb1oe/BlK/zVWhjZupEtY0eNeK4az+U1lRfrkkhXM++1lAIc+gP2azf/lrTvZ27ZZdOzds9OdXvxMry+MyfTEmOt+6K82NdDrVksj5yXUOZtsv13pSP13Y+7ocAAMDrjk8IevH444/HxRdf3P3vhoaGiIi48sorY8OGDdHa2todJEZETJkyJR544IG49tpr45/+6Z/ijDPOiDvuuCPq6ur6ofz+8+FzJ8aF7xgXf7zyoYiIuPOq98afnP2HJ31aIZs2ufSfS90REd+68oL4wDvHF/WTFvk6X4U2ZqZOVNvLR18b0muqL9ekEK5nX2sohDn0h2zWb3+t6d7O3UDdk3+/3/pLzjrheLnUkskccp1npu1yvTfl47Wdj/shAACQQ3j4gQ98ILq6uk748w0bNiTb/PSnP812qAH3+79kzHr7mIw/Ipdpm1z6z8Sb+6n5o7FD4hemfJ2vQhszU6na3gprqi9zLITr2dcaCmEO/SHT9duf8+2tr4F4/fx+vycbL9daMmmXz75PdFw+6+rLmAAAQPYK8tuWAQAAAIDBJzwEAAAAAJKEhwAAAABAkvAQAAAAAEgSHgIAAAAAScJDAAAAACBJeAgAAAAAJAkPAQAAAIAk4SEAAAAAkCQ8BAAAAACShIcAAAAAQJLwEAAAAABIEh4CAAAAAEnCQwAAAAAgSXgIAAAAACQJDwEAAACAJOEhAAAAAJAkPAQAAAAAkoSHAAAAAECS8BAAAAAASBIeAgAAAABJwkMAAAAAIEl4CAAAAAAkCQ8BAAAAgCThIQAAAACQJDwEAAAAAJKEhwAAAABAkvAQAAAAAEgSHgIAAAAAScJDAAAAACBJeAgAAAAAJAkPAQAAAIAk4SEAAAAAkCQ8BAAAAACShIcAAAAAQJLwEAAAAABIEh4CAAAAAEnCQwAAAAAgSXgIAAAAACQJDwEAAACAJOEhAAAAAJAkPAQAAAAAkoSHAAAAAECS8BAAAAAASBIeAgAAAABJwkMAAAAAIEl4CAAAAAAkCQ8BAAAAgCThIQAAAACQJDwEAAAAAJKEhwAAAABAkvAQAAAAAEgSHgIAAAAAScJDAAAAACBJeAgAAAAAJAkPAQAAAIAk4SEAAAAAkCQ8BAAAAACShIcAAAAAQJLwEAAAAABIEh4CAAAAAEnCQwAAAAAgSXgIAEDRWbNmTVRXV0d5eXnMmjUrtm3bdtLjN27cGNOmTYtRo0bFxIkTY8GCBfH8888PULUAAMVLeAgAQFHZtGlTNDQ0xIoVK+KJJ56IadOmRV1dXTz33HPJ47du3Rrz5s2LT33qU7Fz58647777Ytu2bbFw4cIBrhwAoPgIDwEAKCqrV6+OhQsXxvz582Pq1Kmxbt26GDVqVKxfvz55fHNzc1RXV8c111wTU6ZMife///3xmc98ptenFQEAEB4CAFBEjh49Gtu3b4/a2trufSUlJVFbWxvNzc3JNjU1NdHS0hI/+MEPoqurK9ra2uK+++6LSy+9dKDKBgAoWsJDAACKxsGDB+PYsWNRVVXVY39VVVXs378/2ebCCy+MjRs3xpw5c2LkyJExYcKEGD16dKxZs+aE43R0dER7e3uPDQDgrUh4CADAkPbkk0/G5z73uVi+fHls3749Ghsb4+mnn45FixadsM2qVauisrKye5s8efIAVgwAUDiEhwAAFI1x48bF8OHDo62trcf+tra2mDBhQrLNqlWr4n3ve19cf/318Z73vCfq6upi7dq1sX79+mhtbU22WbZsWRw6dKh7a2lp6fe5AAAUA+EhAABFY+TIkTFjxoxoamrq3tfZ2RlNTU1RU1OTbPPyyy9HaWlpj33Dhw+PiIiurq5km7KysqioqOixAQC8FQkPAQAoKg0NDXH77bfHXXfdFU899VQsXrw4jhw5EvPnz4+I158anDdvXvfxs2fPju9+97tx2223xe7du2Pr1q1xzTXXxMyZM+P0008frGkAABSF0t4PAQCAwjFnzpw4cOBALF++PPbv3x/Tp0+PxsbG7i9RaW1tjb1793Yff9VVV8Xhw4fj1ltvjc9//vMxevTouOSSS+IrX/nKYE0BAKBoCA8BACg69fX1UV9fn/zZhg0bjtu3ZMmSWLJkSZ6rAgAYenxsGQAAAABIEh4CAAAAAEnCQwAAAAAgSXgIAAAAACQJDwEAAACAJOEhAAAAAJAkPAQAAAAAkoSHAAAAAECS8BAAAAAASBIeAgAAAABJwkMAAAAAIEl4CAAAAAAkCQ8BAAAAgCThIQAAAACQlFN4uGbNmqiuro7y8vKYNWtWbNu27aTHb9y4MaZNmxajRo2KiRMnxoIFC+L555/PqWAAAAAAYGBkHR5u2rQpGhoaYsWKFfHEE0/EtGnToq6uLp577rnk8Vu3bo158+bFpz71qdi5c2fcd999sW3btli4cGGfiwcAAAAA8ifr8HD16tWxcOHCmD9/fkydOjXWrVsXo0aNivXr1yePb25ujurq6rjmmmtiypQp8f73vz8+85nP9Pq0IgAAAAAwuLIKD48ePRrbt2+P2tra/+mgpCRqa2ujubk52aampiZaWlriBz/4QXR1dUVbW1vcd999cemll55wnI6Ojmhvb++xAQAAAAADK6vw8ODBg3Hs2LGoqqrqsb+qqir279+fbHPhhRfGxo0bY86cOTFy5MiYMGFCjB49OtasWXPCcVatWhWVlZXd2+TJk7MpEwAAAADoB3n/tuUnn3wyPve5z8Xy5ctj+/bt0djYGE8//XQsWrTohG2WLVsWhw4d6t5aWlryXSYAAAAA8Cal2Rw8bty4GD58eLS1tfXY39bWFhMmTEi2WbVqVbzvfe+L66+/PiIi3vOe98Tb3va2uOiii+Lmm2+OiRMnHtemrKwsysrKsikNAAAAAOhnWT15OHLkyJgxY0Y0NTV17+vs7IympqaoqalJtnn55ZejtLRnRjl8+PCIiOjq6sq2XgAAAABggGT9seWGhoa4/fbb46677oqnnnoqFi9eHEeOHIn58+dHxOsfOZ43b1738bNnz47vfve7cdttt8Xu3btj69atcc0118TMmTPj9NNP77+ZAAAAAAD9KquPLUdEzJkzJw4cOBDLly+P/fv3x/Tp06OxsbH7S1RaW1tj79693cdfddVVcfjw4bj11lvj85//fIwePTouueSS+MpXvtJ/swAAAAAA+l3W4WFERH19fdTX1yd/tmHDhuP2LVmyJJYsWZLLUAAAAADAIMn7ty0DAAAAAMVJeAgAAAAAJAkPAQAAAIAk4SEAAAAAkCQ8BAAAAACShIcAAAAAQJLwEAAAAABIEh4CAAAAAEnCQwAAAAAgSXgIAAAAACQJDwEAAACAJOEhAAAAAJAkPAQAAAAAkoSHAAAAAECS8BAAAAAASBIeAgAAAABJwkMAAAAAIEl4CAAAAAAkCQ8BAAAAgCThIQAAAACQJDwEAAAAAJKEhwAAAABAkvAQAAAAAEgSHgIAAAAAScJDAAAAACBJeAgAAAAAJAkPAQAAAIAk4SEAAAAAkCQ8BAAAAACShIcAAAAAQJLwEAAAAABIEh4CAAAAAElhGD1MAAAgAElEQVTCQwAAAAAgSXgIAAAAACQJDwEAAACAJOEhAAAAAJAkPAQAAAAAkoSHAAAAAECS8BAAAAAASBIeAgAAAABJwkMAAAAAIEl4CAAAAAAkCQ8BAAAAgCThIQAAAACQJDwEAAAAAJKEhwAAAABAkvAQAAAAAEgSHgIAAAAAScJDAAAAACBJeAgAAAAAJAkPAQAAAIAk4SEAAAAAkCQ8BAAAAACShIcAAAAAQJLwEAAAAABIEh4CAAAAAEnCQwAAAAAgSXgIAAAAACQJDwEAAACAJOEhAAAAAJAkPAQAAAAAkoSHAAAAAECS8BAAgKKzZs2aqK6ujvLy8pg1a1Zs27btpMd3dHTEjTfeGGeeeWaUlZVFdXV1rF+/foCqBQAoXqWDXQAAAGRj06ZN0dDQEOvWrYtZs2bFLbfcEnV1dfGrX/0qxo8fn2xz+eWXR1tbW3zrW9+Kd7zjHdHa2hqdnZ0DXDkAQPERHgIAUFRWr14dCxcujPnz50dExLp16+KBBx6I9evXx9KlS487vrGxMR5++OHYvXt3jBkzJiIiqqurB7JkAICi5WPLAAAUjaNHj8b27dujtra2e19JSUnU1tZGc3Nzss3mzZvjggsuiK9+9asxadKkOPvss+O6666LV155ZaDKBgAoWp48BACgaBw8eDCOHTsWVVVVPfZXVVXFrl27km12794djz32WJSXl8f9998fBw8ejM9+9rPx/PPPx5133pls09HRER0dHd3/bm9v779JAAAUEU8eAgAwpHV2dsawYcNi48aNMXPmzLj00ktj9erVcdddd53w6cNVq1ZFZWVl9zZ58uQBrhoAoDAIDwEAKBrjxo2L4cOHR1tbW4/9bW1tMWHChGSbiRMnxqRJk6KysrJ73znnnBNdXV3xzDPPJNssW7YsDh061L21tLT03yQAAIqI8BAAgKIxcuTImDFjRjQ1NXXv6+zsjKampqipqUm2ufDCC2Pfvn3x0ksvde/79a9/HSUlJXHGGWck25SVlUVFRUWPDQDgrUh4CABAUWloaIjbb7897rrrrnjqqadi8eLFceTIke5vX162bFnMmzev+/i5c+fG2LFjY/78+fHkk0/GI488Etdff30sWLAgTjnllMGaBgBAUfCFKQAAFJU5c+bEgQMHYvny5bF///6YPn16NDY2dn+JSmtra+zdu7f7+FNPPTW2bNkSS5YsiQsuuCDGjh0bl19+edx8882DNQUAgKIhPAQAoOjU19dHfX198mcbNmw4bt+73vWu2LJlS56rAgAYenxsGQAAAABIEh4CAAAAAEnCQwAAAAAgSXgIAAAAACQJDwEAAACAJOEhAAAAAJAkPAQAAAAAkoSHAAAAAECS8BAAAAAASBIeAgAAAABJwkMAAAAAIEl4CAAAAAAkCQ8BAAAAgCThIQAAAACQlFN4uGbNmqiuro7y8vKYNWtWbNu27aTHd3R0xI033hhnnnlmlJWVRXV1daxfvz6nggEAAACAgVGabYNNmzZFQ0NDrFu3LmbNmhW33HJL1NXVxa9+9asYP358ss3ll18ebW1t8a1vfSve8Y53RGtra3R2dva5eAAAAAAgf7IOD1evXh0LFy6M+fPnR0TEunXr4oEHHoj169fH0qVLjzu+sbExHn744di9e3eMGTMmIiKqq6v7VjUAAAAAkHdZfWz56NGjsX379qitrf2fDkpKora2Npqbm5NtNm/eHBdccEF89atfjUmTJsXZZ58d1113XbzyyisnHKejoyPa29t7bAAAAADAwMrqycODBw/GsWPHoqqqqsf+qqqq2LVrV7LN7t2747HHHovy8vK4//774+DBg/HZz342nn/++bjzzjuTbVatWhU33XRTNqUBAAAAAP0s79+23NnZGcOGDYuNGzfGzJkz49JLL43Vq1fHXXfddcKnD5ctWxaHDh3q3lpaWvJdJgAAAADwJlk9eThu3LgYPnx4tLW19djf1tYWEyZMSLaZOHFiTJo0KSorK7v3nXPOOdHV1RXPPPNMnHXWWce1KSsri7KysmxKAwAAAAD6WVZPHo4cOTJmzJgRTU1N3fs6Ozujqakpampqkm0uvPDC2LdvX7z00kvd+379619HSUlJnHHGGTmWDQAAAADkW9YfW25oaIjbb7897rrrrnjqqadi8eLFceTI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", "text/plain": [ "PyPlot.Figure(PyObject )" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "PyObject " ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fig, (subfig1, subfig2) = subplots(1, 2, figsize = (16, 7)) # one figure with two horizontal subfigures\n", "subfig1[:stem](xsharp)\n", "subfig1[:set_ylim](0, 1.1)\n", "subfig2[:stem](x_restored)\n", "subfig1[:set_title](L\"$x^\\sharp$\")\n", "subfig2[:set_title](L\"$x_\\mathrm{restored}$\")" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "PyPlot.Figure(PyObject )" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "1-element Array{Any,1}:\n", " PyObject " ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "plot(log10(En_array - minimum(En_array)))" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Convergence is much slower in this setting." ] }, { "cell_type": "raw", "metadata": { "collapsed": true, "deletable": true, "editable": true }, "source": [ "" ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Julia 0.5.0", "language": "julia", "name": "julia-0.5" }, "language_info": { "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", "version": "0.5.0" } }, "nbformat": 4, "nbformat_minor": 0 }