{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "\"AeroPython\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Clase 4: Ecuaciones algebraicas, no lineales y EDOs" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "_¿Te acuerdas de todos esos esquemas numéricos para integrar ecuaciones diferenciales ordinarias? Es bueno saber que existen y qué peculiaridades tiene cada uno, pero en este curso no queremos implementar esos esquemas: queremos resolver las ecuaciones. Los problemas de evolución están por todas partes en ingeniería y son de los más divertidos de programar._" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [], "source": [ "import numpy as np" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [], "source": [ "%matplotlib inline\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##Ecuaciones algebraicas" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Como sabemos, las operaciones del álgebra lineal aparecen con mucha frecuencia a la hora de resolver sistemas de ecuaciones en derivadas parciales y en general al linealizar problemas de todo tipo, y suele ser necesario resolver sistemas con un número enorme de ecuaciones e incógnitas. Gracias a los arrays de NumPy podemos abordar este tipo de cálculos en Python, ya que todas las funciones están escritas en C o Fortran y tenemos la opción de usar bibliotecas optimizadas al límite.\n", "\n", "El paquete de álgebra lineal en NumPy se llama `linalg`, así que importando NumPy con la convención habitual podemos acceder a él escribiendo `np.linalg`. Si imprimimos la ayuda del paquete vemos que tenemos funciones para:\n", "\n", "* Funciones básicas (norma de un vector, inversa de una matriz, determinante, traza)\n", "* Resolución de sistemas\n", "* Autovalores y autovectores\n", "* Descomposiciones matriciales (QR, SVD)\n", "* Pseudoinversas" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Help on package numpy.linalg in numpy:\n", "\n", "NAME\n", " numpy.linalg\n", "\n", "DESCRIPTION\n", " Core Linear Algebra Tools\n", " -------------------------\n", " Linear algebra basics:\n", " \n", " - norm Vector or matrix norm\n", " - inv Inverse of a square matrix\n", " - solve Solve a linear system of equations\n", " - det Determinant of a square matrix\n", " - lstsq Solve linear least-squares problem\n", " - pinv Pseudo-inverse (Moore-Penrose) calculated using a singular\n", " value decomposition\n", " - matrix_power Integer power of a square matrix\n", " \n", " Eigenvalues and decompositions:\n", " \n", " - eig Eigenvalues and vectors of a square matrix\n", " - eigh Eigenvalues and eigenvectors of a Hermitian matrix\n", " - eigvals Eigenvalues of a square matrix\n", " - eigvalsh Eigenvalues of a Hermitian matrix\n", " - qr QR decomposition of a matrix\n", " - svd Singular value decomposition of a matrix\n", " - cholesky Cholesky decomposition of a matrix\n", " \n", " Tensor operations:\n", " \n", " - tensorsolve Solve a linear tensor equation\n", " - tensorinv Calculate an inverse of a tensor\n", " \n", " Exceptions:\n", " \n", " - LinAlgError Indicates a failed linear algebra operation\n", "\n", "PACKAGE CONTENTS\n", " _umath_linalg\n", " info\n", " lapack_lite\n", " linalg\n", " setup\n", "\n", "DATA\n", " absolute_import = _Feature((2, 5, 0, 'alpha', 1), (3, 0, 0, 'alpha', 0...\n", " division = _Feature((2, 2, 0, 'alpha', 2), (3, 0, 0, 'alpha', 0), 8192...\n", " print_function = _Feature((2, 6, 0, 'alpha', 2), (3, 0, 0, 'alpha', 0)...\n", "\n", "FILE\n", " /home/siro/anaconda3/lib/python3.4/site-packages/numpy/linalg/__init__.py\n", "\n", "\n" ] } ], "source": [ "help(np.linalg)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "El producto matricial usual (no el que se hace elemento a elemento, sino el del álgebra lineal) se calcula con la misma función que el producto matriz-vector y el producto escalar vector-vector: con la función `dot`, que **no** está en el paquete `linalg` sino directamente en `numpy`.\n", "\n", "Una consideración importante a tener en cuenta es que en NumPy no hace falta ser estricto a la hora de manejar vectores como si fueran matrices columna, siempre que la operación sea consistente. Un vector es una matriz con una sola dimensión: por eso si calculamos su traspuesta no funciona.\n", "\n", "Juguemos un poco con ella para ver cómo funciona!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ejercicio:**\n", "* Crear una matriz de 2x3, y otra matriz de 3x2\n", "* Crear dos arrays de 3 elementos y otro de 2\n", "* Multiplicar los arrays entre sí y observar el resultado" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[1 2]\n", " [2 1]\n", " [1 5]] \n", "\n", " [[1 2 3]\n", " [3 2 1]] \n", "\n", " [1 0 1] \n", "\n", " [2 2 2] \n", "\n", " [1 2]\n" ] } ], "source": [ "A = np.array([\n", " [1, 2],\n", " [2, 1],\n", " [1, 5]\n", " ])\n", "B = np.array([\n", " [1, 2, 3],\n", " [3, 2, 1]\n", " ])\n", "\n", "v1 = np.array([1, 0, 1])\n", "v2 = np.array([2, 2, 2])\n", "v3 = np.array([1, 2])\n", "\n", "print(A,'\\n\\n', B, '\\n\\n',v1, '\\n\\n',v2, '\\n\\n',v3)" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 7 6 5]\n", " [ 5 6 7]\n", " [16 12 8]]\n" ] } ], "source": [ "print(np.dot(A,B)) #ETC" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Existe también otra función muy interesante: np.linalg.solve\n", "La usaremos para: \n", "\n", "**Resolver el siguiente sistema:**\n", "\n", "$$ \\begin{pmatrix} 2 & 0 & 1 \\\\ -1 & 1 & 0 \\\\ 3 & 2 & -1 \\end{pmatrix} \\begin{pmatrix} x \\\\ y \\\\ z \\end{pmatrix} = \\begin{pmatrix} -1 \\\\ 3 \\\\ 0 \\end{pmatrix} $$" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": true }, "outputs": [], "source": [ "M = np.array([\n", " [2, 0, 1],\n", " [-1, 1, 0],\n", " [3, 2, -1]\n", "])\n", "M = np.array([-1, 3, 0])" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([-1., 2., 1.])" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = np.linalg.solve(M, V)\n", "x" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([-1., 3., 0.])" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.dot(M, x)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Cargar y guardar datos**\n", "\n", "Numpy tiene dos funciones específicas para leer matrices y guardarlas: np.loadtxt y np.savetxt" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": true }, "outputs": [], "source": [ "np.savetxt('array.txt', x, fmt='%.4e', header='Nuestro array')" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([-1., 2., 1.])" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "z = np.loadtxt('array.txt')\n", "z" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Ecuaciones no lineales" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Visto cómo resolver sistemas de ecuaciones lineales, tal vez sea incluso más atractivo resolver ecuaciones no lineales. Para ello, importaremos el paquete `optimize` de SciPy:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from scipy import optimize" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "La ayuda de este paquete es bastante larga (puedes consultarla también en http://docs.scipy.org/doc/scipy/reference/tutorial/optimize.html). El paquete `optimize` incluye multitud de métodos para **optimización**, **ajuste de curvas** y **búsqueda de raíces**. Vamos a centrarnos ahora en la búsqueda de raíces de funciones escalares. Para más información puedes leer http://pybonacci.org/2012/10/25/como-resolver-ecuaciones-algebraicas-en-python-con-scipy/" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
**Nota**: La función `root` se utiliza para hallar soluciones de *sistemas* de ecuaciones no lineales así que obviamente también funciona para ecuaciones escalares. No obstante, vamos a utilizar las funciones `brentq` y `newton` para que el método utilizado quede más claro.
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Hay básicamente dos tipos de algoritmos para hallar raíces de ecuaciones no lineales:\n", "\n", "* Aquellos que operan en un intervalo $[a, b]$ tal que $f(a) \\cdot f(b) < 0$. Más lentos, convergencia asegurada.\n", "* Aquellos que operan dando una condición inicial $x_0$ más o menos cerca de la solución. Más rápidos, convergencia condicionada.\n", "\n", "De los primeros vamos a usar la función `brentq` (aunque podríamos usar `bisect`) y de los segundos vamos a usar `newton` (que en realidad engloba los métodos de Newton y de la secante)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ejemplo**:\n", "\n", "$\\ln{x} = \\sin{x} \\Rightarrow F(x) \\equiv \\ln{x} - \\sin{x} = 0$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Lo primero que tengo que hacer es definir la ecuación, que matemáticamente será una función $F(x)$ que quiero igualar a cero." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def F(x):\n", " return np.log(x) - np.sin(x)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Para hacernos una idea de las posibles soluciones siempre podemos representar gráficamente esa función:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "-c:2: RuntimeWarning: divide by zero encountered in log\n", "-c:3: RuntimeWarning: divide by zero encountered in log\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nXjg4xkXp7pgAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "x = np.linspace(0, 10, num=100)\n", "plt.plot(x, F(x), 'k', lw=2, label=\"$F(x)$\")\n", "plt.plot(x, np.log(x), label=\"$\\log{x}$\")\n", "plt.plot(x, np.sin(x), label=\"$\\sin{x}$\")\n", "plt.plot(x, np.zeros_like(x), 'k--')\n", "plt.legend(loc=4)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Y utilizando por ejemplo el método de Brent en el intervalo $[0, 3]$:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "2.219107148913746" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "optimize.brentq(F, 0, 3)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
¿No habíamos dicho que en Python no se puede dividir por cero? Observa esto:
" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "ename": "ZeroDivisionError", "evalue": "division by zero", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[1;31mZeroDivisionError\u001b[0m Traceback (most recent call last)", "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[1;36m1\u001b[0m \u001b[1;33m/\u001b[0m \u001b[1;36m0\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[1;31mZeroDivisionError\u001b[0m: division by zero" ] } ], "source": [ "1 / 0" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "-c:1: RuntimeWarning: divide by zero encountered in true_divide\n" ] }, { "data": { "text/plain": [ "array([ inf])" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "1 / np.array([0])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
Si manejamos arrays de NumPy las operaciones siguen las reglas dadas en el estándar de punto flotante (IEEE 754). Las divisiones por cero resultan en infinito, 0 / 0 es NaN, etc. Podemos controlar si queremos warnings o errores con la función `np.seterr`.
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Ejercicio" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Obtener por ambos métodos (`newton` y `brentq`) una solución a la ecuación $\\tan{x} = x$ distinta de $x = 0$. Visualizar el resultado." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Argumentos extra" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Nuestras funciones siempre tienen que tomar como primer argumento la incógnita, el valor que la hace cero. Si queremos incluir más, tendremos que usar el argumento `args` de la funciones de búsqueda de raíces. Este patrón se usa también en otras partes de SciPy, como ya veremos." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Vamos a resolver ahora una ecuación que depende de un parámetro:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\\sqrt{x} + \\log{x} = C$$." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def G(x, C):\n", " return C - np.sqrt(x) - np.log(x)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Nuestra incógnita sigue siendo $x$**, así que debe ir en primer lugar. El resto de parámetros van a continuación, y sus valores se especifican a la hora de resolver la ecuación usando `args`:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "1.8773216666875554" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "optimize.newton(G, 2.0, args=(2,))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Flujo compresible" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Esta es la relación isentrópica entre el número de Mach $M(x)$ en un conducto de área $A(x)$:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$ \\frac{A(x)}{A^*} = \\frac{1}{M(x)} \\left( \\frac{2}{1 + \\gamma} \\left( 1 + \\frac{\\gamma - 1}{2} M(x)^2 \\right) \\right)^{\\frac{\\gamma + 1}{2 (\\gamma - 1)}}$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Para un conducto convergente:\n", "\n", "$$ \\frac{A(x)}{A^*} = 3 - 2 x \\quad x \\in [0, 1]$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Hallar el número de Mach en la sección $x = 0.9$." ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nBpCnAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def A(x):\n", " return 3 - 2 * x\n", "\n", "x = np.linspace(0, 1)\n", "area = A(x)\n", "r = np.sqrt(area / np.pi)\n", "plt.fill_between(x, r, -r, color=\"#ffcc00\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "¿Cuál es la función $F$ ahora? Hay dos opciones: definir una función $F_{0.9}(M)$ que me da el número de Mach en la sección $0.9$ o una función $F(M; x)$ con la que puedo hallar el número de Mach en cualquier sección. *Bonus points* si haces la segunda opción :)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Para resolver la ecuación utiliza el método de Brent (bisección). ¿En qué intervalo se encontrará la solución? ¡Si no te haces una idea es tan fácil como pintar la función $F$!" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def F(M, x, g):\n", " return A(x) - (1 / M) * ((2 / (1 + g)) * (1 + (g - 1) / 2 * M ** 2)) ** ((g + 1) / (2 * (g - 1))) " ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "0.5902487609888621" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "optimize.brentq(F, 0.01, 1, args=(0.9, 1.4))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Ecuación de Kepler" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Representar la ecuación de Kepler\n", "\n", "$$M = E - e \\sin E$$\n", "\n", "que relaciona dos parámetros geométricos de las órbitas elípticas, la anomalía media $M$ y la anomalía excéntrica $E$.\n", "\n", "![Anomalías excéntrica y media](http://upload.wikimedia.org/wikipedia/commons/thumb/f/f8/Kepler%27s-equation-scheme.png/250px-Kepler%27s-equation-scheme.png)\n", "\n", "para los siguientes valores de excentricidad:\n", "\n", "* Tierra: $0.0167$\n", "* Plutón: $0.249$\n", "* Cometa Holmes: $0.432$\n", "* 28P/Neujmin: $0.775$\n", "* Cometa Halley: $0.967$\n", "\n", "Para reproducir esta gráfica:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import HTML\n", "HTML('')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Para ello utilizaremos el método de Newton (secante).\n", "\n", "1- Define la función correspondiente a la ecuación de Kepler, que no solo es una ecuación implícita sino que además depende de un parámetro. ¿Cuál es la incógnita?" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def F(E, e, M):\n", " return M - E + e * np.sin(E)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "2- Como primer paso, resuélvela para la excentricidad terrerestre y anomalía media $M = 0.3$. ¿Qué valor escogerías como condición inicial?" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "0.30501513714875778" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "optimize.newton(F, 0.3, args=(0.0167, 0.3))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "3- Como siguiente paso, crea un dominio (`linspace`) de anomalías medias entre $0$ y $2 \\pi$ y resuelve la ecuación de Kepler con excentricidad terrestre para todos esos valores. Fíjate que necesitarás un array donde almacenar las soluciones. Representa la curva resultante." ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "N = 500\n", "\n", "M = np.linspace(0, 2 * np.pi, N)\n", "sol = np.zeros_like(M)\n", "\n", "for ii in range(N):\n", " sol[ii] = optimize.newton(F, sol[ii - 1], args=(0.249, M[ii]))\n", "\n", "plt.plot(M, sol)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "4- Como último paso, solo tienes que meter parte del código que ya has escrito en un bucle que cambie el valor de la excentricidad 5 veces. Es aconsejable que tengas todo ese código en una única celda (esta de aquí abajo)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Vamos a introducir aquí un truco muy útil en Python:" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\neo23t3dGKT5rjj6n8oCXL1+WKlWqSExMjIiI9O/fX6ZPn55trLNnz0qNGjVk69atGU7UEpcuXRKl\nlAQEBFiVeemll+Sjjz7KOI6NjZVy5crJhQsXMnTfu3dvRnubNm1k2rRpGcfvv/++jBw5UkRE3njj\nDfnss88y9d+0aVPZuXOniBS9o9cUDCdOGE5+8eLcyV+NvSreP3jLO5vese1MN24UcXMT+fPP29Jv\nXUSEuO3eLRuuXbMpd2P3Ddldc7eE/mz7y6AkYMvRl54gUy7wVb4F0k8X6ZLna5RSrFu3jq5du2ac\nW7hwIfPmzcs4XrRoEV999RXBwcGAUQw8MjLSZr85lQf08PDgwQcfZNWqVfTr14/Nmzcze/bsbP00\natSIWbNmMW7cOE6ePMljjz3GzJkzs1WicnFxwcHBgbCwMJo0aWJRp7CwMNq2bZtxXLlyZVxdXbl8\n+TKenp5A9pKD5scVK1bk6tWrgJHLf9GiRZl0Tk5OJjQ01Ob7oim5nDwJjz4K06fD88/nLB8WE0b3\nxd3p27Qvk7pOsr7WtXgxfPABrF8PHTvmW7+5oaF8HhzMhvvuo31V6xWfwhaEEfRhEHcvvpvqj1kv\nLlIasCtHnx8HXZiI2SLihQsXeO2119i+fTsdO3ZEKUWrVq1yXGjMqTwgwIsvvshPP/1EcnIyDzzw\ngFW5QYMGMWjQIGJiYnj99df56KOPWLRoUSYZR0dHOnbsyKpVq+jcubPFfjw8PDK+rADi4uKIjIzM\nVNvWFub/yJ6enowePZpPrTyqXtQL3KW1tmpOFJVdJ05Ajx4wY4ZRrS8nLkZfpNuibgxrOYzRD4+2\nLvjll/D117B9OzRvDuTdplQRPgkK4reICHZ6e9PY0dGinKQKgR8FErkuEu+d3lRuZr1MYEFTWJ+T\nXowtIuLi4lBK4ebmhslkYv78+Zw4cSLH63IqDwjw1FNPceTIEb755huGWlnxOnPmDNu3bycxMZEK\nFSpQsWLFjLq2WZk2bRoLFixgxowZGb84/Pz8GDRoEGB8YcyfPx8/Pz8SExP59NNP6dChQ8Zs3hLm\nX2jyb5iOV199lR9++IGDBw8iIsTFxbFhw4aMouM1a9YkMDAwx/dJU/ycOGHM5HPr5AOjAum8oDMj\n2o6w7uRF4MMPYd482LMnw8nnldiUFPqfOMGBmzc50KaNVSefEp3C8T7HiT0WS+sDrYvUyRcm2tEX\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "M = np.linspace(0, 2 * np.pi, N)\n", "sol = np.zeros_like(M)\n", "\n", "plt.figure(figsize=(6, 6))\n", "\n", "for ee in 0.0167, 0.249, 0.432, 0.775, 0.967:\n", " # Para cada valor de excentricidad sobreescribimos el array sol\n", " for ii in range(N):\n", " sol[ii] = optimize.newton(F, sol[ii - 1], args=(ee, M[ii]))\n", " plt.plot(M, sol)\n", "\n", "plt.xlim(0, 2 * np.pi)\n", "plt.ylim(0, 2 * np.pi)\n", "plt.xlabel(\"$M$\", fontsize=15)\n", "plt.ylabel(\"$E$\", fontsize=15)\n", "plt.gca().set_aspect(1)\n", "plt.grid(True)\n", "plt.legend([\"Earth\", \"Pluto\", \"Comet Holmes\", \"28P/Neujmin\", \"Halley's Comet\"], loc=2)\n", "plt.title(\"Kepler's equation solutions\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Ecuaciones diferenciales ordinarias" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Para integrar EDOs vamos a usar la función `odeint` del paquete `integrate`, que permite integrar sistemas del tipo:\n", "\n", "$$ \\frac{d\\mathbf{y}}{dt}=\\mathbf{f}\\left(\\mathbf{y},t\\right)$$\n", "\n", "con condiciones iniciales $\\mathbf{y}(\\mathbf{0}) = \\mathbf{y_0}$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
**¡Importante!**: La función del sistema recibe como primer argumento $\\mathbf{y}$ (un array) y como segundo argumento el instante $t$ (un escalar). Esta convención va exactamente al revés que en MATLAB y si se hace al revés obtendremos errores o, lo que es peor, resultados incorrectos.
" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from scipy.integrate import odeint" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Vamos a integrar primero una EDO elemental, cuya solución ya conocemos:\n", "\n", "$$y' + y = 0$$\n", "\n", "$$f(y, t) = \\frac{dy}{dt} = -y$$" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def f(y, t):\n", " return -y" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Condiciones iniciales:" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false }, "outputs": [], "source": [ "y0 = 1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Vector de tiempos donde realizamos la integración:" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false }, "outputs": [], "source": [ "t = np.linspace(0, 3)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Integramos y representamos la solución:" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nEZEY+n+a08D97TlJ6AAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sol = odeint(f, y0, t)\n", "plt.plot(t, sol)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### EDOs de orden superior" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Tendremos que acordarnos ahora de cómo reducir las ecuaciones de orden. De nuevo, vamos a probar con un ejemplo académico:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$y + y'' = 0$$\n", "\n", "$$\\mathbf{y} \\leftarrow \\pmatrix{y \\\\ y'}$$\n", "\n", "$$\\mathbf{f}(\\mathbf{y}) = \\frac{d\\mathbf{y}}{dt} = \\pmatrix{y \\\\ y'}' = \\pmatrix{y' \\\\ y''} = \\pmatrix{y' \\\\ -y}$$" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def f(y, t):\n", " return np.array([y[1], -y[0]])\n", "\n", "t = np.linspace(0, 10)\n", "y0 = np.array([1.0, 0.0])\n", "\n", "sol = odeint(f, y0, t)\n", "\n", "plt.plot(t, sol[:, 0], label='$y$')\n", "plt.plot(t, sol[:, 1], '--k', label='$\\dot{y}$')\n", "plt.legend()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Para ampliar\n", "\n", "En nuestra edición anterior del curso de AeroPython puedes ver una aplicación muy interesante de lo que hemos visto hasta ahora al **salto de Felix Baumgartner**. ¡Aquí lo tienes!\n", "\n", "http://nbviewer.ipython.org/github/AeroPython/Curso_AeroPython/blob/v1.0/Notebooks/Clase6b_Finale.ipynb\n", "\n", "$$\\displaystyle m \\frac{d^2 y}{d t^2} = -m g + D$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---\n", "\n", "Clase en vídeo, parte del [Curso de Python para científicos e ingenieros](http://cacheme.org/curso-online-python-cientifico-ingenieros/) grabado en la Escuela Politécnica Superior de la Universidad de Alicante." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import YouTubeVideo\n", "\n", "YouTubeVideo(\"1R_JnTajrRY\", width=560, height=315, list=\"PLGBbVX_WvN7bMwYe7wWV5TZt1a58jTggB\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Si te ha gustado esta clase:\n", "\n", "Tweet\n", "\n", "\n", "---" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "####

¡Síguenos en Twitter!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "###### Follow @AeroPython " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### \"Licencia
Curso AeroPython por Juan Luis Cano Rodriguez y Alejandro Sáez Mollejo se distribuye bajo una Licencia Creative Commons Atribución 4.0 Internacional." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---\n", "_Las siguientes celdas contienen configuración del Notebook_\n", "\n", "_Para visualizar y utlizar los enlaces a Twitter el notebook debe ejecutarse como [seguro](http://ipython.org/ipython-doc/dev/notebook/security.html)_\n", "\n", " File > Trusted Notebook" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "Follow @AeroPython\n", "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%html\n", "Follow @AeroPython\n", "" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "El estilo se ha aplicado =)\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Esta celda da el estilo al notebook\n", "from IPython.core.display import HTML\n", "css_file = '../static/styles/style.css'\n", "HTML(open(css_file, \"r\").read())" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.4.3" } }, "nbformat": 4, "nbformat_minor": 0 }