diff --git a/docs/02advanced/03simulation/_samples/draw_circle.ipynb b/docs/02advanced/03simulation/_samples/draw_circle.ipynb new file mode 100644 index 000000000..f0871fb64 --- /dev/null +++ b/docs/02advanced/03simulation/_samples/draw_circle.ipynb @@ -0,0 +1,92 @@ +{ + "nbformat": 4, + "nbformat_minor": 2, + "metadata": {}, + "cells": [ + { + "metadata": {}, + "source": [ + "!pip install ita" + ], + "cell_type": "code", + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Defaulting to user installation because normal site-packages is not writeable\n", + "Requirement already satisfied: ita in /home/w/.local/lib/python3.10/site-packages (0.2.12)\n", + "Requirement already satisfied: numpy in /home/w/.local/lib/python3.10/site-packages (from ita) (1.23.3)\n", + "Requirement already satisfied: matplotlib in /home/w/.local/lib/python3.10/site-packages (from ita) (3.6.0)\n", + "Requirement already satisfied: cycler>=0.10 in /home/w/.local/lib/python3.10/site-packages (from matplotlib->ita) (0.11.0)\n", + "Requirement already satisfied: kiwisolver>=1.0.1 in /home/w/.local/lib/python3.10/site-packages (from matplotlib->ita) (1.4.4)\n", + "Requirement already satisfied: pyparsing>=2.2.1 in /usr/lib/python3/dist-packages (from matplotlib->ita) (2.4.7)\n", + "Requirement already satisfied: contourpy>=1.0.1 in /home/w/.local/lib/python3.10/site-packages (from matplotlib->ita) (1.0.5)\n", + "Requirement already satisfied: fonttools>=4.22.0 in /home/w/.local/lib/python3.10/site-packages (from matplotlib->ita) (4.37.4)\n", + "Requirement already satisfied: pillow>=6.2.0 in /usr/lib/python3/dist-packages (from matplotlib->ita) (9.0.1)\n", + "Requirement already satisfied: python-dateutil>=2.7 in /home/w/.local/lib/python3.10/site-packages (from matplotlib->ita) (2.8.2)\n", + "Requirement already satisfied: packaging>=20.0 in /home/w/.local/lib/python3.10/site-packages (from matplotlib->ita) (21.3)\n", + "Requirement already satisfied: six>=1.5 in /usr/lib/python3/dist-packages (from python-dateutil>=2.7->matplotlib->ita) (1.16.0)\n" + ] + } + ], + "execution_count": null + }, + { + "metadata": {}, + "source": [ + "import ita\n", + "\n", + "%matplotlib inline" + ], + "cell_type": "code", + "outputs": [], + "execution_count": null + }, + { + "metadata": {}, + "source": [ + "def draw_circle(x, y, r):\n", + " image = ita.array.make2d(100, 100)\n", + " y = len(image) - 1 - y\n", + " for i in range(y - r, y + r + 1):\n", + " for j in range(x - r, x + r + 1):\n", + " if (\n", + " 0 <= i < len(image)\n", + " and 0 <= j < len(image[i])\n", + " and (x - j) ** 2 + (y - i) ** 2 < r**2\n", + " ):\n", + " image[i][j] = 1\n", + " return image\n", + "\n", + "\n", + "image = draw_circle(10, 10, 10)\n", + "ita.plot.image_show(image)" + ], + "cell_type": "code", + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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QAAAFwQIAOCCAAEAXBAgAIALAgQAcEGAAAAuCBAAwAUBAgC4IEAAABcECADgggABAFwQIACACwIEAHBBgAAALoYUoPb2duXk5KilpSV9rL+/X01NTSorK9Po0aO1aNEixePxoa4TAHCTue4A7dmzR7/5zW90zz33DDq+bNkybd26VR0dHerq6tLx48e1cOHCIS8UAHCTsetw6tQpmzx5sm3fvt0efPBBa25uNjOzvr4+KygosI6OjvS1Bw8eNEnW3d19yefq7++3RCKRnmg0apIYhmGYET6JROKKLbmuV0BNTU2aP3++GhoaBh3v6enR+fPnBx2vqalRVVWVuru7L/lckUhEwWAwPZWVldezJADACJNxgDZv3qyPPvpIkUjkonOxWEyFhYUqLS0ddDwUCikWi13y+VatWqVEIpGeaDSa6ZIAACNQfiYXR6NRNTc3a/v27SoqKhqWBQQCAQUCgWF5LgDAyJHRK6Cenh6dPHlS9913n/Lz85Wfn6+uri6tXbtW+fn5CoVCOnfunPr6+gY9Lh6PKxwOD+e6AQAjXEavgObOnatPPvlk0LEnn3xSNTU1WrFihSorK1VQUKDOzk4tWrRIktTb26tjx46pvr5++FYNABjxMgrQmDFjNHXq1EHHbrvtNpWVlaWPP/XUU1q+fLnGjRunkpISPffcc6qvr9esWbOGb9UAgBEvowBdi1/+8pfKzc3VokWLdPbsWc2bN0+//vWvh/vLAABGuBwzM+9FfFUymVQwGPReBgBgiBKJhEpKSi57ns+CAwC4IEAAABcECADgggABAFwQIACACwIEAHBBgAAALggQAMAFAQIAuCBAAAAXBAgA4IIAAQBcECAAgAsCBABwQYAAAC4IEADABQECALggQAAAFwQIAOCCAAEAXBAgAIALAgQAcEGAAAAuCBAAwAUBAgC4IEAAABcECADgggABAFwQIACACwIEAHBBgAAALggQAMAFAQIAuCBAAAAXBAgA4IIAAQBcECAAgAsCBABwQYAAAC4IEADABQECALggQAAAFwQIAOCCAAEAXBAgAIALAgQAcEGAAAAuCBAAwAUBAgC4IEAAABcECADgggABAFwQIACACwIEAHBBgAAALggQAMAFAQIAuCBAAAAXBAgA4IIAAQBcECAAgAsCBABwQYAAAC4yDtBnn32mJ554QmVlZSouLta0adO0d+/e9Hkz0+rVq1VeXq7i4mI1NDTo8OHDw7poAMDIl1GA/vOf/2jOnDkqKCjQn/70J3366af6+c9/rrFjx6av+dnPfqa1a9dq3bp12rVrl2677TbNmzdP/f39w754AMAIZhlYsWKFPfDAA5c9n0qlLBwO25o1a9LH+vr6LBAI2KZNmy75mP7+fkskEumJRqMmiWEYhhnhk0gkrtiUjF4Bvffee6qtrdVjjz2mCRMmaPr06XrzzTfT548ePapYLKaGhob0sWAwqLq6OnV3d1/yOSORiILBYHoqKyszWRIAYITKKEBHjhzR66+/rsmTJ+v999/XM888o+eff16///3vJUmxWEySFAqFBj0uFAqlz11o1apVSiQS6YlGo9fz9wAAjDD5mVycSqVUW1url19+WZI0ffp0HThwQOvWrVNjY+N1LSAQCCgQCFzXYwEAI1dGr4DKy8t19913Dzp211136dixY5KkcDgsSYrH44Ouicfj6XMAAEgZBmjOnDnq7e0ddOzQoUO6/fbbJUnV1dUKh8Pq7OxMn08mk9q1a5fq6+uHYbkAgJtGJnfB7d692/Lz862trc0OHz5sGzZssFGjRtlbb72Vvqa9vd1KS0tty5Yt9vHHH9sjjzxi1dXVdubMmWv6GolEwv3ODYZhGGboc7W74DIKkJnZ1q1bberUqRYIBKympsbeeOONQedTqZS1trZaKBSyQCBgc+fOtd7e3mt+fgLEMAxzc8zVApRjZqYskkwmFQwGvZcBABiiRCKhkpKSy57ns+AAAC4IEADABQECALggQAAAFwQIAOCCAAEAXBAgAIALAgQAcEGAAAAuCBAAwAUBAgC4IEAAABcECADgggABAFwQIACACwIEAHBBgAAALggQAMAFAQIAuCBAAAAXBAgA4IIAAQBcECAAgAsCBABwQYAAAC4IEADABQECALggQAAAFwQIAOCCAAEAXBAgAIALAgQAcEGAAAAuCBAAwAUBAgC4IEAAABcECADgggABAFwQIACACwIEAHBBgAAALggQAMAFAQIAuCBAAAAXBAgA4IIAAQBcECAAgAsCBABwQYAAAC4IEADABQECALggQAAAFwQIAOCCAAEAXBAgAIALAgQAcEGAAAAuCBAAwAUBAgC4IEAAABcECADgggABAFwQIACAi4wCNDAwoNbWVlVXV6u4uFh33nmnXnrpJZlZ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", + "text/plain": [ + "
" + ] + }, + "metadata": {} + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "" + ] + }, + "metadata": {}, + "execution_count": 12 + } + ], + "execution_count": null + } + ] +} diff --git a/docs/02advanced/03simulation/_samples/uniform_linear_motion.ipynb b/docs/02advanced/03simulation/_samples/uniform_linear_motion.ipynb new file mode 100644 index 000000000..b97bd6726 --- /dev/null +++ b/docs/02advanced/03simulation/_samples/uniform_linear_motion.ipynb @@ -0,0 +1,39 @@ +{ + "nbformat": 4, + "nbformat_minor": 2, + "metadata": {}, + "cells": [ + { + "metadata": {}, + "source": [ + "def uniform_linear_motion_step(x, v0, dt):\n", + " return x + v0 * dt\n", + "\n", + "\n", + "def uniform_linear_motion(x0, v0, t, dt):\n", + " x = x0\n", + " n = int(t / dt)\n", + " for i in range(n):\n", + " x = uniform_linear_motion_step(x, v0, dt)\n", + " return x\n", + "\n", + "\n", + "uniform_linear_motion(0, 10, 10, 0.1)" + ], + "cell_type": "code", + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "100.0" + ] + }, + "metadata": {}, + "execution_count": 3 + } + ], + "execution_count": null + } + ] +} diff --git a/docs/02advanced/03simulation/_samples/uniform_linear_motion_analytical.ipynb b/docs/02advanced/03simulation/_samples/uniform_linear_motion_analytical.ipynb new file mode 100644 index 000000000..a3cd73183 --- /dev/null +++ b/docs/02advanced/03simulation/_samples/uniform_linear_motion_analytical.ipynb @@ -0,0 +1,31 @@ +{ + "nbformat": 4, + "nbformat_minor": 2, + "metadata": {}, + "cells": [ + { + "metadata": {}, + "source": [ + "def uniform_linear_motion(x0, v0, t):\n", + " return x0 + v0 * t\n", + "\n", + "\n", + "uniform_linear_motion(0, 10, 10)" + ], + "cell_type": "code", + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "100" + ] + }, + "metadata": {}, + "execution_count": 2 + } + ], + "execution_count": null + } + ] +} diff --git a/docs/02advanced/03simulation/_samples/uniform_linear_motion_return_array.ipynb b/docs/02advanced/03simulation/_samples/uniform_linear_motion_return_array.ipynb new file mode 100644 index 000000000..183bab5a9 --- /dev/null +++ b/docs/02advanced/03simulation/_samples/uniform_linear_motion_return_array.ipynb @@ -0,0 +1,37 @@ +{ + "nbformat": 4, + "nbformat_minor": 2, + "metadata": {}, + "cells": [ + { + "metadata": {}, + "source": [ + "def uniform_linear_motion_step(x, v0, dt):\n", + " return x + v0 * dt\n", + "\n", + "\n", + "def uniform_linear_motion(x0, v0, t, dt):\n", + " x = []\n", + " x.append(x0)\n", + " n = int(t / dt)\n", + " for i in range(n):\n", + " x.append(uniform_linear_motion_step(x[i], v0, dt))\n", + " return x\n", + "\n", + "\n", + "print(uniform_linear_motion(0, 10, 10, 0.1))" + ], + "cell_type": "code", + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 23.0, 24.0, 25.0, 26.0, 27.0, 28.0, 29.0, 30.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 41.0, 42.0, 43.0, 44.0, 45.0, 46.0, 47.0, 48.0, 49.0, 50.0, 51.0, 52.0, 53.0, 54.0, 55.0, 56.0, 57.0, 58.0, 59.0, 60.0, 61.0, 62.0, 63.0, 64.0, 65.0, 66.0, 67.0, 68.0, 69.0, 70.0, 71.0, 72.0, 73.0, 74.0, 75.0, 76.0, 77.0, 78.0, 79.0, 80.0, 81.0, 82.0, 83.0, 84.0, 85.0, 86.0, 87.0, 88.0, 89.0, 90.0, 91.0, 92.0, 93.0, 94.0, 95.0, 96.0, 97.0, 98.0, 99.0, 100.0]\n" + ] + } + ], + "execution_count": null + } + ] +} diff --git a/docs/02advanced/03simulation/_samples/uniform_linear_motion_view.ipynb b/docs/02advanced/03simulation/_samples/uniform_linear_motion_view.ipynb new file mode 100644 index 000000000..1d213cf3c --- /dev/null +++ b/docs/02advanced/03simulation/_samples/uniform_linear_motion_view.ipynb @@ -0,0 +1,1625 @@ +{ + "nbformat": 4, + "nbformat_minor": 2, + "metadata": {}, + "cells": [ + { + "metadata": {}, + "source": [ + "!pip install ita" + ], + "cell_type": "code", + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Defaulting to user installation because normal site-packages is not writeable\n", + "Requirement already satisfied: ita in /home/w/.local/lib/python3.10/site-packages (0.2.12)\n", + "Requirement already satisfied: matplotlib in /home/w/.local/lib/python3.10/site-packages (from ita) (3.6.0)\n", + "Requirement already satisfied: numpy in /home/w/.local/lib/python3.10/site-packages (from ita) (1.23.3)\n", + "Requirement already satisfied: packaging>=20.0 in /home/w/.local/lib/python3.10/site-packages (from matplotlib->ita) (21.3)\n", + "Requirement already satisfied: pyparsing>=2.2.1 in /usr/lib/python3/dist-packages (from matplotlib->ita) (2.4.7)\n", + "Requirement already satisfied: contourpy>=1.0.1 in /home/w/.local/lib/python3.10/site-packages (from matplotlib->ita) (1.0.5)\n", + "Requirement already satisfied: python-dateutil>=2.7 in /home/w/.local/lib/python3.10/site-packages (from matplotlib->ita) (2.8.2)\n", + "Requirement already satisfied: fonttools>=4.22.0 in /home/w/.local/lib/python3.10/site-packages (from matplotlib->ita) (4.37.4)\n", + "Requirement already satisfied: cycler>=0.10 in /home/w/.local/lib/python3.10/site-packages (from matplotlib->ita) (0.11.0)\n", + "Requirement already satisfied: pillow>=6.2.0 in /usr/lib/python3/dist-packages (from matplotlib->ita) (9.0.1)\n", + "Requirement already satisfied: kiwisolver>=1.0.1 in /home/w/.local/lib/python3.10/site-packages (from matplotlib->ita) (1.4.4)\n", + "Requirement already satisfied: six>=1.5 in /usr/lib/python3/dist-packages (from python-dateutil>=2.7->matplotlib->ita) (1.16.0)\n" + ] + } + ], + "execution_count": null + }, + { + "metadata": {}, + "source": [ + "import ita\n", + "\n", + "%matplotlib inline" + ], + "cell_type": "code", + "outputs": [], + "execution_count": null + }, + { + "metadata": {}, + "source": [ + "def draw_circle(x, y, r):\n", + " image = ita.array.make2d(100, 100)\n", + " y = len(image) - 1 - y\n", + " for i in range(y - r, y + r + 1):\n", + " for j in range(x - r, x + r + 1):\n", + " if (\n", + " 0 <= i < len(image)\n", + " and 0 <= j < len(image[i])\n", + " and (x - j) ** 2 + (y - i) ** 2 < r**2\n", + " ):\n", + " image[i][j] = 1\n", + " return image\n", + "\n", + "\n", + "def uniform_linear_motion_step(x, v0, dt):\n", + " return x + v0 * dt\n", + "\n", + "\n", + "def uniform_linear_motion(x0, v0, t, dt):\n", + " x = []\n", + " x.append(x0)\n", + " n = int(t / dt)\n", + " for i in range(n):\n", + " x.append(uniform_linear_motion_step(x[i], v0, dt))\n", + " return x\n", + "\n", + "\n", + "x = uniform_linear_motion(0, 10, 10, 0.1)\n", + "images = []\n", + "for i in range(10):\n", + " images.append(draw_circle(int(x[i * int(len(x) / 10)]), 50, 10))\n", + "ita.plot.animation_show(images)" + ], + "cell_type": "code", + "outputs": [ + { + "output_type": "execute_result", + "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": [ + "" + ] + }, + "metadata": {}, + "execution_count": 6 + }, + { + "output_type": "display_data", + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAaAAAAGgCAYAAADsNrNZAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy89olMNAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAYNklEQVR4nO3df2xV9f3H8Vd/0NsK7S2U9d523EJnSIqAESmUAtmS0Yw49oPRuZHUrf7ImFqUAop0S1k2hYsscwymMIiDJYJMkjGFZBhSXDO2UqAOJlMKC2Q04r1ott6LIBfS+/n+4debXUHthQvvFp6P5CTec869ffMx3GdOe27JcM45AQBwnWVaDwAAuDkRIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgIlrFqBnn31WI0aMUG5urqqqqrRv375r9aUAAP1QxrX4XXC///3v9f3vf19r165VVVWVVq5cqa1bt6qzs1PFxcWf+tx4PK5Tp04pPz9fGRkZ6R4NAHCNOed05swZlZaWKjPzU65z3DUwceJE19DQkHjc09PjSktLXTAY/MzndnV1OUlsbGxsbP186+rq+tT3+2yl2YULF9TR0aGmpqbEvszMTNXU1Kitre2S82OxmGKxWOKx+/8Lsq6uLhUUFKR7PADANRaNRhUIBJSfn/+p56U9QO+99556enrk8/mS9vt8Ph05cuSS84PBoH76059esr+goIAAAUA/9lk/RjG/C66pqUmRSCSxdXV1WY8EALgO0n4FNHToUGVlZSkcDiftD4fD8vv9l5zv8Xjk8XjSPQYAoI9L+xVQTk6Oxo8fr5aWlsS+eDyulpYWVVdXp/vLAQD6qbRfAUnSggULVF9fr8rKSk2cOFErV67U2bNndd99912LLwcA6IeuSYC++93v6t1339WSJUsUCoV0xx13aOfOnZfcmAAAuHldkw+iXo1oNCqv16tIJMJdcADQD/X2fdz8LjgAwM2JAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmEgpQMFgUBMmTFB+fr6Ki4s1c+ZMdXZ2Jp1z/vx5NTQ0qKioSIMGDVJtba3C4XBahwYA9H8pBai1tVUNDQ3au3evdu3apYsXL+orX/mKzp49mzhn/vz52r59u7Zu3arW1ladOnVKs2bNSvvgAID+LcM55670ye+++66Ki4vV2tqqL37xi4pEIvrc5z6nzZs369vf/rYk6ciRIxo1apTa2to0adKkS14jFospFoslHkejUQUCAUUiERUUFFzpaAAAI9FoVF6v9zPfx6/qZ0CRSESSNGTIEElSR0eHLl68qJqamsQ5FRUVKisrU1tb22VfIxgMyuv1JrZAIHA1IwEA+okrDlA8HldjY6OmTJmiMWPGSJJCoZBycnJUWFiYdK7P51MoFLrs6zQ1NSkSiSS2rq6uKx0JANCPZF/pExsaGnT48GHt2bPnqgbweDzyeDxX9RoAgP7niq6A5s6dqx07dui1117TsGHDEvv9fr8uXLig7u7upPPD4bD8fv9VDQoAuLGkFCDnnObOnatt27Zp9+7dKi8vTzo+fvx4DRgwQC0tLYl9nZ2dOnnypKqrq9MzMQDghpDSt+AaGhq0efNmvfzyy8rPz0/8XMfr9SovL09er1cPPPCAFixYoCFDhqigoECPPPKIqqurL3sHHADg5pXSbdgZGRmX3b9hwwbde++9kj78IOrChQv14osvKhaLafr06Xruued6/S243t6+BwDom3r7Pn5VnwO6FggQAPRv1+VzQAAAXCkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABg4qoCtHz5cmVkZKixsTGx7/z582poaFBRUZEGDRqk2tpahcPhq50TAHCDueIA7d+/X7/5zW90++23J+2fP3++tm/frq1bt6q1tVWnTp3SrFmzrnpQAMCN5YoC9P7776uurk7r16/X4MGDE/sjkYief/55PfPMM/ryl7+s8ePHa8OGDfrb3/6mvXv3Xva1YrGYotFo0gYAuPFdUYAaGho0Y8YM1dTUJO3v6OjQxYsXk/ZXVFSorKxMbW1tl32tYDAor9eb2AKBwJWMBADoZ1IO0JYtW/T6668rGAxeciwUCiknJ0eFhYVJ+30+n0Kh0GVfr6mpSZFIJLF1dXWlOhIAoB/KTuXkrq4uzZs3T7t27VJubm5aBvB4PPJ4PGl5LQBA/5HSFVBHR4dOnz6tO++8U9nZ2crOzlZra6tWrVql7Oxs+Xw+XbhwQd3d3UnPC4fD8vv96ZwbANDPpXQFNG3aNL3xxhtJ++677z5VVFToiSeeUCAQ0IABA9TS0qLa2lpJUmdnp06ePKnq6ur0TQ0A6PdSClB+fr7GjBmTtG/gwIEqKipK7H/ggQe0YMECDRkyRAUFBXrkkUdUXV2tSZMmpW9qAEC/l1KAeuOXv/ylMjMzVVtbq1gspunTp+u5555L95cBAPRzGc45Zz3E/4pGo/J6vYpEIiooKLAeBwCQot6+j/O74AAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAICJlAP09ttv65577lFRUZHy8vI0duxYHThwIHHcOaclS5aopKREeXl5qqmp0bFjx9I6NACg/0spQP/97381ZcoUDRgwQH/605/05ptv6he/+IUGDx6cOGfFihVatWqV1q5dq/b2dg0cOFDTp0/X+fPn0z48AKD/ynDOud6evHjxYv31r3/VX/7yl8sed86ptLRUCxcu1GOPPSZJikQi8vl82rhxo2bPnn3Jc2KxmGKxWOJxNBpVIBBQJBJRQUFBqn8eAICxaDQqr9f7me/jKV0BvfLKK6qsrNTdd9+t4uJijRs3TuvXr08cP3HihEKhkGpqahL7vF6vqqqq1NbWdtnXDAaD8nq9iS0QCKQyEgCgn0opQMePH9eaNWs0cuRIvfrqq3rooYf06KOP6ne/+50kKRQKSZJ8Pl/S83w+X+LYxzU1NSkSiSS2rq6uK/lzAAD6mexUTo7H46qsrNSyZcskSePGjdPhw4e1du1a1dfXX9EAHo9HHo/nip4LAOi/UroCKikp0W233Za0b9SoUTp58qQkye/3S5LC4XDSOeFwOHEMAAApxQBNmTJFnZ2dSfuOHj2q4cOHS5LKy8vl9/vV0tKSOB6NRtXe3q7q6uo0jAsAuFGk9C24+fPna/LkyVq2bJm+853vaN++fVq3bp3WrVsnScrIyFBjY6OeeuopjRw5UuXl5WpublZpaalmzpx5LeYHAPRTKQVowoQJ2rZtm5qamvSzn/1M5eXlWrlyperq6hLnLFq0SGfPntWcOXPU3d2tqVOnaufOncrNzU378ACA/iulzwFdD729fxwA0Dddk88BAQCQLgQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMBE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", + "text/plain": [ + "
" + ] + }, + "metadata": {} + } + ], + "execution_count": null + } + ] +} diff --git a/docs/02advanced/03simulation/_samples/uniform_linear_motion_view_analytical.ipynb b/docs/02advanced/03simulation/_samples/uniform_linear_motion_view_analytical.ipynb new file mode 100644 index 000000000..063631a19 --- /dev/null +++ b/docs/02advanced/03simulation/_samples/uniform_linear_motion_view_analytical.ipynb @@ -0,0 +1,1621 @@ +{ + "nbformat": 4, + "nbformat_minor": 2, + "metadata": {}, + "cells": [ + { + "metadata": {}, + "source": [ + "!pip install ita" + ], + "cell_type": "code", + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Defaulting to user installation because normal site-packages is not writeable\n", + "Requirement already satisfied: ita in /home/w/.local/lib/python3.10/site-packages (0.2.12)\n", + "Requirement already satisfied: numpy in /home/w/.local/lib/python3.10/site-packages (from ita) (1.23.3)\n", + "Requirement already satisfied: matplotlib in /home/w/.local/lib/python3.10/site-packages (from ita) (3.6.0)\n", + "Requirement already satisfied: python-dateutil>=2.7 in /home/w/.local/lib/python3.10/site-packages (from matplotlib->ita) (2.8.2)\n", + "Requirement already satisfied: fonttools>=4.22.0 in /home/w/.local/lib/python3.10/site-packages (from matplotlib->ita) (4.37.4)\n", + "Requirement already satisfied: kiwisolver>=1.0.1 in /home/w/.local/lib/python3.10/site-packages (from matplotlib->ita) (1.4.4)\n", + "Requirement already satisfied: packaging>=20.0 in /home/w/.local/lib/python3.10/site-packages (from matplotlib->ita) (21.3)\n", + "Requirement already satisfied: cycler>=0.10 in /home/w/.local/lib/python3.10/site-packages (from matplotlib->ita) (0.11.0)\n", + "Requirement already satisfied: pillow>=6.2.0 in /usr/lib/python3/dist-packages (from matplotlib->ita) (9.0.1)\n", + "Requirement already satisfied: contourpy>=1.0.1 in /home/w/.local/lib/python3.10/site-packages (from matplotlib->ita) (1.0.5)\n", + "Requirement already satisfied: pyparsing>=2.2.1 in /usr/lib/python3/dist-packages (from matplotlib->ita) (2.4.7)\n", + "Requirement already satisfied: six>=1.5 in /usr/lib/python3/dist-packages (from python-dateutil>=2.7->matplotlib->ita) (1.16.0)\n" + ] + } + ], + "execution_count": null + }, + { + "metadata": {}, + "source": [ + "import ita\n", + "\n", + "%matplotlib inline" + ], + "cell_type": "code", + "outputs": [], + "execution_count": null + }, + { + "metadata": {}, + "source": [ + "def draw_circle(x, y, r):\n", + " image = ita.array.make2d(100, 100)\n", + " y = len(image) - 1 - y\n", + " for i in range(y - r, y + r + 1):\n", + " for j in range(x - r, x + r + 1):\n", + " if (\n", + " 0 <= i < len(image)\n", + " and 0 <= j < len(image[i])\n", + " and (x - j) ** 2 + (y - i) ** 2 < r**2\n", + " ):\n", + " image[i][j] = 1\n", + " return image\n", + "\n", + "\n", + "def uniform_linear_motion(x0, v0, t, dt):\n", + " x = []\n", + " x.append(x0)\n", + " n = int(t / dt)\n", + " for i in range(1, n + 1):\n", + " x.append(x0 + v0 * (dt * i))\n", + " return x\n", + "\n", + "\n", + "x = uniform_linear_motion(0, 10, 10, 0.1)\n", + "images = []\n", + "for i in range(10):\n", + " images.append(draw_circle(int(x[i * int(len(x) / 10)]), 50, 10))\n", + "ita.plot.animation_show(images)" + ], + "cell_type": "code", + "outputs": [ + { + "output_type": "execute_result", + "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": [ + "" + ] + }, + "metadata": {}, + "execution_count": 8 + }, + { + "output_type": "display_data", + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAaAAAAGgCAYAAADsNrNZAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy89olMNAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAYNklEQVR4nO3df2xV9f3H8Vd/0NsK7S2U9d523EJnSIqAESmUAtmS0Yw49oPRuZHUrf7ImFqUAop0S1k2hYsscwymMIiDJYJMkjGFZBhSXDO2UqAOJlMKC2Q04r1ott6LIBfS+/n+4debXUHthQvvFp6P5CTec869ffMx3GdOe27JcM45AQBwnWVaDwAAuDkRIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgIlrFqBnn31WI0aMUG5urqqqqrRv375r9aUAAP1QxrX4XXC///3v9f3vf19r165VVVWVVq5cqa1bt6qzs1PFxcWf+tx4PK5Tp04pPz9fGRkZ6R4NAHCNOed05swZlZaWKjPzU65z3DUwceJE19DQkHjc09PjSktLXTAY/MzndnV1OUlsbGxsbP186+rq+tT3+2yl2YULF9TR0aGmpqbEvszMTNXU1Kitre2S82OxmGKxWOKx+/8Lsq6uLhUUFKR7PADANRaNRhUIBJSfn/+p56U9QO+99556enrk8/mS9vt8Ph05cuSS84PBoH76059esr+goIAAAUA/9lk/RjG/C66pqUmRSCSxdXV1WY8EALgO0n4FNHToUGVlZSkcDiftD4fD8vv9l5zv8Xjk8XjSPQYAoI9L+xVQTk6Oxo8fr5aWlsS+eDyulpYWVVdXp/vLAQD6qbRfAUnSggULVF9fr8rKSk2cOFErV67U2bNndd99912LLwcA6IeuSYC++93v6t1339WSJUsUCoV0xx13aOfOnZfcmAAAuHldkw+iXo1oNCqv16tIJMJdcADQD/X2fdz8LjgAwM2JAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmEgpQMFgUBMmTFB+fr6Ki4s1c+ZMdXZ2Jp1z/vx5NTQ0qKioSIMGDVJtba3C4XBahwYA9H8pBai1tVUNDQ3au3evdu3apYsXL+orX/mKzp49mzhn/vz52r59u7Zu3arW1ladOnVKs2bNSvvgAID+LcM55670ye+++66Ki4vV2tqqL37xi4pEIvrc5z6nzZs369vf/rYk6ciRIxo1apTa2to0adKkS14jFospFoslHkejUQUCAUUiERUUFFzpaAAAI9FoVF6v9zPfx6/qZ0CRSESSNGTIEElSR0eHLl68qJqamsQ5FRUVKisrU1tb22VfIxgMyuv1JrZAIHA1IwEA+okrDlA8HldjY6OmTJmiMWPGSJJCoZBycnJUWFiYdK7P51MoFLrs6zQ1NSkSiSS2rq6uKx0JANCPZF/pExsaGnT48GHt2bPnqgbweDzyeDxX9RoAgP7niq6A5s6dqx07dui1117TsGHDEvv9fr8uXLig7u7upPPD4bD8fv9VDQoAuLGkFCDnnObOnatt27Zp9+7dKi8vTzo+fvx4DRgwQC0tLYl9nZ2dOnnypKqrq9MzMQDghpDSt+AaGhq0efNmvfzyy8rPz0/8XMfr9SovL09er1cPPPCAFixYoCFDhqigoECPPPKIqqurL3sHHADg5pXSbdgZGRmX3b9hwwbde++9kj78IOrChQv14osvKhaLafr06Xruued6/S243t6+BwDom3r7Pn5VnwO6FggQAPRv1+VzQAAAXCkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABg4qoCtHz5cmVkZKixsTGx7/z582poaFBRUZEGDRqk2tpahcPhq50TAHCDueIA7d+/X7/5zW90++23J+2fP3++tm/frq1bt6q1tVWnTp3SrFmzrnpQAMCN5YoC9P7776uurk7r16/X4MGDE/sjkYief/55PfPMM/ryl7+s8ePHa8OGDfrb3/6mvXv3Xva1YrGYotFo0gYAuPFdUYAaGho0Y8YM1dTUJO3v6OjQxYsXk/ZXVFSorKxMbW1tl32tYDAor9eb2AKBwJWMBADoZ1IO0JYtW/T6668rGAxeciwUCiknJ0eFhYVJ+30+n0Kh0GVfr6mpSZFIJLF1dXWlOhIAoB/KTuXkrq4uzZs3T7t27VJubm5aBvB4PPJ4PGl5LQBA/5HSFVBHR4dOnz6tO++8U9nZ2crOzlZra6tWrVql7Oxs+Xw+XbhwQd3d3UnPC4fD8vv96ZwbANDPpXQFNG3aNL3xxhtJ++677z5VVFToiSeeUCAQ0IABA9TS0qLa2lpJUmdnp06ePKnq6ur0TQ0A6PdSClB+fr7GjBmTtG/gwIEqKipK7H/ggQe0YMECDRkyRAUFBXrkkUdUXV2tSZMmpW9qAEC/l1KAeuOXv/ylMjMzVVtbq1gspunTp+u5555L95cBAPRzGc45Zz3E/4pGo/J6vYpEIiooKLAeBwCQot6+j/O74AAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAICJlAP09ttv65577lFRUZHy8vI0duxYHThwIHHcOaclS5aopKREeXl5qqmp0bFjx9I6NACg/0spQP/97381ZcoUDRgwQH/605/05ptv6he/+IUGDx6cOGfFihVatWqV1q5dq/b2dg0cOFDTp0/X+fPn0z48AKD/ynDOud6evHjxYv31r3/VX/7yl8sed86ptLRUCxcu1GOPPSZJikQi8vl82rhxo2bPnn3Jc2KxmGKxWOJxNBpVIBBQJBJRQUFBqn8eAICxaDQqr9f7me/jKV0BvfLKK6qsrNTdd9+t4uJijRs3TuvXr08cP3HihEKhkGpqahL7vF6vqqqq1NbWdtnXDAaD8nq9iS0QCKQyEgCgn0opQMePH9eaNWs0cuRIvfrqq3rooYf06KOP6ne/+50kKRQKSZJ8Pl/S83w+X+LYxzU1NSkSiSS2rq6uK/lzAAD6mexUTo7H46qsrNSyZcskSePGjdPhw4e1du1a1dfXX9EAHo9HHo/nip4LAOi/UroCKikp0W233Za0b9SoUTp58qQkye/3S5LC4XDSOeFwOHEMAAApxQBNmTJFnZ2dSfuOHj2q4cOHS5LKy8vl9/vV0tKSOB6NRtXe3q7q6uo0jAsAuFGk9C24+fPna/LkyVq2bJm+853vaN++fVq3bp3WrVsnScrIyFBjY6OeeuopjRw5UuXl5WpublZpaalmzpx5LeYHAPRTKQVowoQJ2rZtm5qamvSzn/1M5eXlWrlyperq6hLnLFq0SGfPntWcOXPU3d2tqVOnaufOncrNzU378ACA/iulzwFdD729fxwA0Dddk88BAQCQLgQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMBE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", + "text/plain": [ + "
" + ] + }, + "metadata": {} + } + ], + "execution_count": null + } + ] +} diff --git a/docs/02advanced/03simulation/index.mdx b/docs/02advanced/03simulation/index.mdx new file mode 100644 index 000000000..3b2fd28d0 --- /dev/null +++ b/docs/02advanced/03simulation/index.mdx @@ -0,0 +1,91 @@ +--- +sidebar_position: 3 +--- + +import ViewSource from "@site/src/components/ViewSource/ViewSource"; +import Answer from "@site/src/components/Answer"; + +# 物体の運動のシミュレーション + +今回は、物体の運動をシミュレーションしてみましょう。 + +## 等速直線運動 + +まずは、比較的簡単な等速直線運動から考えていきましょう。 + +初速度を $v_0$ とすると、$t$ 秒後の変位 $x$ は次のようになります。 + +$$ +\frac{dx}{dt} = v_0 +$$ + +となります。 + +この微分方程式は解析的に解けますが、差分化してみましょう。 + +$$ +\begin{align*} + \frac{x_{n+1} - x_n}{\Delta t} &= v_0 \\ + x_{n + 1} - x_n &= v_0 \Delta t \\ + x_{n + 1} &= x_n + v_0 \Delta t +\end{align*} +$$ + +よって、$\Delta t$ を十分小さくとって $x_1,x_2,x_3 \cdots$ を順に求めていけば、$x_n$ が求まります。実際に、これを使ったプログラムを見てみましょう。 + + + +:::note +この微分方程式は、次のようにすれば簡単に解けます。確かにこの結果を用いれば、簡単にプログラムを書けるので、差分方程式を使う必要性があまり感じられないかもしれません。しかし、世の中には解析的に解けない微分方程式も多いので、差分方程式を使って近似解を求めることも時には重要になってきます。 + +$$ +\begin{align*} + \frac{dx}{dt} &= v_0 \\ + dx &= v_0 dt \\ + \int dx &= \int v_0 dt \\ + x &= v_0t+C +\end{align*} +$$ + +初期条件 $t = 0$ で $x = x_0$ を代入して、 + +$$ +C = x_0 +$$ + +よって、 + +$$ +x = x_0 + v_0t +$$ + + + +::: + +## 可視化 + +実際にプログラムができたので、次は可視化してみましょう。 + +今のままでは最終的な変位のみで途中の経過が分からないので、まずは、`uniform_linear_motion` 関数を少し変えて途中経過も含めた変位の配列を返すように書き換えましょう。次のようになります。 + + + +次に以前に作った `draw_circle` 関数を使って可視化していきましょう。 + +`draw_circle` 関数は次のようになっています。 + + + +可視化すると、つぎのようになります。 + + + +:::note +解析解を使うと次のようになります。 + + +::: diff --git a/docs/index.mdx b/docs/index.mdx index efa2debed..f00af6f79 100644 --- a/docs/index.mdx +++ b/docs/index.mdx @@ -24,20 +24,22 @@ Python やアルゴリズムについて簡単にまとめていこうかなと ## 更新履歴 -11/25 「練習問題の項」、「パッケージをインストール」の項を執筆 [練習問題](/docs/01python/12practice/)、[パッケージをインストール](/docs/01python/07pip/) +11/28 第七週の分を執筆 物体の運動のシミュレーション -11/13 第五週の分を執筆 [ライフゲーム](/docs/02advanced/01life-game/) +11/25 「練習問題の項」、「パッケージをインストール」の項を執筆 -11/6 第四週の分を執筆 [多次元配列](/docs/01python/10multi-array/)、[条件分岐](/docs/01python/11if/) +11/13 第五週の分を執筆 ライフゲーム -11/6 range 関数についてを補足 [この下](/docs/01python/09array/#%E5%95%8F%E9%A1%8C-1) +11/6 第四週の分を執筆 多次元配列、条件分岐 -10/30 第三週の分を執筆 [繰り返し処理](/docs/01python/08for/)、[配列](/docs/01python/09array/) +11/6 配列の項の最後に range 関数についてを補足 -10/23 第二週の分を執筆 [関数](/docs/01python/05function/)、[ライブラリ](/docs/01python/06library/) +10/30 第三週の分を執筆 繰り返し処理、配列 + +10/23 第二週の分を執筆 関数、ライブラリ 10/16 練習問題をさらに追加 10/10 練習問題を追加 -10/10 第一周の分を執筆 [環境構築](/docs/01python/01google-colaboratory/)、[はじめての Python](/docs/01python/02get-started/)、[式と演算子](/docs/01python/03expressions/)、[変数](/docs/01python/04variables/) +10/10 第一周の分を執筆 環境構築、はじめての Python、式と演算子、変数