{ "cells": [ { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from matplotlib.patches import Circle" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Primero definimos una función para calcular el campo eléctrico" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def E(xp, yp, xf=0, yf=0, q=1):\n", " \"\"\"Campo Eléctrico en 2 Dimensiones \n", " en un punto de prueba xp, yp\n", " de una carga fuente en un punto xf, yf\n", " de valor q\n", " \"\"\" \n", " \n", " Dx = xp - xf\n", " Dy = yp - yf\n", " \n", " den = (Dx**2 + Dy**2)**1.5\n", " \n", " # Noten que la respuesta e sun vector (Ex, Ey)\n", " return q * Dx / den, q * Dy / den" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Algunos graficos a lo largo de los ejes cartesianos de una carga en el origen" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Primero definimos un rango para graficar, de 1 a 10 con 100 pasos\n", "rango = np.linspace(1, 10, 100)\n", "\n", "# Campo a lo largo del Eje X \n", "Ex, Ey = E(rango, 0)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "plt.plot(rango, Ex);\n", "plt.xlabel('x');\n", "plt.ylabel('Ex');\n", "plt.title('Campo sobre el eje x (y=0)');" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "plt.plot(rango, Ey);\n", "plt.xlabel('y');\n", "plt.ylabel('Ey');\n", "plt.title('Campo sobre el eje x (y=0)');" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Ahora lo mismo sobre el eje y \n", "Ex, Ey = E(0, rango)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "plt.plot(rango, Ex);\n", "plt.xlabel('x');\n", "plt.ylabel('Ex');\n", "plt.title('Campo sobre el eje y (x=0)');" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "plt.plot(rango, Ey);\n", "plt.xlabel('y');\n", "plt.ylabel('Ey');\n", "plt.title('Campo sobre el eje y (x=0)');" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Ahora en la dirección radial, x=y\n", "Ex, Ey = E(rango, rango)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# y graficamos todo junto\n", "r = (rango**2+rango**2)**0.5\n", "plt.plot(rango, Ex, 'rx-', rango, Ey, 'g.-', rango, (Ex**2+Ey**2)**0.5, 'b');\n", "plt.xlabel('r');\n", "plt.ylabel('E');\n", "plt.title('Campo sobre la dirección radial (x=y)');\n", "plt.legend(['Ex', 'Ey', 'Etotal']);" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Ahora con carga negativa. \n", "# Noten que el campo total esta en modulo\n", "\n", "Ex, Ey = E(rango, rango, q=-1)\n", "r = (rango**2+rango**2)**0.5\n", "plt.plot(rango, Ex, 'rx-', rango, Ey, 'g.-', rango, (Ex**2+Ey**2)**0.5, 'b');\n", "plt.xlabel('r');\n", "plt.ylabel('E');\n", "plt.title('Campo sobre la dirección radial (x=y)');\n", "plt.legend(['Ex', 'Ey', 'Etotal']);" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Generamos una grilla donde vamos a calcular el campo eléctrico\n", "nx, ny = 64, 64\n", "rangoX = np.linspace(-2, 2, nx)*1\n", "rangoY = np.linspace(-2, 2, ny)*1\n", "grillaX, grillaY = np.meshgrid(rangoX, rangoY)\n", "\n", "# Y calculamos los campos\n", "Ex, Ey = E(grillaX, grillaY)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "fig = plt.figure(figsize=(17,17))\n", "ax = fig.add_subplot(111)\n", "\n", "\n", "color = np.log(np.sqrt(Ex**2 + Ey**2))\n", "ax.streamplot(grillaX, grillaY, Ex, Ey, color=color, linewidth=1, cmap=plt.cm.inferno,\n", " density=2, arrowstyle='->', arrowsize=1.5)\n", "\n", "ax.add_artist(Circle([0,0], 0.05, color='#aa0000'))\n", "\n", "ax.set_xlabel('$x$')\n", "ax.set_ylabel('$y$')\n", "ax.set_xlim(-2,2)\n", "ax.set_ylim(-2,2)\n", "ax.set_aspect('equal')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Ahora para una carga negativa\n", "Ex, Ey = E(grillaX, grillaY, q=-1)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "fig = plt.figure(figsize=(17,17))\n", "ax = fig.add_subplot(111)\n", "\n", "\n", "color = np.log(np.sqrt(Ex**2 + Ey**2))\n", "ax.streamplot(grillaX, grillaY, Ex, Ey, color=color, linewidth=1, cmap=plt.cm.inferno,\n", " density=2, arrowstyle='->', arrowsize=1.5)\n", "\n", "ax.add_artist(Circle([0,0], 0.05, color='#0000aa'))\n", "\n", "ax.set_xlabel('$x$')\n", "ax.set_ylabel('$y$')\n", "ax.set_xlim(-2,2)\n", "ax.set_ylim(-2,2)\n", "ax.set_aspect('equal')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python [default]", "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.5.2" } }, "nbformat": 4, "nbformat_minor": 1 }