{ "cells": [ { "cell_type": "markdown", "source": [ "# Métodos numéricos para solução de equações não lineares\n", "\n", "Escrevemos em XXX o resumo dos algoritmos de alguns métodos para solução de equações não lineares, e não são os únicos. Modificações desses métodos, em especial do Método de Newton são constantemente sugeridas para melhorar a\n", "convergência. Fica claro que muitos sistemas no mundo real são não lineares. Uma aplicação comum é resolver problemas de otimização. Por exemplo, quando queremos maximizar em conjuntos abertos, se conseguirmos provar algumas condições, podemos assegurar que o máximo se encontra quando $f'(x) = 0$. Logo, o problema de otimização se resume a um problema de encontrar raízes. " ], "metadata": {} }, { "cell_type": "code", "execution_count": 1, "source": [ "import numpy as np\n", "import scipy.optimize as scop\n", "import matplotlib.pyplot as plt\n", "\n", "%matplotlib inline" ], "outputs": [], "metadata": {} }, { "cell_type": "markdown", "source": [ "Um jogador A ganha com placar (21-0) do jogador B em um jogo de [raquetebol](https://pt.wikipedia.org/wiki/Raquetebol) com [probabilidade](https://dokumen.tips/documents/probability-of-a-shutout-in-racquetball-58dea76bc2677.html). \n", "\n", "$$\n", "P = \\frac{p+1}{2}\\left(\\frac{p}{1-p+p^2}\\right)^{21},\n", "$$\n", "\n", "em que $p$ é a probabilidade de $A$ ganhar um rally qualquer. Qual o valor de $p$ que assegura que $A$ vencerá com esse placar em pelo menos metade dos jogos? Esse é um problema real proposto por Ralph Levine para Joseph Keller." ], "metadata": {} }, { "cell_type": "code", "execution_count": 2, "source": [ "def P(p):\n", " return (p+1)/2 * (p/(1 + p**2-p))**(21)" ], "outputs": [], "metadata": {} }, { "cell_type": "code", "execution_count": 3, "source": [ "p_values = np.linspace(0, 1, 50)\n", "P_values = P(p_values)\n", "plt.plot(p_values, P_values, color='r')\n", "plt.axhline(0.5, linestyle = '--', color = 'darkblue')\n", "plt.title('Probabilidade de 21-0 para cada p')\n", "plt.text(0.7, 0.55, '$P = 0.5$', fontsize=12)\n", "plt.xlabel('$p$')\n", "plt.ylabel('$P$')\n", "plt.show()" ], "outputs": [ { "output_type": "display_data", "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" } } ], "metadata": {} }, { "cell_type": "markdown", "source": [ "Vamos explorar métodos de resolver a equação $P(p) = 0.5$ para $p$, isto é, $P(p) - 0.5 = 0$, através do método do Ponto Fixo e do Método de Newton. \n", "\n", "## Iteração de Ponto Fixo\n", "\n", "Temos que \n", "\n", "$$\n", "f(p) = 0.5 - \\frac{p+1}{2}\\left(\\frac{p}{1-p+p^2}\\right)^{21} + p = p,\n", "$$\n", "\n", "é a função que admite o ponto fixo que queremos. Um ponto importante seria provar as condições de funcionamento do método. Porém, não é difícil ver que $f([0,1]) \\not \\subseteq [0,1]$, o que já quebra nosso teorema." ], "metadata": {} }, { "cell_type": "code", "execution_count": 4, "source": [ "def f(p): \n", " return 0.5 - P(p) + p\n", "\n", "def fixed_point(x0, tol = 1e-5, max_ite = 1e4): \n", " \n", " x1 = f(x0)\n", " err = [abs(x1 - x0)]\n", " sols = [x0, x1]\n", " \n", " while err[-1] > tol and len(err) <= max_ite: \n", " \n", " sols.append(f(sols[-1]))\n", " err.append(abs(sols[-1] - sols[-2]))\n", " \n", " return {'sol': sols, 'errors': err}\n", "\n", "print(f(0.7))" ], "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "1.1329638832103943\n" ] } ], "metadata": {} }, { "cell_type": "markdown", "source": [ "Bom, mas vamos supor que mesmo assim quiséssemos usar esse método." ], "metadata": {} }, { "cell_type": "code", "execution_count": 5, "source": [ "res = fixed_point(0.7)\n", "plt.scatter(range(len(res['sol'])), res['sol'])" ], "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "" ] }, "metadata": {}, "execution_count": 5 }, { "output_type": "display_data", "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAD4CAYAAAD8Zh1EAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAVHUlEQVR4nO3df5Bd5X3f8ffXyypZEuyFohC0ki3coXKUEFtmB0HTHzQukbDjoMbpDEo9TjzJMLShjdPptlLNjE3rTN0qzdStPVEUl9KUVDgGdS0cpYrHdepMamRWEbIQsLYMNtqVA+ti2RS21Wr17R/3rHK1umf3rrjS3XPu+zWzo3uec+6530eCz5x97nPOE5mJJKn6XtftAiRJnWGgS1JNGOiSVBMGuiTVhIEuSTVxWbc++Oqrr861a9d26+MlqZIOHjz47cxc2Wpf1wJ97dq1jI2NdevjJamSIuKbZfsccpGkmjDQJakmDHRJqgkDXZJqwkCXpJro2iyXC3Xv6BF2HzjObCZ9EWzduIaPbLmh22VJUtdVKtD/3u98iT/9+ktnt2czefCx5wEMdUk9rzJDLqOHJs8J82a7Dxy/xNVI0vJTmUDfsX+8dN+sz3SXpOoE+omT06X7+iIuYSWStDxVJtBXDQ6U7tu6cc0lrESSlqfKBPrIpnUM9Ped1/4Tf/kqvxCVJCoU6Fs2DPGvfvYGBgf6z7ZdeXk/f3f4jV2sSpKWj8oE+pxXTp0++/o7r84w8vBhRg9NdrEiSVoeKhXo9z16lJnZc2e0zMwm9z16tEsVSdLyUalA/86rM0tql6ResmigR8T9EfFiRDxZsv8tEfGliPh/EfFPOl+iJKkd7VyhPwBsXmD/S8A/An6jEwVJki7MooGemV+kEdpl+1/MzMcBxz0kqYsu6Rh6RNwVEWMRMTY1NXUpP1qSau+SBnpm7srM4cwcXrmy5aLVC7ry8v4ltUtSL6nULJd3/fi1S2qXpF5SqUD/wjOth2nK2iWplyy6wEVE7AZuBa6OiAngQ0A/QGbujIgfBsaA1wNnIuIDwPrM/F6ni50seeJiWbsk9ZJFAz0zty6y/8+B1R2raAF9ES2ffe7jcyWpYkMuZQtZuMCFJFUs0IdKnole1i5JvaRSgT6yaR19rzt3eKXvdcHIpnVdqkiSlo9KBfrYN19i9sy5wyuzZ5Kxb5beyCpJPaNSgb77wPEltUtSL6lUoPulqCSVq1Sgl01OdNKiJFUs0C9fcf4i0Qu1S1IvqVSgv3pqdkntktRLKhXogyVPVSxrl6ReUqlAL/vu0+9EJaligf7d6daLIpW1S1IvqVSgryq5xb+sXZJ6SaUCfWTTOgb6z53RMtDf563/kkQbj89dTrZsGAJgx/5xTpycZtXgACOb1p1tl6ReVqlAh0aoG+CSdL7KBfq9o0fYfeA4s5n0RbB14xo+suWGbpclSV1XqTH0e0eP8OBjz599dstsJg8+9jy3/eYfd7cwSVoGKhXoZU9V/NqLr3Dv6JFLXI0kLS+VCvSFnqr4e489fwkrkaTlp1KBvtBi0N4sKqnXVSrQt25c0+0SJGnZilzkQSgRcT/w08CLmfljLfYH8DHgncCrwC9m5p8t9sHDw8M5Nja25ILXbvuDJb9Hkpaja65YwYEP3rak90TEwcwcbrWvnSv0B4DNC+y/Hbi++LkL+K0lVSdJPeqFl0+x8dc/17HzLRromflFYKFVmO8AfjcbHgMGI+LaThUoSXX2wsunOnauToyhDwHN8wknirbzRMRdETEWEWNTU1Md+GhJ0pxOBHqrqSctB+Yzc1dmDmfm8MqVKzvw0ZKkOZ0I9AmgefrJauBEB84rSbV3zRUrOnauTgT6XuB90XAz8N3M/FYHztvSNz76rot1akm6pC5klstCFn04V0TsBm4Fro6ICeBDQD9AZu4E9tGYsniMxrTF93esuhKGuiSdb9FAz8yti+xP4Fc6VpEk6YJU6k5RSVI5A12SasJAl6SaMNAlqSYMdEmqCQNdkmrCQJekmjDQJakmDHRJqgkDXZJqwkCXpJow0CWpJgx0SaoJA12SasJAl6SaMNAlqSYMdEmqCQNdkmrCQJekmjDQJakmDHRJqgkDXZJqoq1Aj4jNETEeEcciYluL/VdGxH+LiK9ExJcj4sc6X6okaSGLBnpE9AGfAG4H1gNbI2L9vMP+OfBEZv448D7gY50uVJK0sHau0G8CjmXms5l5CngIuGPeMeuBzwNk5jPA2oi4pqOVSpIW1E6gDwHHm7YnirZmh4GfBYiIm4A3Aavnnygi7oqIsYgYm5qaurCKJUkttRPo0aIt521/FLgyIp4A/iFwCDh93psyd2XmcGYOr1y5cqm1SpIWcFkbx0wAa5q2VwMnmg/IzO8B7weIiACeK34kSZdIO1fojwPXR8R1EbECuBPY23xARAwW+wB+GfhiEfKSpEtk0Sv0zDwdEfcA+4E+4P7MPBoRdxf7dwI/AvxuRMwCTwG/dBFrliS10M6QC5m5D9g3r21n0+svAdd3tjRJ0lK0FejLyeihSXbsH+fEyWlWDQ4wsmkdWzbMn3QjSb2nUoE+emiSkYcPMzPbmGQzeXKakYcPAxjqknpepZ7lct+jR8+G+ZyZ2eS+R492qSJJWj4qFejfeXVmSe2S1EsqE+ijhya7XYIkLWuVCfQd+8dL9w0O9F/CSiRpeapMoJ84OV2678M/86OXsBJJWp4qE+irBgdatg8O9DvDRZKoUKCPbFrHQH/fOW0D/X1enUtSoTLz0Oeuwr2pSJJaq0ygQyPUDXBJaq0yQy6SpIUZ6JJUEwa6JNWEgS5JNWGgS1JNGOiSVBMGuiTVhIEuSTVhoEtSTRjoklQTBrok1URbgR4RmyNiPCKORcS2FvvfEBGPRsThiDgaEe/vfKmSpIUsGugR0Qd8ArgdWA9sjYj18w77FeCpzHwrcCvwbyNiRYdrlSQtoJ0r9JuAY5n5bGaeAh4C7ph3TAJXREQAPwi8BJzuaKWSpAW1E+hDwPGm7YmirdnHgR8BTgBHgF/NzDMdqVCS1JZ2Aj1atOW87U3AE8Aq4G3AxyPi9eedKOKuiBiLiLGpqakllipJWkg7gT4BrGnaXk3jSrzZ+4E92XAMeA54y/wTZeauzBzOzOGVK1deaM2SpBbaWbHoceD6iLgOmATuBH5+3jHPA+8A/iQirgHWAc92stA5o4cmXYZOklpYNNAz83RE3APsB/qA+zPzaETcXezfCfxL4IGIOEJjiOafZea3O13s6KFJtu85wvTMLACTJ6fZvucIgKEuqee1taZoZu4D9s1r29n0+gTwU50t7Xw79o+fDfM50zOz7Ng/bqBL6nmVulP0xMnpJbVLUi+pVKAPXt6/pHZJ6iWVCvT/O2+4ZbF2SeollQr06ZnW9yqVtUtSL6lUoEuSylUq0F/X6p7VBdolqZdUKtDPzH/gwCLtktRLKhXoQ4MDS2qXpF5SqUD/W29p/fyXsnZJ6iWVCvQvPNP6CY1l7ZLUSyoV6N4pKknlKhXobxhofUdoWbsk9ZJKBfrMbOsbiMraJamXVCrQXznV+hb/snZJ6iWVCnRJUrlKBXqU3BFa1i5JvaRSgZ4ld4SWtUtSL6lUoHunqCSVq1Sgj2xax0B/3zltA/19jGxa16WKJGn5aGtN0eVibt3QHfvHOXFymlWDA4xsWud6opJExQIdGqFugEvS+So15CJJKtdWoEfE5ogYj4hjEbGtxf6RiHii+HkyImYj4qrOlytJKrPokEtE9AGfAG4DJoDHI2JvZj41d0xm7gB2FMe/G/i1zHyp08WOHpp0/FySSrRzhX4TcCwzn83MU8BDwB0LHL8V2N2J4pqNHppk+54jTJ6cJoHJk9Ns33OE0UOTnf4oSaqkdgJ9CDjetD1RtJ0nIi4HNgOPvPbSzrVj/zjTM+c+s2V6ZpYd+8c7/VGSVEntBHqrG+vL7s18N/CnZcMtEXFXRIxFxNjU1NIWpSh75vmkz0KXJKC9QJ8A1jRtrwZOlBx7JwsMt2TmrswczszhlSuXtmzcqpK7QQMcdpEk2gv0x4HrI+K6iFhBI7T3zj8oIt4A/E3gM50tsWFk07rSXxUcdpGkNgI9M08D9wD7gaeB38/MoxFxd0Tc3XTo3wH+KDNfuRiFbtkwVDrO4xJ0ktTmnaKZuQ/YN69t57ztB4AHOlVYK0ODAy3HzMuGYySpl1TqTlEfziVJ5SoV6Fs2DPGeG4foK1a06IvgPTf6bBdJgooF+uihSR45OMlssaLFbCaPHJx0loskUbFA9+YiSSpXqUAvm83iLBdJqligl81mcZaLJFUs0J3lIknlKrVikUvQSVK5SgU6uASdJJWp1JCLJKmcgS5JNWGgS1JNGOiSVBMGuiTVhIEuSTVhoEtSTRjoklQTlbux6N7RI+w+cJzZTPoi2LpxDR/ZckO3y5KkrqtUoN87eoQHH3v+7PZs5tltQ11Sr6vUkMvuA8eX1C5JvaRSgT63UlG77ZLUSyoV6HNribbbLkm9pFKBvnXjmiW1S1IvaSvQI2JzRIxHxLGI2FZyzK0R8UREHI2I/9nZMhs+suUG3nvzG89ekfdF8N6b3+gXopIERC4y/hwRfcBXgduACeBxYGtmPtV0zCDwv4DNmfl8RPxQZr640HmHh4dzbGzsNZYvSb0lIg5m5nCrfe1cod8EHMvMZzPzFPAQcMe8Y34e2JOZzwMsFuaSpM5rJ9CHgOZ5gRNFW7O/AlwZEX8cEQcj4n2tThQRd0XEWESMTU1NXVjFkqSW2rmxqNUUkvnjNJcBNwLvAAaAL0XEY5n51XPelLkL2AWNIZellwujhyZdU1SSWmgn0CeA5mkkq4ETLY75dma+ArwSEV8E3kpj7L1jRg9Nsn3PEaZnZgGYPDnN9j1HAAx1ST2vnSGXx4HrI+K6iFgB3AnsnXfMZ4C/HhGXRcTlwEbg6c6WCjv2j58N8znTM7Ps2D/e6Y+SpMpZ9Ao9M09HxD3AfqAPuD8zj0bE3cX+nZn5dET8d+ArwBngk5n5ZKeLPXFyekntktRL2no4V2buA/bNa9s5b3sHsKNzpZ1v1eAAky3Ce9XgwMX8WEmqhErdKTqyaR0D/X3ntA309zGyaV2XKpKk5aNSgb5lwxDvuXHonDtF33PjkF+IShIVC/TRQ5M8cnDy7NMVZzN55OAko4cmu1yZJHVfpQLdWS6SVK5Sge4sF0kqV6lAL5vN4iwXSapYoDvLRZLKVWqR6LnZLD7LRZLOV6lAh0aoG+CSdL5KDblIksoZ6JJUEwa6JNWEgS5JNWGgS1JNGOiSVBOVm7bomqKS1FqlAn300CQjnz7MzJnG0xYnT04z8unDgGuKSlKlhlw+vPfo2TCfM3Mm2b7nK12qSJKWj0oF+snpmZbt0zNnfCa6pJ5XqUBfyIf3Hu12CZLUVZUK9Csv7y/dV3b1Lkm9olKB/qF3/2i3S5CkZautWS4RsRn4GNAHfDIzPzpv/63AZ4DniqY9mfkvOldmw5YNQ3zgU0+U7l+77Q86/ZGSdNFcc8UKDnzwto6db9Er9IjoAz4B3A6sB7ZGxPoWh/5JZr6t+Ol4mEtS3bzw8ik2/vrnOna+doZcbgKOZeazmXkKeAi4o2MVSFIPe+HlUx07VzuBPgQcb9qeKNrmuyUiDkfEH0ZEy8HuiLgrIsYiYmxqauoCypUklWkn0KNFW87b/jPgTZn5VuA/AKOtTpSZuzJzODOHV65cuaRCJUkLayfQJ4A1TdurgRPNB2Tm9zLz/xSv9wH9EXF1x6qUpJq65ooVHTtXO4H+OHB9RFwXESuAO4G9zQdExA9HRBSvbyrO+787VmWTb3z0XRfjtJJ0yXV6lsui0xYz83RE3APspzFt8f7MPBoRdxf7dwI/B/z9iDgNTAN3Zub8YZmOMdQl6XxxEXN3QcPDwzk2NtaVz5akqoqIg5k53Gpfpe4UlSSVM9AlqSYMdEmqCQNdkmqia1+KRsQU8M0LfPvVwLc7WE4V2OfeYJ97w2vp85sys+WdmV0L9NciIsbKvuWtK/vcG+xzb7hYfXbIRZJqwkCXpJqoaqDv6nYBXWCfe4N97g0Xpc+VHEOXJJ2vqlfokqR5DHRJqonKBXpEbI6I8Yg4FhHbul3PhYqINRHxhYh4OiKORsSvFu1XRcTnIuJrxZ9XNr1ne9Hv8YjY1NR+Y0QcKfb9+7lHGS9XEdEXEYci4rPFdq37HBGDEfFwRDxT/Hvf0gN9/rXiv+snI2J3RHx/3focEfdHxIsR8WRTW8f6GBHfFxGfKtoPRMTaRYvKzMr80Hh879eBNwMrgMPA+m7XdYF9uRZ4e/H6CuCrNBbh/jfAtqJ9G/Cvi9fri/5+H3Bd8ffQV+z7MnALjdWl/hC4vdv9W6Tv/xj4r8Bni+1a9xn4z8AvF69XAIN17jONJSqfAwaK7d8HfrFufQb+BvB24Mmmto71EfgHwM7i9Z3Apxatqdt/KUv8C7wF2N+0vR3Y3u26OtS3zwC3AePAtUXbtcB4q77SeD79LcUxzzS1bwV+u9v9WaCfq4HPAz/JXwR6bfsMvL4It5jXXuc+z61DfBWNNRc+C/xUHfsMrJ0X6B3r49wxxevLaNxZGgvVU7Uhl3YXrK6U4lepDcAB4JrM/BZA8ecPFYeV9X2oeD2/fbn6d8A/Bc40tdW5z28GpoD/VAwzfTIifoAa9zkzJ4HfAJ4HvgV8NzP/iBr3uUkn+3j2PZl5Gvgu8JcW+vCqBXo7C1ZXSkT8IPAI8IHM/N5Ch7ZoywXal52I+Gngxcw82O5bWrRVqs80rqzeDvxWZm4AXqHxq3iZyve5GDe+g8bQwirgByLivQu9pUVbpfrchgvp45L7X7VAX3TB6iqJiH4aYf57mbmnaH4hIq4t9l8LvFi0l/V9ong9v305+gngZyLiG8BDwE9GxIPUu88TwERmHii2H6YR8HXu898GnsvMqcycAfYAf5V693lOJ/t49j0RcRnwBuClhT68aoG+6ILVVVF8k/0fgacz8zebdu0FfqF4/Qs0xtbn2u8svvm+Drge+HLxa93LEXFzcc73Nb1nWcnM7Zm5OjPX0vi3+x+Z+V7q3ec/B45HxLqi6R3AU9S4zzSGWm6OiMuLWt8BPE29+zynk31sPtfP0fj/ZeHfULr9pcIFfAnxThozQr4OfLDb9byGfvw1Gr8+fQV4ovh5J40xss8DXyv+vKrpPR8s+j1O07f9wDDwZLHv4yzyxcly+AFu5S++FK11n4G3AWPFv/UocGUP9Pk+4Jmi3v9CY3ZHrfoM7KbxHcEMjavpX+pkH4HvBz4NHKMxE+bNi9Xkrf+SVBNVG3KRJJUw0CWpJgx0SaoJA12SasJAl6SaMNAlqSYMdEmqif8PlOalrrS2820AAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" } } ], "metadata": {} }, { "cell_type": "markdown", "source": [ "Ele não converge! Mas a gente já devia ter ficado desconfiado, pois justamente as condições do Teorema não functionavam. Em particular, é fácil ver que ele não é nem não expansivo. Usando Scipy:" ], "metadata": {} }, { "cell_type": "code", "execution_count": 6, "source": [ "scop.fixed_point(func = f, x0 = 0.81, method = 'iteration')" ], "outputs": [ { "output_type": "error", "ename": "RuntimeError", "evalue": "Failed to converge after 500 iterations, value is 0.4998542288112865", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mRuntimeError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mscop\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfixed_point\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfunc\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx0\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m0.81\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmethod\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'iteration'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;32m~/anaconda3/lib/python3.7/site-packages/scipy/optimize/minpack.py\u001b[0m in \u001b[0;36mfixed_point\u001b[0;34m(func, x0, args, xtol, maxiter, method)\u001b[0m\n\u001b[1;32m 935\u001b[0m \u001b[0muse_accel\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m{\u001b[0m\u001b[0;34m'del2'\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'iteration'\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mFalse\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mmethod\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 936\u001b[0m \u001b[0mx0\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_asarray_validated\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mas_inexact\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 937\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0m_fixed_point_helper\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfunc\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mxtol\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmaxiter\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0muse_accel\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;32m~/anaconda3/lib/python3.7/site-packages/scipy/optimize/minpack.py\u001b[0m in \u001b[0;36m_fixed_point_helper\u001b[0;34m(func, x0, args, xtol, maxiter, use_accel)\u001b[0m\n\u001b[1;32m 889\u001b[0m \u001b[0mp0\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mp\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 890\u001b[0m \u001b[0mmsg\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m\"Failed to converge after %d iterations, value is %s\"\u001b[0m \u001b[0;34m%\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mmaxiter\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mp\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 891\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mRuntimeError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmsg\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 892\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 893\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mRuntimeError\u001b[0m: Failed to converge after 500 iterations, value is 0.4998542288112865" ] } ], "metadata": {} }, { "cell_type": "markdown", "source": [ "Existe uma variação desse dado pelo método Steffensen com Aitken's $\\Delta^2$, que constrói uma sequência com onvergência mais rápida, a partir da inicial. " ], "metadata": {} }, { "cell_type": "code", "execution_count": 7, "source": [ "%timeit scop.fixed_point(func = f, x0 = 0.3, method = 'del2')" ], "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "1.08 ms ± 120 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n" ] } ], "metadata": {} }, { "cell_type": "code", "execution_count": 8, "source": [ "scop.fixed_point(func = f, x0 = 0.3, method = 'del2')" ], "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "array(0.84230479)" ] }, "metadata": {}, "execution_count": 8 } ], "metadata": {} }, { "cell_type": "code", "execution_count": 9, "source": [ "%timeit scop.fixed_point(func = f, x0 = 0.8, method = 'del2')" ], "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "1.21 ms ± 165 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n" ] } ], "metadata": {} }, { "cell_type": "code", "execution_count": 10, "source": [ "scop.fixed_point(func = f, x0 = 0.8, method = 'del2')" ], "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "array(0.84230479)" ] }, "metadata": {}, "execution_count": 10 } ], "metadata": {} }, { "cell_type": "markdown", "source": [ "Olhe o que acontece com $x_0 = 0.1$. " ], "metadata": {} }, { "cell_type": "code", "execution_count": 11, "source": [ "scop.fixed_point(func = f, x0 = 0.1, method = 'del2')" ], "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "array(-3.51843721e+13)" ] }, "metadata": {}, "execution_count": 11 } ], "metadata": {} }, { "cell_type": "markdown", "source": [ "## Método de Newton \n", "\n", "Agora vamos usar informação da derivada de $P$ para nos ajudar com o problema de encontrar a raíz de $P(p) - 0.5 = 0$. Note que $P(0) < 0.5$ e $P(1) > 0.5$. }Para nos ajudar com as contas, vamos considerar a versão com log, isto é, $\\log(P(p)) = - \\log(2)$. Assim, \n", "\n", "$$ \n", "\\log(p+1) - \\log(2) + 21(\\log(p) - \\log(1 - p + p^2)) = -\\log(2), \n", "$$\n", "\n", "o que simplica para $g(p) = \\log(p+1) + 21(\\log(p) - \\log(1 - p + p^2)) = 0$. Aí temos que \n", "\n", "$$\n", "g'(p) = \\frac{1}{p+1} + \\frac{21}{p} - \\frac{21}{1 - p + p^2}(2p - 1)\n", "$$" ], "metadata": {} }, { "cell_type": "code", "execution_count": 12, "source": [ "def g(p): \n", " return np.log(p+1) + 21*(np.log(p) - np.log1p(p**2 - p))\n", "\n", "def g_prime(p): \n", " return 1 / (p+1) + 21 / p - 21 * (2*p - 1) / (1 - p + p**2)" ], "outputs": [], "metadata": {} }, { "cell_type": "markdown", "source": [ "Podemos provar analiticamente que a derivada é estritamente positiva, mas faremos a observação numérica através do seguinte gráfico. " ], "metadata": {} }, { "cell_type": "code", "execution_count": 13, "source": [ "g_values = g_prime(p_values[1:])\n", "plt.plot(p_values[1:], g_values, color='r')\n", "plt.title('Derivada da função derivada')\n", "plt.xlabel('$p$')\n", "plt.ylabel(\"$g\\'(p)$\")\n", "plt.show()" ], "outputs": [ { "output_type": "display_data", "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" } } ], "metadata": {} }, { "cell_type": "markdown", "source": [ "Aplicando o método de newton através do Scipy. Observe que o seu tempo deu bem menor que o anterior, mesmo com um valor de $x_0$ bem distante. " ], "metadata": {} }, { "cell_type": "code", "execution_count": 14, "source": [ "%timeit scop.newton(func = g, x0 = 0.1, fprime = g_prime)" ], "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "836 µs ± 117 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n" ] } ], "metadata": {} }, { "cell_type": "code", "execution_count": 15, "source": [ "scop.newton(func = g, x0 = 0.1, fprime = g_prime)" ], "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "0.8423047910355657" ] }, "metadata": {}, "execution_count": 15 } ], "metadata": {} }, { "cell_type": "markdown", "source": [ "Observe o método da Secante, um método que também usa a ideia de tangente, mas sem consultar a derivada. " ], "metadata": {} }, { "cell_type": "code", "execution_count": 16, "source": [ "%timeit scop.newton(func = g, x0 = 0.1)" ], "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "631 µs ± 111 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n" ] } ], "metadata": {} }, { "cell_type": "code", "execution_count": 17, "source": [ "scop.newton(func = g, x0 = 0.1)" ], "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "0.8423047910355633" ] }, "metadata": {}, "execution_count": 17 } ], "metadata": {} }, { "cell_type": "markdown", "source": [ "### Exemplo adicional \n", "\n", "Nesse exemplo, a ideia é verificar que Newton pode dar errado. Considere: \n", "\n", "$$\n", "f(x) = x\\sin(\\pi x) - \\exp(-x)\n", "$$" ], "metadata": {} }, { "cell_type": "code", "execution_count": 18, "source": [ "f = lambda x: x * np.sin(np.pi * x) - np.exp(-x)" ], "outputs": [], "metadata": {} }, { "cell_type": "code", "execution_count": 19, "source": [ "x = np.linspace(-1, 2, 100)\n", "y = f(x)\n", "\n", "fig, ax = plt.subplots()\n", "ax.plot(x, y, color='r',zorder=0)\n", "xs = [0.57, 0.83, -0.27]\n", "texts = ['raiz$_1$', 'raiz$_2$', 'mínimo local']\n", "for i in range(len(xs)):\n", " ax.scatter([xs[i]], [f(xs[i])],marker='x',s=60)\n", " ax.text(xs[i]+0.05, f(xs[i])-0.1, texts[i])\n", "ax.plot(x,np.zeros_like(x),color='gray',ls='-.',alpha=0.75)\n", "ax.set_xlabel('$x$')\n", "ax.set_ylabel('$f(x)$')\n", "plt.title('$f(x)= x sin(\\pi x) - exp(-x)$')\n", "plt.show()" ], "outputs": [ { "output_type": "display_data", "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" } } ], "metadata": {} }, { "cell_type": "code", "execution_count": 20, "source": [ "xspace = np.linspace(-0.7, 0.7, 15)\n", "\n", "for x in xspace:\n", " print('Com x_0 = {0:5.2f}, a raíz é {1:5.2f}'.format(x, scop.newton(f,x)))" ], "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Com x_0 = -0.70, a raíz é 2.02\n", "Com x_0 = -0.60, a raíz é 0.58\n", "Com x_0 = -0.50, a raíz é 1.27\n", "Com x_0 = -0.40, a raíz é 0.82\n", "Com x_0 = -0.30, a raíz é -0.30\n", "Com x_0 = -0.20, a raíz é 0.82\n", "Com x_0 = -0.10, a raíz é 2.02\n", "Com x_0 = 0.00, a raíz é 0.82\n", "Com x_0 = 0.10, a raíz é 0.58\n", "Com x_0 = 0.20, a raíz é 0.58\n", "Com x_0 = 0.30, a raíz é 0.58\n", "Com x_0 = 0.40, a raíz é 0.58\n", "Com x_0 = 0.50, a raíz é 0.58\n", "Com x_0 = 0.60, a raíz é 0.58\n", "Com x_0 = 0.70, a raíz é 0.58\n" ] } ], "metadata": {} }, { "cell_type": "markdown", "source": [ "### Um outro exemplo \n", "\n", "Vamos comparar os métodos agora com a função $f(x) = x - \\cos(x)$. Para o\n", "método do ponto fixo, vamos utilizar a função $g(x) = \\cos(x)$, naturalmente.\n", "Note que $g([0,1]) \\subseteq [0,1]$ e $|g'([0,1])| \\subseteq [0,0.9]$, isto é,\n", "temos que as hipóteses para a iteração do ponto fixo são válidas. " ], "metadata": {} }, { "cell_type": "code", "execution_count": 51, "source": [ "def f(x, info):\n", " res = x - np.cos(x)\n", " if info['print']: \n", " info['iter_x'].append(x)\n", " info['iter_res'].append(res)\n", " return res\n", "\n", "def g(x, info):\n", " res = np.cos(x)\n", " if info['print']: \n", " info['iter_x'].append(x)\n", " info['iter_res'].append(res)\n", " return res" ], "outputs": [], "metadata": {} }, { "cell_type": "code", "execution_count": 38, "source": [ "x = np.linspace(0, 1, 100)\n", "y = f(x, {'iter_x': [], 'iter_res': [], 'print': False})\n", "\n", "fig, ax = plt.subplots()\n", "ax.plot(x, y, color='r', zorder=0)\n", "ax.axhline(0, color = 'k', linestyle = '-.')\n", "ax.set_title('$f(x)= x - cos(x)$')\n", "plt.show()" ], "outputs": [ { "output_type": "display_data", "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" } } ], "metadata": {} }, { "cell_type": "code", "execution_count": 61, "source": [ "info_newton = {'iter_x': [], 'iter_res': [], 'print': True}\n", "info_secant = {'iter_x': [], 'iter_res': [], 'print': True}\n", "info_bisect = {'iter_x': [], 'iter_res': [], 'print': True}\n", "info_fixed = {'iter_x': [], 'iter_res': [], 'print': True}\n", "\n", "newton = scop.newton(func = f, \n", " x0 = 0.5, \n", " fprime = lambda x, info: 1 + np.sin(x), \n", " tol = 1e-10, \n", " maxiter = 200, \n", " args = (info_newton,))\n", "\n", "secant = scop.newton(func = f, \n", " x0 = 0.5, \n", " tol = 1e-10, \n", " maxiter = 200, \n", " args = (info_secant,))\n", "\n", "bisect = scop.bisect(f = f, \n", " a = 0,\n", " b = 1,\n", " xtol = 1e-10, \n", " maxiter = 200, \n", " args = (info_bisect,))\n", "\n", "fixed_point = scop.fixed_point(func = g, \n", " x0 =0.5, \n", " xtol = 1e-10, \n", " bisectmethod = 'iteration', \n", " maxiter = 200, \n", " args = (info_fixed,))" ], "outputs": [], "metadata": {} }, { "cell_type": "code", "execution_count": 65, "source": [ "plt.plot(info_bisect['iter_x'], label = 'bisect: {}'.format(len(info_bisect['iter_x'])))\n", "plt.plot(info_newton['iter_x'], label = 'newton: {}'.format(len(info_newton['iter_x'])))\n", "plt.plot(np.array(info_fixed['iter_x']), label = 'fixed point: {}'.format(len(info_fixed['iter_x'])))\n", "plt.plot(info_secant['iter_x'], label = 'secant: {}'.format(len(info_secant['iter_x'])))\n", "plt.legend()\n", "plt.title('Comparando alguns métodos')\n", "plt.xscale('log')\n", "plt.show()" ], "outputs": [ { "output_type": "display_data", "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" } } ], "metadata": {} } ], "metadata": { "interpreter": { "hash": "b71f14f28ae4ddaac4ba9d1ac64a825af8fd98afb80045800581782b533a026d" }, "kernelspec": { "name": "python3", "display_name": "Python 3.7.1 64-bit ('base': conda)" }, "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.7.1" } }, "nbformat": 4, "nbformat_minor": 4 }