{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Line search methods" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Once the direction of search is fixed, finding the length of the step amounts to solving an optimization problem for a function with a single variable. Instead of searching for the minimizing length, some \"good enough\" solution can be desired. A method to find one is called [backtracking](https://en.wikipedia.org/wiki/Backtracking_line_search)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Backtracking" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Consider a scalar function of a scalar argument" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "f (generic function with 1 method)" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "f(x) = 5x^3 - 4x^2 - 3x + 5" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's plot the function" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "image/png": "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FwELABB1fiyxuvS/5UqPl147p1gJMYQr+BeL3AEAUaW43Oryj1wVlklzLo9RSnmwK0IkooMFAIgarrEaNt3VkgKr/1ziVfMkOleoHnSwAABRY/Rco6kbrd69yKuuGfQYUH0IWACAqPDsMld/XG404TyPBjUlXKF6McIAABHvrfVGd39tNKaDRyPaeoNdDqIAAQsAENFmbzO6Ybqra1s4eqIbb3sIDEYaACBifbvb94nBbhmOXunNXlcIHAIWACAibS/27XVVt4b07sVexXsJVwgcFrkDACLO/nKrQR+52lcufXZZjFLjCVcILAIWACCiuMbq+s9drdhlNXNgjLJqE64QeAQsAEDEsNbqf+cYvb/J6v2LveqSQbhCcBCwAAAR48mlRn9aafRiT68GNGGZMYKH0QcAiAjPL3c1Zp7RA508uv0s3t4QXIxAAEDYm7jS1ag5Rvd08OjRLry1IfgYhQCAsPbX1Ua/mmX0Pzkeje/mkcNeVwgBBCwAQNj6+7dGt3/pakRbj57pQbhC6CBgAQDC0j+/M7plpqtb2zh6/lzCFUILAQsAEHbeWGv08xmubm7laGJPLoGD0EPAAgCElbfXG10/3dX1LRz95XzCFUITAQsAEDbe32h07Weurm7uaFJvr7wewhVCEwELABAWpm02Gvqpq8FZjib38SqGcIUQRsACAIS8j/ONhnzi6tLGjqZcQLhC6CNgAQBC2uffGw3+2NWFDRz960KvYglXCAMELABAyPpii9Ggj131quforX5exXsJVwgPBCwAQEiatdVowH9dnVPX0bsXe5UQQ7hC+CBgAQBCztfbjC79r6uzMxy9d4lXNQhXCDMELABASPlos1G/D111THP0n0u8qkm4QhgiYAEAQsY/vjMa+JGrPvUdfTTAq8RYwhXCEwELABASnl3m6obprm7IdvTOxXSuEN4IWACAoLLW6r55ru762mhsR49e7sVWDAh/McEuAAAQvcqN1W1funrlW6une3h0V3tvsEsC/IKABQAIiv3lVtd+5uq/m61e6+vVsJZMqiByELAAAAFXUGI16GNXS3Za/ecSry5pTLhCZCFgAQACKr/I6pJp5dpWLH1+mVfd6hKuEHkIWACAgFm1yxeuHEeadXmMWqewmB2Rif82AAAC4uttRj3fL1dynDSbcIUIR8ACAFS7aZuNLvjAVdsUR18MilHD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" }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "using Plots; using LaTeXStrings; pyplot()\n", "plot(f,0,2.0,label=\"f(x)\", xlabel=\"x\",ylabel=\"f(x)\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In order to find an optimum, we will need the first derivative. In this particular easy case we could write it down immediately. In a bit more complicated situations we might use some package for symbolic computation such as [SymPy](https://github.com/JuliaPy/SymPy.jl) but we can also follow yet another path - [algoritmic (also automatic) differentiation](https://en.wikipedia.org/wiki/Automatic_differentiation). Let's follow the latter path here, using the [ForwardDiff](https://github.com/JuliaDiff/ForwardDiff.jl) package." ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "using ForwardDiff" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "#3 (generic function with 1 method)" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Df = x -> ForwardDiff.derivative(f,x)" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "image/png": "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" }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "plot(Df,0,2.0,label=\"f'(x)\",xlabel=\"x\",ylabel=\"f'(x)\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We pick an initial estimate of the value of `x` at which the function is minimized" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [], "source": [ "x0 = 0.3;" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The initial \"direction\" (the variable $x$ is just a scalar here) is" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "4.05" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d0 = -Df(x0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Our search from the point `x0` will be to the right if `d0` is positive and to the left if it is negative." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Then we pick three parameters of the backtracking algorithm. First, the initial length $s$ of the step. Obviously, such value must be positive." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "s = 0.3;" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Then parameters $\\beta$ and $\\gamma$. Both are in the interval (0,1)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "γ = 0.3;" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "β = 0.5;" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The first step of backtracking is then" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.3" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "α = s" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1.515" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x1 = x0+α*d0" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We now create an auxiliary linear function that will be used to measure if the reduction in the cost function was significant enough." ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "ϕ (generic function with 1 method)" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ϕ(x) = γ*Df(x0)*(x-x0) + f(x0)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "xf = x0:0.1:x1;" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAYAAAByNR6YAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAA9hAAAPYQGoP6dpAABQh0lEQVR4nO3deXwV1f3/8dfM3JuNbIQlZCEkhDXsi4CigpW6r0DdWxda9afWr1YL2lqr1mq11tpqqdqqRW1dwbWidQM3NkFkDUJYw74mZM+dOb8/LgQjiiw3d0nez8cjD73DTOZMMtz75nPOnGMZYwwiIiIiEjJ2pBsgIiIi0twoYImIiIiEWFQFrKqqKubNm0dVVVWkmyIiIiJy2KIqYBUXFzNo0CCKi4sP+3uUlZWFsEUSahWl1Xzyi4VUlFZHuilRR/euxCLdtxKLvnnfNsVnU1QFrFBwXTfSTRA5LLp3JRbpvpVYFI77ttkFLBEREZFIU8ASERERCTFfpBtwKGpra1m2bBmBQOA79ykrKyMtLS2MrWo6juPQqVMn0tPTI90UEREROQQxE7BKSkro378/FRUVkW5K2P3sZz/j0UcfxbZVcBQREYkFMRGwPM9j3LhxtG3blqlTp5KUlBTpJoVFXV0dH330EbfccgsAjz/+eIRbJCIiIgcjJgLWxo0bmT59Ov/5z3849thjI92csBo2bBgAEyZM4P7771d3oYiISAhNmTKFJx+axC2D7+aCiy7gihsuZfTo0Uf8fWOiz2nr1q0AFBYWRrglkXH88ccDsGbNmgi3REREpPmYMmUKY8aMYbO7DYDN7jbGjBnDlClTjvh7x0TA8jwPAJ8vJgpuIRcXFwdovhkREZFQuuvuu8jo057CS/sAUHhpHzL6tOd3v//dEX/vmAhY0eq1116jZ8+e9O/fn4ULFzJ69GhmzJhxwGOMMRx33HGsWrUqTK0UERGRb7OseBnpfdphWcHXlgXpfdpRvPTwV5TZSwHrCDz66KPcddddzJ8/n+rqanbt2sXRRx99wGMsy+LGG2/kzjvvDFMrRURE5Nt079GdXQu3YkzwtTGwa+FWevTsccTfWwHrMF1//fV8/PHHTJgwgWOOOYbHHnuMiy++GAh2aZ5yyin86U9/AoJTTHTs2JHly5cDcOaZZ/LWW2+xe/fuiLVfRESkpbv9ttvZsXALJZMWAlAyaSE7Fm7h9ttuP+LvHZODmqoChuJdTXuOHumQ5LO+88//+te/smDBAm6++WbOOOMMCgsLufnmmwGwbZtnn32WIUOGMGjQIG666Sb++Mc/0rVrVwD8fj+9e/fm008/5ZRTTmnaCxEREZFvNXr0aCZPnsxTf3kagA6+dkyZMoVzzz33iL93TAas4l0w6JXvns09FOae62Ng24Pfv7S0lA4dOjS8btu2Lc888wwnnHACl19+ORdccEGj/Tt06EBpaWmomisiIiKHYfTo0Zw05FTmP7iC5/79HMm5iSH5vjEZsHqkBwNQU5/jUCQlJVFdXU3r1q0btn3xxRe0adOG0tJSjDFY1r6KWE1NDYmJofklioiISHSJyYCV5LMOqboUDn379qW4uJjs7GwA5s2bxwMPPMC8efMYN24c999/PxMmTGjYf+nSpfTr1y9SzRUREZEmpEHuITJ27FimTp0KQHl5ORdccAFPPvkkWVlZPP300zz66KN8+umnAKxevRqA3r17R6q5IiIi0oRisoIVLaZNm9bw/5dddhlHH300d9xxB6mpqXz11VcNf9a2bdtG8149+uijDQPiRUREpPlRBStEUlJSeOihhw5qAtHs7Gwuv/zyMLRKREREIkEVrBAaNWrUQe13/fXXN3FLREREJJJUwRIREREJMQUsERERkRBTwBIREREJMQUsERERaTG21xh21jX9eTTIXURERFqMMe+5FCTE81SH79/3SKiCJSIiIi3C2grD9I2GoW3dJj+XAlYIZWVlsW3btkbbRo8ezYwZMw54nDGG44477qDm0BIREZHD83yJR4IDp2YFmvxcClghsnr1apKTk2nbdt8iibNnz2bXrl0cffTRBzzWsixuvPFG7rzzzqZupoiISIv1fInHmXkWKf6mP5cC1hHavn07P/7xjxk5ciTbt29n4MCBFBcXA/DYY49x8cUXN+w7btw4br31VgDWrFlD9+7d+eSTTwA488wzeeutt9i9e3f4L0JERKSZW7bL8MV2uLAwPNFHAesIjRkzhhNOOIGxY8dy++23c/bZZ3PXXXcBwbUKjznmmIZ97777bp544gm++OILTj/9dB555BGOPfZYAPx+P717925YEFpERERC57kSj1Q/nNrRCsv5YvIpQq+uhsDmdU16Dl9mR+y4hAPuM3PmTHbu3MkVV1zByJEjOfvss9m0aROz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ERGJONczTFzqcWGhRduE5l29AgUsERERCYM31xrWVsB1RU6kmxIWClgiIiLS5B5Z4jGsvcWgds2/egUKWCIiItLElu40vLc+uO5gS9FyrlREREQiYuISj/aJMLagZVSvQAFLREREmlB5neFfyz2u7GET7yhgiYiIiByxZ5Z7VAfgqhYwNcPXtayrFRERkbAxxvDIEo9z8y1yk1tO9QoUsERERKSJfLDBULyLFjW4fa+Wd8UiIiISFo8s9ujdGo7v0LKqV6CAJSIiIk1gzW7D62uDUzNYlgKWiIiIyBF7dKlHih8u7tIyo0bLvGoRERFpMjUBwz+KPS7vZpPsb3nVK1DAEhERkRB7YaVhey1cW9RyY0bLvXIREREJOWMMf13sckquRZe0llm9AvBFugEiIiLSfEzbaJi3Dd49rWXXcFr21YuIiEhIPbDAo18GnJjdcqtXoAqWiIiIhMjiHYa31hmeHum0yKkZvk4VLBEREQmJBxe65LSC8zu37HAFClgiIiISAhurDM+uMPxfL5s4RwFLAUtERESO2COLPeIduLKnogUoYImIiMgRqqg3/H2px8962KTFqXoFClgiIiJyhJ5a5lFeB//XW7FiL/0kRERE5LC5nuHPizzO72yRl6zq1V6apkFEREQO2yurDat2w8ujnEg3JaqogiUiIiKHxRjDHxd4nJBlMbCtqldfpwqWiIiIHJZPNxtmbzX892RVr75JFSwRERE5LA8s8ChKh1M6qnr1TQpYIiIicsiW7TK8vsZwU18Hu4Uvi/NtFLBERETkkP15oUf7RLi4i8LVt1HAEhERkUOypdowabnH9b1s4rUszrdSwBIREZFDMnGJh23B1VoW5zvpJyMiIiIHrSpg+NsSj3HdbTISVL36LgpYIiIictCe/spjRy3coGVxDkg/HRERETkormd4cKHH6HyLzqmqXh2IJhoVERGRg/LGWsPycnjmBNVnvo9+QiIiInJQHljgcWymxdD2ig/fJ2w/odraWq677jq6du1Kr169uOSSS8J1ahERETlCMzd7fLrZcHNfhauDEbYuwltuuQXbtvnqq6+wLIuNGzeG69QiIiJyhP7wpUe3NDizk8ZeHYywBKzKykqeeuopSktLsfZMp5+VlRWOU4uIiMgRmr/d8Noaw6QRWhbnYIWlzldSUkKbNm24++67GTx4MMcddxzvv//+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" }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "plot(f,0,1.5,label=\"f(x)\", xlabel=\"x\", ylabel=\"f(x)\")\n", "plot!(ϕ,xf,label=L\"$\\phi(x)$\")\n", "scatter!([x0,x1],[f(x0),f(x1)],label=\"\")\n", "plot!([x0,x1], seriestype=\"vline\", label=\"\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The backtracking algorithm is then described by the following iteration" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [], "source": [ "k = 1;" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [], "source": [ "using LinearAlgebra # in order to use NORM" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [], "source": [ "while (f(x0) - f(x1)) < -γ*α*norm(d0)^2\n", " α = β*α\n", " x1 = x0+α*d0\n", "end " ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAYAAAByNR6YAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAA9hAAAPYQGoP6dpAABRYklEQVR4nO3dd3xV9f3H8dc5594sQhISRhISICQQRtgIIiJaqdsqw1W3uGqtrdqKdjl+Wls6tLW1aB111YWI1opbEBEBQfaQhBmWyEjIzr3n+/vjQiAyZNzclffz8chD7sm5ud+TnHvP2+/3ez5fyxhjEBEREZGgscPdABEREZFYo4AlIiIiEmQRFbCqqqqYN28eVVVV4W6KiIiIyFGLqIC1fPlyBgwYwPLly4/6Z5SVlQWxRdIUKkqr+fS2RVSUVoe7KRFH568crUh4X+n8lWgW7PM3ogJWMPj9/nA3QeSo6fyVaKbzV6JZsM/fmAtYIiIiIuGmgCUiIiISZJ5wN+BI1NbWsmLFCnw+30H3KSsrIzU1NYStajqO49CxY0fS0tLC3RQRERE5AlETsEpKSujbty8VFRXhbkrIXXfddUyYMAHbVoejiIhINIiKgOW6LmPHjqV169ZMmTKFpKSkcDcpJOrq6vjkk0+48847AXj88cfD3CIRERE5HFERsDZt2sS0adP4z3/+w4knnhju5oTU8ccfD8C4ceMYP368hgtFRESiQFSMOW3duhWA/Pz8MLckPE466SQA1q5dG+aWiIiIyOGIioDlui4AHk9UdLgFXVxcHKAaMyIiIk1h8XbDY8XeoP7MqAhYkeqNN96ge/fu9O3bl0WLFjFq1Chmzpx5yOcYYxg2bBirV68OUStFRETkUO6d52fiOgWsiDFhwgTuu+8+5s+fT3V1NTt37mTIkCGHfI5lWdx6663ce++9IWqliIiIHExlveF/6wzntD94CaijoYB1lG655RamT5/OuHHjOOGEE3jssce49NJLgcCQ5hlnnMGf//xnIFBiIjc3l5UrVwJw7rnn8vbbb7Nr166wtV9ERETg7fWGaj+c174+qD83Kic1VfkMy3c27Wt0S4Mkj3XQ7//tb39j4cKF/PznP+ecc84hPz+fn//85wDYts3zzz/PoEGDGDBgALfffjt//OMf6dKlCwBer5eioiJmzJjBGWec0bQHIiIiIgf1yiqX/q2hU7IJ6s+NyoC1fCcMeD24XXnfNnekh/6tD3//0tJSMjMzGx63bt2a5557jlNOOYWrr76aiy++uNH+mZmZlJaWBqu5IiIicoT2DA/e3T/4A3pRGbC6pQUCUFO/xpFISkqiurqaVq1aNWz78ssvycjIoLS0FGMMlrW3R6ympobExMQgtVZERESO1P/WBYYHL+hsQ5D7baIyYCV5rCPqXQqF3r17s3z5crKzswGYN28ef/rTn5g3bx5jx45l/PjxjBs3rmH/ZcuW0adPn3A1V0REpNl7ZbXLwNYWnVMstm8P7s/WJPcgGTNmDFOmTAGgvLyciy++mKeeeoqsrCyeffZZJkyYwIwZMwBYs2YNAEVFReFqroiISLNWsXt48MLOB59vfSyisgcrUkydOrXh31dddRVDhgzhnnvuISUlha+++qrhe61bt25U92rChAkNE+JFREQk9P671lDjhws7N01fk3qwgqRly5Y8/PDDh1VANDs7m6uvvjoErRIREZEDeWWVy+C2Fh1bqgcr4o0YMeKw9rvllluauCUiIiJyMOV1himlht8NbLp+JvVgiYiISLPyxlpD7Z67B5uIApaIiIg0Ky+VuAxtZ5Gb3DTDg6CAJSIiIs3I9hrDe6WGi5ro7sE9FLBERESk2Xh9jcFvYEwTDg+CApaIiIg0Iy+tchmeZZGVpB4sERERkWO2pcrw0UbDJflNH39CFrDeffddBgwYQL9+/SgqKuKZZ54J1UuHTFZWFt98802jbaNGjWLmzJmHfJ4xhmHDhh1WDS0RERE5OhNXu9jAqLym7b2CEAUsYww//OEPefrpp/nyyy956623uOGGG9i1a1coXj4k1qxZQ3JyMq1b710kcfbs2ezcuZMhQ4Yc8rmWZXHrrbdy7733NnUzRUREmq2XSgzfz7FonRAjAWuPnTt3AoG1+jIyMoiPjw/lyzeJbdu2cfnll3PyySezbds2+vfvz/LlywF47LHHuPTSSxv2HTt2LHfddRcAa9eupbCwkE8//RSAc889l7fffjumQqeIiEikWF9h+HSL4eImnty+R0gquVuWxSuvvMKoUaNo0aIFO3bsYNKkScTFxR1w/4qKCsrLyxse19XVhaKZR2X06NFcccUVtGvXjpycHMrKyrjvvvv4z3/+w9SpUxutOXj//ffTp08fLrzwQi6//HL+/ve/c+KJJwLg9XopKipixowZnHHGGeE6HBERkZj0YolLggPnd2r63isIUcDy+Xw8+OCDvPHGGwwdOpQ5c+Zw/vnns2jRItLT0/fbf/jw4Y0eX3HFFY0eu3U1+Lasb9I2e9rlYsclHHKfzz//nB07dnDNNddw8sknc95557F582ZmzZoFQGlpKZmZmQ37Z2VlceONNzJ06FBefPFFvv/97zf6eZmZmZSWlh709crKyti+ffsxHFVkqC4LBOaysjLqkqrD3JrIsmPHjnA3QaJUJLyvdP5KJHt2RRKnZ7r4KnZxoCvpsZ6/384zIQlY8+fPZ+PGjQwdOhSA4447juzsbBYsWMApp5yy3/7Tpk2jb9++DY+XLl3Ks88+2/DYt2U9X//5J03a5ra3P0JcbpdD7vPFF18wYMAAXNdl/vz59OvXj/vuu4+BAwcCkJSURHV1Na1atQLgm2++4c033yQlJYXc3Nz9fl5NTQ2JiYkHfb3U1NQDBtJoU1FVDWwlNTWV5PSDH29zFQt/Ywm9SHlf6fyVSLR4u2FJmY8HBsWRnp500P2Cef6GJGDl5uZSWlrKihUrKCwspLi4mJKSErp27XrA/ZOTk0lJSWl4/O2hRE+7XNre/kiTttnTbv8A9G2pqaksX76c5cuXk52dzbp163j11VeZPn06AL179274XllZGWeddRZ33XUX1dXV3H777Xz88ceNft6yZcvo06dPkxyPiIhIc/VCsUt6PJyZG5rhQQhRwGrXrh2PPfYYY8aMwbZtjDE8+uijtG/f/qh+nh2X8J29S6EwZswYXn/9dU499VRqamq4+eabmThxIjk5OQ3fnzJlCscffzznnHMO119/PRdddBGu6/KXv/yFyZMnc/755wOBuxABioqKwnQ0IiIiscc1hheKXS7Is4lzYixgAVxyySVccskloXq5kEhMTGTSpEncfPPNFBUVceONNzb6/lVXXcWQIUO45557Gnq1AGzbZuHChY32nTBhQqMJ8SIiInLsPt1sWF8JlxaELlyBKrkHxZw5cxg0aNB+21u2bMnDDz98WAVEs7Ozufrqq5uieSIiIs3WC8WGDskwNDO0AStkPVixbM9dgwcyYsSIw/oZt9xyS7CaIyIiIkCd3/DqapcbutnYlnqwRERERI7ZlPWGHbVwaUHo444CloiIiMSkF4pd+qRDUXpoe69AAUtERERiUFmd4c11Jiy9V6CAJSIiIjFo0mpDnR8uyVfAOijHcYDIXpOwKVVVVQGB9QpFRETku71Q7DI8yyInOfTDgxAldxF26tSJhIQE7rvvPn77298edJHoWOPz+SgpKeGuu+6iZcuWB618LyIiInttrDR8tNHw+DAnbG2IioCVmprKG2+8wXnnnceUKVPC3ZyQO/nkk/noo4+Ij48Pd1NEREQi3kslLl4bxuSFp/cKoiRgAZx22mls3ryZNWvW4Pf7D7pfWVkZqampIWxZ07Ftm7Zt25KZmYltR8VoroiISNg9X+xyTgeLtHgFrMOSmpr6nYshb9++Xau5i4iINFPLdhi+3Aa/7hfejgl1i4iIiEjMeKHYJTUOzsoNX+8VKGCJiIhIjDDG8J8SlzF5FgkeBSwRERGRYzbza8PqXXBZmIqL7iv8LRAREREJgheKDTkt4KSs8PZegQKWiIiIxIB61/Byicsl+Ta2pYAlIiIicszeXW/YVkvY1h78tshohYiIiMgxeKHEpWcr6B0hlZoUsERERCSq7aozvLHGcFmBjRUBw4OggCUiIiJRbvJaQ7UfLsmPnFgTOS0REREROQrPr3QZlmnRsWVk9F6BApaIiIhEsc1Vhg82Gi4tiJxwBQpYIiIiEsVeXuXiWHBBXmRFmshqjYiIiMgReKHYcFauRXqCerBEREREjtmKnYY5W03E1L7aV+S1SEREROQwPP2VS6t4OLdDZPVegQKWiIiIRCGfa3jmK5cf5tskeBSwRERERI7Zu6WGzdVwTWFkRpnIbJWIiIjIITz9lUvvdOiXEe6WHJgCloiIiESVb2oMb641XN01cpbG+TYFLBEREYkqLxS7ABF59+AekdsyERERkW8xxvDUCpdzO1i0SYzM3itQwBIREZEo8uU2WLgdru4a2REmslsnIiIiso+nV7hkJsIZuZHbewUKWCIiIhIlanyGF0pcruhi47EVsERERESO2ZtrDTtq4eoIrX21r8hvoYiIiAiB2ldD2lp0S4vs3itQwBIREZEoUFpheG+DiYreK1DAEhERkSjw7EqXeBsu6hz5vVeggCUiIiIRzhjD01+5jMmzSIlTwBIRERE5ZjO2GIrLo2Ny+x7R01IRERFplp5a4dIpGYZnRUfvFShgiYiISASrqDe8siowud2O0IWdD0QBS0RERCLWxNWGKh9c2SW6Ikt0tVZERESaladWuHwv26Jjy+jpvQIFLBEREYlQxWWG6ZsN10TR5PY9oq/FIiIi0iz8+yuX1DgY2Sm6eq9AAUtEREQikN81/Huly8WdbRI90RewPKF4kZ07d3LyySc3PK6qqmLVqlV8/fXXpKenh6IJIiIiEkU+2GDYUAnXFEZfuIIQBay0tDTmz5/f8PhPf/oT06ZNU7gSERGRA3r6K5ceaXBcm+gMWGEZInz66acZO3ZsOF5aREREItz2GsPrawK1r6woqn21r5D0YO1r5syZbNu2jXPOOeeg+1RUVFBeXt7wOD4+nvj4+FA0T0RERMLsxRIXv4HLC6J3qnjIA9ZTTz3FFVdcgcdz8JcePnx4o8d33HEH48aNO6yfv2PHjmNqnzS96rI6AMrKyqhLqg5zayKLzl85WpHwvtL5K8Hyr6VJfD/TxVuzi+01oXnNYz1/vz3tKaQBq7KykpdffpnZs2cfcr9p06bRt2/fhsdH2oOluV2RraKqGthKamoqyemJ4W5OxNH5K0cjUt5XOn/lWM3daliw08e9x8WRnp4U0tcO5vkb0oD16quv0rt3b7p163bI/ZKTk0lJSQlRq0RERCRSPLbcT04LOLtDdM692iOkg5tPPvmkJreLiIjIAZXVGf5TbLium43Hju6AFdIerOnTp4fy5URERCSKvFDsUuOHsVG4NM63Rf8RiIiISNQzxjBhmcsPOlq0bxHdvVeggCUiIiIRYObXhkXb4cbusRFNYuMoREREJKpNWOrSuSWMaB/9vVeggCUiIiJhtq3G8Mpqww3dbewordz+bQpYIiIiElbPfOXiGri6a+zEktg5EhEREYk67u7J7WPyLNokxkbvFShgiYiISBh9vNGwsjx2JrfvEVtHIyIiIlFlwjKXHmkwLDN2eq9AAUtERETCZFOVYfIaw43dbawYmdy+hwKWiIiIhMVTK1y8NlzeJfbiSOwdkYiIiEQ8v2t4fLnLJfkWafGx1XsFClgiIiISBu+UGtZVwI09YjOKxOZRiYiISESbsMylf2sY2Dr2eq9AAUtERERCbO0uw//WGW7s7sTc5PY9FLBEREQkpJ5Y4ZLshUvyYzNcgQKWiIiIhFC9a3hiucvlXWySvQpYIiIiIsfsjTWGzdVwQ7fYjiCxfXQiIiISUSYsczmhnUXvjNjtvQIFLBEREQmRr3YaPtxoYm7dwQOJ/SMUERGRiPD4cpf0eLggL7Z7r0ABS0REREKgxmd4+iuXq7vaJHgUsERERESO2cTVhu21cH2MT27fo3kcpYiIiITVP5e5nJpt0TUt9nuvQAFLREREmtgXW10+22K4KUbXHTyQ5nOkIiIiEhZ/XezSKRnO69g8eq9AAUtERESa0KYqw8urDD/paePYClgiIiIix+yfS13ibLimsHlFjuZ1tCIiIhIyNT7DP5cFSjOkxTef3itQwBIREZEm8p8Swzc1cEtR84sbze+IRUREpMkZY/jrYj/ndLDoktq8eq9AAUtERESawNRNhoXb4afNsPcKFLBERESkCTy82KVnKzg1u/n1XoECloiIiARZSbnhv2sNPytysCwFLBEREZFj9sgSl/R4uLSgeYYrUMASERGRICqvMzy1wuWG7jaJHgUsERERkWP29Fcu1T6a1bqDB9K8j15ERESCxu8a/rbY5cLOFu1bNN/eK1DAEhERkSB5a51h1a7mW5phX/oNiIiISFD8dbHLkLYWg9oqXnjC3QARERGJfgu2GT7eZHj5e064mxIRFDFFRETkmP11sZ/cFjAqr3nPvdpDAUtERESOydfVhheKDTf3tPHYCliggCUiIiLH6LFlLh4bri1UrNhDvwkRERE5arV+w6NLXa7oYpOeoN6rPRSwRERE5Ki9ssqwuRpu6alIsS/9NkREROSoGGN4eLGfM3IsurdS79W+VKZBREREjsqMLYZ538A7Z6i/5ttC9hupra3l5ptvpkuXLvTs2ZPLLrssVC8tIiIiTeChRS7d0uC0HPVefVvIerDuvPNObNvmq6++wrIsNm3aFKqXFhERkSBbsdPw+hrDY8McLEsB69tCErAqKyt5+umnKS0tbfgjZGVlheKlRUREpAn8YYGfrCS4oovC1YGEZIiwpKSEjIwM7r//fgYOHMiwYcP48MMPD7p/RUUF5eXlDV+1tbWhaKaIiIgchnUVhudWGm7vZRPvKGAdSEh6sOrr61m1ahU9evTg97//PQsWLGDEiBEsXbqUNm3a7Lf/8OHDGz2+4447GDdu3GG91o4dO4LSZmk61WV1AJSVlVGXVB3m1kQWnb9ytCLhfaXzt/l4YH48Lb1exmSWsX17uFsTHMd6/qanpzd6HJKA1bFjR2zb5tJLLwWgT58+5OXlsWTJEk4++eT99p82bRp9+/ZteBwfH098fPxhv963D1IiS0VVNbCV1NRUktMTw92ciKPzV45GpLyvdP7Gvq3VhufW+Lijj02HtrH19w7m+RuSIcLWrVtz6qmn8u677wKwdu1aVq9eTWFh4QH3T05OJiUlpeHrSMKViIiINJ2/LXGxLfiJCoseUsjuIpwwYQLXXHMN48aNw3EcHn/8cU10FxERiSLldYZHlrjc0N0mQ8viHFLIAlbnzp2ZOnVqqF5OREREgmzCMpcqH9zWS71X30W/IREREflONT7DXxa5XNXVon0L9V59FwUsERER+U5Pf+WytQbu6O2EuylRQQFLREREDsnnGsYvcLkgz6IgVb1Xh0OLPYuIiMghvVRiWFMBk09T79XhUg+WiIiIHJRrDL9f4OesXIs+Geq9OlzqwRIREZGDemudYckOmHCi+mSOhH5bIiIickDGGH4332VYpsWJmYoMR0I9WCIiInJAUzcZZn1tePsMzb06UoqjIiIickC/m+/SNwPOyNHcqyOlHiwRERHZzxdbXT7YYHj5ew6WpYB1pNSDJSIiIvt5cL5LlxQYnadwdTTUgyUiIiKNLNthmLTG8K9hDo6tgHU01IMlIiIijfxhgZ/2LeDyLgpXR0sBS0RERBqs3WV4odhwey+beEcB62gpYImIiEiDPy10SYmD67opIhwL/fZEREQEgK+rDU+scPlpkU2yV71Xx0IBS0RERAB4eLGLx4abeygeHCv9BkVERISyOsM/lrjc0M0mPUG9V8dKAUtERER4dKlLjR9u66VoEAwHrYPl9/v53//+x/vvv8+sWbPYvHkz1dXVZGRkUFhYyLBhwxg9ejR5eXmhbK+IiIgEWbXP8PBil6u62mS3UO9VMOwXUysqKrjnnnvIzs5m9OjRTJ8+nR49enDhhRdyww03cOqpp1JfX8/48ePp0qULI0aMYMaMGeFou4iIiATB48tdvqmBX/RW71Ww7NeDlZeXR48ePfjDH/7AyJEjSU1NPeiTZ8+ezUsvvcQ555zDAw88wE033dSkjRUREZHgqqw3/G6+yxVdLApS1XsVLPsFrMmTJzN06NDDevKgQYMYNGgQ9957L2vXrg1640RERKRp/W2Jy45auLu/E+6mxJT9+gIPN1ztq2XLlhQVFQWlQSIiIhIaO2oN4xcE7hzs1FK9V8F0yMHWKVOmHPLJDz30UFAbIyIiIqHzp4UutX74VT/NvQq2Q/5Gzz77bG666SaqqqoabV+3bh2nnHIKd911V5M2TkRERJrGlqrAnYM/LbLJTFLvVbAdMmC98sorvPrqq/Tt25dZs2YB8O9//5tevXqxdetWZs6cGZJGioiISHD9br6Lx9Kdg03lkL/VMWPGsHDhQgoKChg2bBjHH3881157Lddeey1z586lX79+oWqniIiIBMm6CsOEZS6/6K2q7U3lO2NrVlYWN954I47jMHv2bHr37s0dd9xBfHx8KNonIiIiQXbfPD+pcfDTIvVeNZVD/mYrKyu57rrrGDlyJJdddhkffPABlZWVFBUVMXHixFC1UURERIJkxU7Dv78y/LKvTcs49V41lYMulQPQu3dvqqqqmDx5Mueeey4A8+fP5/bbb+fCCy/khz/8Ic8//3xIGioiIiLH7u65frKS4Mbu6r1qSof87fbp04dFixY1hCuAxMREHn30UaZMmcLUqVObun0iIiISJPO3GV5eZbi7v0OCR71XTemQPViTJk066PdOP/10Fi9eHPQGiYiISNP4zRd+ClLgyq4KV03tkAHru6SlpQWpGSIiItKUPtvi8tY6w39OcfDaClhNbb8hwoEDB/L666/juu5h/YB169Zx66238uc//znojRMREZFjZ4zhl3NceqXDRfkKV6GwXw/WVVddxU033cQNN9zA+eefz9ChQ+nVqxdt2rQhPj6enTt3snr1aubOncuUKVOYOXMm5513HjfffHM42i8iIiLf4YMNhmmbDG+e5mBbClihsF/Auvnmmxk7diwvvvgizz77LM888ww+n6/RPsYYsrKyGDNmDP/85z+10LOIiEiEMsbwqy9cjm9rcU4HhatQ2S9gjRo1ivHjx3PNNdfg8Xh4/vnnKS0tZdOmTdTU1JCenk5hYSGdOnUKQ3NFRETkSLyx1jBnq+HDsxws9V6FzH4B680332TcuHEUFBRw9dVXM3PmTI4//vhwtE1ERESOgd81/PoLP6dmW3yvvepehdJ+Aat9+/b897//pV27dhhj2Lx5M+vWrTvoD+jQoUOTNlBERESOzoslhiU74MmTFK5Cbb+A9bOf/Yzbb7+dBx98EMuyGDly5AGfaIzBsiz8fn+TN1JERESOTL1ruHuun/M6Wgxuq4AVavsFrFtvvZWzzjqLZcuWMWrUKH73u9/RpUuXcLRNREREjtJTK1xW74LJpznhbkqzdMBCo4WF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IiISCzTJXURERCTIFLBEREREgiwqA9bKlSs54YQT6Nq1K4MGDWLp0qUH3O/JJ5+kS5cu5Ofnc/311+Pz+ULcUpH9Hc75O3XqVJKSkujbt2/D1567bEXC6ZZbbqFTp05YlsXixYsPup8+fyUSHc75G6zP36gMWDfccAPXX389X331FXfccQdjx47db5/Vq1fzm9/8hk8//ZTi4mI2b97Mk08+GYbWijR2OOcvQI8ePZg/f37Dl278kEgwZswYPv30Uzp27HjQffT5K5HqcM5fCM7nb9QFrK+//pp58+Y1lHMYPXo0q1evZs2aNY32mzhxIiNHjqRdu3ZYlsWNN97Iiy++GIYWi+x1uOevSKQ66aSTyMnJOeQ++vyVSHU452+wRF3AWr9+PdnZ2Xg8gRqplmXRoUMH1q1b12i/devWNUqonTp12m8fkVA73PMXYMWKFfTv35/jjjuORx99NNRNFTlq+vyVaBeMz9+IquR+uCzLavT4YJUm9t1P1SgkUhzO+du/f39KS0tJTU2ltLSUs846i9atW3PhhReGqpkix0SfvxKtgvX5G3U9WLm5uZSWljZMmDTGsH79ejp06NBovw4dOjQadlm7du1++4iE2uGevykpKaSmpgKQk5PDJZdcwvTp00PeXpGjoc9fiWbB+vyNuoDVtm1b+vXrx/PPPw/Aa6+9RqdOnejUqVOj/UaPHs3rr7/Oli1bMMYwYcIELr744jC0WGSvwz1/N23ahOu6AOzatYu33nqLfv36hbq5IkdFn78SzYL2+Wui0PLly83xxx9vunTpYgYMGGAWL15sjDFm7Nix5o033mjY7/HHHzf5+fkmLy/PjB071tTV1YWrySINDuf8feSRR0yPHj1M7969TY8ePczdd99tXNcNZ7NFjDHG3HTTTaZ9+/bGcRzTrl07k5+fb4zR569Eh8M5f4P1+aulckRERESCLOqGCEVEREQinQKWiIiISJApYImIiIgEmQKWiIiISJApYImIiIgEmQKWiIiISJApYImIiIgEmQKWiIiISJApYImIiIgEmQKWiMSs8vJyOnbsyAUXXNBo+49//GNatWpFaWlpmFomIrFOAUtEYlZKSgr//ve/ee2113juuecAePfdd3n00Ud59NFHycnJCXMLRSRWaS1CEYl5t912G0899RRTp07l7LPPZtiwYbz00kvhbpaIxDAFLBGJeTU1NQwYMICSkhIyMjJYvHgxrVq1CnezRCSGaYhQRGJeQkICo0aNora2lksvvVThSkSanHqwRCTmLV68mIEDB9KjRw+WLVvG3Llz6dGjR7ibJSIxTAFLRGJaXV0dgwcPpkWLFnz00UeceOKJ+P1+Pv/8c7xeb7ibJyIxSkOEIhLT7r77blauXMkzzzxDXFwczz33HMuWLeO+++4Ld9NEJIYpYIlIzPrss88YP348f/7zn8nPzwegsLCQ8ePH8+CDDzJr1qwwt1BEYpWGCEVERESCTD1YIiIiIkGmgCUiIiISZApYIiIiIkGmgCUiIiISZApYIiIiIkGmgCUiIiISZP8PvzAqsVLhqfQAAAAASUVORK5CYII=" }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "plot(f,0,1.5,label=\"f(x)\", xlabel=\"x\", ylabel=\"f(x)\")\n", "plot!(ϕ,xf,label=L\"$\\phi(x)$\")\n", "scatter!([x0,x1],[f(x0),f(x1)],label=\"\")\n", "plot!([x0,x1], seriestype=\"vline\", label=\"\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "@webio": { "lastCommId": null, "lastKernelId": null }, "kernelspec": { "display_name": "Julia 1.5.3", "language": "julia", "name": "julia-1.5" }, "language_info": { "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", "version": "1.5.3" }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": {}, "toc_section_display": true, "toc_window_display": false }, "varInspector": { "cols": { "lenName": 16, "lenType": 16, "lenVar": 40 }, "kernels_config": { "python": { "delete_cmd_postfix": "", "delete_cmd_prefix": "del ", "library": "var_list.py", "varRefreshCmd": "print(var_dic_list())" }, "r": { "delete_cmd_postfix": ") ", "delete_cmd_prefix": "rm(", "library": "var_list.r", "varRefreshCmd": "cat(var_dic_list()) " } }, "types_to_exclude": [ "module", "function", "builtin_function_or_method", "instance", "_Feature" ], "window_display": false } }, "nbformat": 4, "nbformat_minor": 2 }