{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Cálculos de ceros de sistemas\n", "#### https://meet.noysi.com/metodosnumericos1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Método de Newton-Raphson" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "En primer lugar, vamos a resolver aproximadamente la ecuación \n", "$$\\begin{cases} x^5+x y=1,\\\\ y^5+2 x y=1.\\end{cases}$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Necesitamos transformar el problema en encontrar los ceros de una función. En este caso, lo más sencillo es pasar todos los sumandos al mismo lado de la ecuación:\n", "$$F(x,y) = ( x^5-xy-1,y^5+2xy-1).$$" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/html": [ "" ], "text/latex": [ "$$\\newcommand{\\Bold}[1]{\\mathbf{#1}}\\left( x, y \\right) \\ {\\mapsto} \\ \\left(x^{5} + x y - 1,\\,y^{5} + 2 \\, x y - 1\\right)$$" ], "text/plain": [ "(x, y) |--> (x^5 + x*y - 1, y^5 + 2*x*y - 1)" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "f(x,y) = x^5+x*y-1\n", "g(x,y) = y^5+2*x*y-1\n", "F(x,y) = ( f(x,y) , g(x,y) )\n", "show(F)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Para aplicar el método de Newton-Raphson, es preciso considerar un punto inicial. Por ejemplo, vamos a tomar el punto $(1,1)$. Lo definimos como vector, puesto que queremos realizar operaciones con él (suma)." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(1.0, 1.0)" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "v0 = vector(RDF,[1.,1.])\n", "v0" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "También necesitamos la matriz jacobiana. En Sage se puede calcular con el método `diff` sin introducir ningún parámetro." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/html": [ "" ], "text/latex": [ "$$\\newcommand{\\Bold}[1]{\\mathbf{#1}}\\left(\\begin{array}{rr}\n", "5 \\, x^{4} + y & x \\\\\n", "2 \\, y & 5 \\, y^{4} + 2 \\, x\n", "\\end{array}\\right)$$" ], "text/plain": [ "[ 5*x^4 + y x]\n", "[ 2*y 5*y^4 + 2*x]" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "DF = F.diff()\n", "show(DF(x,y))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Como nuestra función de variables no está definida sobre puntos sino sobre coordenadas, para evaluar una función de varias variables en un punto hay que transformarlo en sus coordenadas. Para ello usamos el operador `*`." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(\n", "[6.0 1.0] [6.0 1.0] [6.0 1.0]\n", "[2.0 7.0], [2.0 7.0], [2.0 7.0]\n", ")" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "DF(*v0), DF(RDF(1.),RDF(1.)), DF(v0[0],v0[1])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ahora podemos aplicar el método de Newton-Raphson. Recordemos que $v_1$ está definido por\n", "$$ J_{v_0} (v_1-v_0) = -F(v_0),$$\n", "donde $v_0$ es el vector inicial y $J_{v_0}$ es la matriz jacobiana de $F$ evaluada en $v_0$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Si $x$ es la solución de $ J_{v_0} x = -F(v_0),$, entonces \n", "$$v_1-v_0=x,\\quad v_1 = v_0 + x$$" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "v1 = v0 + DF(*v0)\\(-F(*v0))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Los siguientes pasos son análogos." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[(1.0, 1.0),\n", " (0.875, 0.75),\n", " (0.8674615838407234, 0.5883877512370015),\n", " (0.8783073191378743, 0.5437936013364996)]" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "v2 = v1 + DF(*v1)\\(-F(*v1))\n", "v3 = v2 + DF(*v2)\\(-F(*v2))\n", "puntos = [v0,v1,v2,v3]\n", "puntos" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(0.0002938404595224098, 0.002787983990069298)" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "F(*v3)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Por último vamos a representar las ecuaciones, la solución y las aproximaciones. Cada ecuación define en este caso una curva implícita y las soluciones serán las intersecciones de ambas curvas." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "Graphics object consisting of 7 graphics primitives" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "implicit_plot(f(x,y)==0,(x,0,1),(y,0,1),linestyle='--',color='black')\\\n", "+implicit_plot(g(x,y)==0,(x,0,1),(y,0,1),linestyle='-.',color='black')\\\n", "+points(puntos,color='green')\\\n", "+sum([text('v'+str(i),puntos[i]+vector([0.05,0]),color='green') for i in range(len(puntos)) ])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "