{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Idea of this notebook\n", "\n", "- generate a grid\n", "- visualize a wave that extends as a function of time\n", "- sum several sources and plot the resulting field" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's make a grid." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "x = np.linspace(0, 2, num=150)\n", "y = np.linspace(0, 2, num=151)\n", "X, Y = np.meshgrid(x, y)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And plot it." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(0.0, 2.0, 0.0, 2.0)" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots()\n", "ax.pcolormesh(X, Y, X, vmax=0.1)\n", "ax.axis('equal')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's generate a source that radiates spherically and plot it." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(0.0, 2.0, 0.0, 2.0)" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "source = np.array([0.5, 1.])\n", "\n", "r = np.sqrt((X - source[0])**2 + (Y - source[1])**2)\n", "\n", "k = 2 * np.pi / 0.4\n", "\n", "field = np.cos(k * r)\n", "\n", "fig, ax = plt.subplots()\n", "ax.pcolormesh(X, Y, field, vmin=0, vmax=0.2)\n", "ax.axis('equal')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now what about an animation?\n", "\n", "Thanks to the helpful people on Stackoverflow:\n", "https://stackoverflow.com/questions/18797175/animation-with-pcolormesh-routine-in-matplotlib-how-do-i-initialize-the-data\n", "\n", "```python\n", " z = z[:-1, :-1]\n", "```" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n", "\n", "
\n", " \n", "
\n", " \n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", "
\n", "
\n", "
\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import matplotlib.animation as manim\n", "from IPython.display import HTML\n", "\n", "fig, ax = plt.subplots()\n", "m = ax.pcolormesh(X, Y, np.zeros_like(X), vmin=0, vmax=.2)\n", "\n", "def init():\n", " ax.axis('equal')\n", "\n", "def update(t):\n", " new_array = np.sin(k * r - k * t) * (r <= t)\n", " new_array = new_array[:-1, :-1]\n", " m.set_array(new_array.ravel())\n", "\n", "animation = manim.FuncAnimation(fig, update, frames=np.linspace(0, 1, num=10), init_func=init, blit=False);\n", "plt.close()\n", "HTML(animation.to_jshtml())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Several sources " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's write a function that sums different sources." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0., 0., 0., ..., 0., 0., 0.],\n", " [0., 0., 0., ..., 0., 0., 0.],\n", " [0., 0., 0., ..., 0., 0., 0.],\n", " ...,\n", " [0., 0., 0., ..., 0., 0., 0.],\n", " [0., 0., 0., ..., 0., 0., 0.],\n", " [0., 0., 0., ..., 0., 0., 0.]])" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def summed_field(X, Y, sources, t, wavelength):\n", " total_field = np.zeros_like(X)\n", " for source in sources:\n", " r = np.sqrt((X - source[0])**2 + (Y - source[1])**2)\n", " k = 2 * np.pi / wavelength\n", " field = np.sin(k * r - k * t) * (r <= t)\n", " total_field += field\n", " return total_field\n", "\n", "summed_field(X, Y, sources=[source], t=0.55, wavelength=0.4)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "def make_anim_with_sources(sources, tmax=1, num=20):\n", " fig, ax = plt.subplots()\n", " m = ax.pcolormesh(X, Y, np.zeros_like(X), vmin=0, vmax=.2)\n", "\n", " def init():\n", " ax.axis('equal')\n", "\n", " def update(t):\n", " new_array = summed_field(X, Y, sources=sources, t=t, wavelength=0.4)\n", " new_array = new_array[:-1, :-1]\n", " m.set_array(new_array.ravel())\n", "\n", " animation = manim.FuncAnimation(fig, update, frames=np.linspace(0, tmax, num=num), init_func=init, blit=False);\n", " plt.close()\n", " return HTML(animation.to_jshtml())" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n", "\n", "
\n", " \n", "
\n", " \n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", "
\n", "
\n", "
\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sources = [np.array([0., 0.25]),\n", " np.array([0., 0.75])]\n", "\n", "make_anim_with_sources(sources)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n", "\n", "
\n", " \n", "
\n", " \n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", "
\n", "
\n", "
\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sources = [np.array([0., 0.25]),\n", " np.array([0., 1.]),\n", " np.array([0., 1.75])]\n", "\n", "make_anim_with_sources(sources, tmax=2, num=50)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n", "\n", "
\n", " \n", "
\n", " \n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", "
\n", "
\n", "
\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sources = [np.array([2., 0.25]),\n", " np.array([0., 1.]),\n", " np.array([2., 1.75])]\n", "\n", "make_anim_with_sources(sources, tmax=3, num=100)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "name": "" }, "widgets": { "application/vnd.jupyter.widget-state+json": { "state": {}, "version_major": 2, "version_minor": 0 } } }, "nbformat": 4, "nbformat_minor": 4 }