initial commit

This commit is contained in:
yenru0 committed 2025-09-10 17:19:40 +09:00
commit d4dff245bd
12 files changed
+2188

No files matched your search

+3
View File
@@ -0,0 +1,3 @@
[attr] lfs-file filter=lfs diff=lfs merge=lfs -text
*.pdf lfs-file
+13
View File
@@ -0,0 +1,13 @@
# Python-generated files
__pycache__/
*.py[oc]
build/
dist/
wheels/
*.egg-info
# Virtual environments
.venv
#
.vscode
+1
View File
@@ -0,0 +1 @@
3.12
+273
View File
@@ -0,0 +1,273 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 4,
"id": "8f8630bf",
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "markdown",
"id": "9751d328",
"metadata": {},
"source": [
"# Floating Point\n",
"\n",
"**Double Precision Floating Point Number Representation**\n",
"\n",
"$$(-1)^s \\times 2^{c-1023} \\times (1+f)$$\n",
"\n",
"* $s$: sign bit\n",
"* $c$: 11 bit exponent\n",
"* $f$: 52 bit fraction"
]
},
{
"cell_type": "markdown",
"id": "9c0b5413",
"metadata": {},
"source": []
},
{
"cell_type": "markdown",
"id": "964d247f",
"metadata": {},
"source": []
},
{
"cell_type": "markdown",
"id": "6f7aef85",
"metadata": {},
"source": [
"# Root Finding\n",
"\n",
"When there is no or hard to find analytic solution.\n",
"\n",
"* General procedure of root finding\n",
"\n",
"\n",
"## Incremental Search\n",
"\n",
"Detecting a sign change in the interval $[x, dx]$\n",
"\n",
"\n",
"## Bracketing Method\n",
"\n",
"* there must be a solution in a given interval $[a,b]$\n",
"* reducing the interval systematically\n",
"* [Merit]Convergence to an exact solution\n",
"\n",
"Methods:\n",
"* bisection\n",
"* linear interpolation\n",
"\n",
"## Open Method\n",
"\n",
"* starting from an arbitrary point, find the root based on a regular iteration\n",
"* [Risk] divergence\n",
"* [Merit] faster than _bracketing_\n",
"\n",
"Methods:\n",
"* fixed-point iter\n",
"* Newton-Raphson method\n",
"* secant method\n",
"* Muller method\n"
]
},
{
"cell_type": "markdown",
"id": "2649c3d4",
"metadata": {},
"source": [
"## Bisection Method\n",
"based on the principle: **A solution must exists in $[x_1, x_2]$ if $f(x_1)f(x_2) < 0$**\n",
"\n",
"so interval reduces by half at each iteration.\n",
"\n",
"* simple\n",
"* maximum error $<$ (initial interval/$2^n$)\n",
"* slow converge\n",
"* cannot cope with multiple roots"
]
},
{
"cell_type": "markdown",
"id": "ef80f29d",
"metadata": {},
"source": [
"## Linear Interpolation Method(False Position Method)\n",
"\n",
"An interval $[a_{n+1}, b_{n+1}]$, containing an approximation of $f(x) = 0$, is found from an interval $[a_n, b_n]$\n",
"\n",
"$$p_{n+1} = a_n - \\frac{f(a_n)(b_n-a_n)}{f(b_n) - f(a_n)}$$\n",
"\n",
"then set $$\\begin{cases}\n",
"a_{n+1} = a_n, b_{n+1} = p_{n+1} &\\quad \\text{if} f(a_n)f(p_{n+1}) < 0\\\\\n",
"a_{n+1} = p_{n+1}, b_{n+1} = b_n &\\quad \\text{else}\n",
"\\end{cases}$$\n",
"\n",
"* faster convergence than bisection\n",
"* convergence speed depends on **curvature**\n",
"\n",
"\n",
"\n",
"### Modified Linear Interpolation\n",
"\n"
]
},
{
"cell_type": "markdown",
"id": "856f5bbf",
"metadata": {},
"source": [
"## Newton-Raphson Method\n",
"\n",
"\n",
"* **fast convergence**: quadratic convergence\n",
"* Inefficient if **the derivative calculation is complex**\n",
"* Initial guess matter\n",
" * Cycling\n",
" * Wandering\n",
" * Overshooting(a root the methods get is not the root I wanted)"
]
},
{
"cell_type": "markdown",
"id": "cf78e848",
"metadata": {},
"source": [
"## Secant Method\n",
"\n",
"$$p_{n+1} = p_n - \\frac{f(p_n)(p_n - p_{n-1})}{f(p_n) - f(p_{n-1})}$$\n",
"\n",
"Similar to linear interpolation but update rule is different.\n",
"\n",
"* fast convergence than **linear interpolation**\n",
"* more stable than Newton-Raphson\n",
" * but convergence is slower than Newton-Raphson"
]
},
{
"cell_type": "code",
"execution_count": 36,
"id": "167cae2f",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAiIAAAGzCAYAAAASZnxRAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjYsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvq6yFwwAAAAlwSFlzAAAPYQAAD2EBqD+naQAAai5JREFUeJzt3QVYFVkbB/A/DSpgB3Z3d7fYYoHdtcYaa+8aq65Ya7vmGqio2K3YqGt3d3dSSs/3nDMfKILKVS63/r/nGe+duXPnnuHGvJ54j5miKAqIiIiIdMBcFy9KREREJDAQISIiIp1hIEJEREQ6w0CEiIiIdIaBCBEREekMAxEiIiLSGQYiREREpDMMRIiIiEhnGIgQERGRzjAQISKTdf/+fZiZmWHKlClaf63Ro0fL1yKi6BiIEOmRS5cuoVmzZsicOTNsbW2RPn161KxZE7NmzYIhGT9+PDZt2qRRMCCWcePGxbpP69at5eNJkiT5ofLs2LFDBgJEpH8YiBDpif/++w8lSpTAhQsX0LVrV8yePRtdunSBubk5ZsyYAWMNRCKJwGvVqlUxtgcGBmLz5s3y8R8lApE///zzh59PRNpjqcVjE5EG/vrrLzg6OuLUqVNImjRptMdevnwJY1e3bl1s2LBBBmKFCxeO2i6CkJCQENSuXRv79+/XaRmJKP6xRoRIT9y5cwf58+ePEYQIqVOnjrFtxYoVKF68OOzs7JA8eXK0aNECjx49irHfiRMn5EU+WbJkSJw4MQoVKhSthuXixYvo0KEDsmXLJmsd0qZNi06dOuHNmzex9nG4ffu23F+UUwROHTt2xIcPH6L2E/uIWoxly5ZFNbmI/b+nbNmyyJo1Kzw9PaNtX7lypQxCxDnGZufOnahYsaI8N3t7e9SrVw9XrlyJely89pw5c6LKFrl8acGCBciePTtsbGxQsmRJGRB+SQRCka8lzr9Ro0a4du1ajP2OHDkijyH+nuKY8+fP/+75E5kq1ogQ6QnRL+TYsWO4fPkyChQo8N3akxEjRsDV1VU237x69Ur2I6lUqRLOnTsXFczs2bMH9evXR7p06dC3b18ZZIgL57Zt2+R65D53796VAYV4XFzExUVZ3B4/fjzGRVu8pggY3N3dcfbsWSxatEgGShMnTpSPL1++XJapVKlS6Natm9wmLsZx0bJlSxlgTZgwQb7u69ev4e3tLY+5a9euGPuL7e3bt4ezs7N8fREQzZ07FxUqVJB/hyxZsqB79+54+vSpPE+xf2xE8OPv7y/3Fa87adIkNGnSRP5drKys5D579+5FnTp1ZMAmgrKPHz/Kv3n58uXl30G8VmQ/n1q1aiFVqlRyv7CwMIwaNQpp0qSJ09+AyOQoRKQXvL29FQsLC7mULVtWGTx4sLJ7924lJCQk2n7379+X+/z111/Rtl+6dEmxtLSM2h4WFqZkzZpVyZw5s/Lu3bto+0ZERETd//DhQ4yyrFq1ShE/Dz4+PlHbRo0aJbd16tQp2r6NGzdWUqRIEW1b4sSJlfbt28fpvO/duyePO3nyZOXy5cvy/uHDh+Vjc+bMUZIkSaIEBgbK44njRvL391eSJk2qdO3aNdrxnj9/rjg6Okbb3qtXL3ncr722KP/bt2+jtm/evFlu37p1a9S2IkWKKKlTp1bevHkTte3ChQuKubm50q5du6htLi4uiq2trfLgwYOobVevXpXvGX9yiWJi0wyRnhCjY0SNSMOGDWU/CfG/cvE/fTFyZsuWLVH7iX4UERERsmZC1BhELqI2I2fOnDhw4IDcT9QI3Lt3D/369YvR3PN5LYdo2okUFBQkj1WmTBm5Lv6n/6UePXpEWxdNFaIZx8/P76f/BqJpSjQdRXZaFTUVovkjUaJEMfYVNRzv37+XtSif/x0sLCxQunTpqL9DXLi5ucmmq8/PSRA1IsKzZ89w/vx52czzeRORKKt430RnWCE8PBy7d++Gi4sLMmXKFLVf3rx55XtJRDExECHSI6JfgQg03r17h5MnT2LYsGGyyUAM6b169arc59atW+K/1TLoENX/ny+i2SWyY6vocyJ8r5nn7du3splGNB2IoEQcRzS9CL6+vjH2//wCK0RewEWZ40OrVq2wdu1a2RdFjCQS67ERfwehWrVqMf4OojlHkw6+3zunBw8eyNvcuXPHeK4IMkQAJPrFiCYy0WQj3psvxfZcImIfESK9ZG1tLYMSseTKlUv23xAXZ9HXQNSGiBoN0UlT/O//S5rm2hA1K+KCP2jQIBQpUkQ+X7yG6CAqbr8U22sKIjiKD6KGQwRgYghzihQpZH+L2ESWTfT7ELVBX7K0jPvPm7bPiYi+joEIkZ4TuUUimwciO36KC6SotRBBytdEdhAVnV9r1KgR6z7if/z79u2TOTZGjhwZo7bhR/1MBlFROyE6gB48eBC//PLLVwOKyPMTHWW/dn7xUZ7IjsTCjRs3Yjx2/fp1pEyZUo6kEaNkRK1SbH+/2J5LRGyaIdIbok9DbP8Dj+x/EFm1L0ZziP/Bi+Dhy/3FeuSw22LFislgZfr06bIvxZf7fV4T8OVxxHN+hrgof/mamhAZVkXtT58+fb66j+hz4eDgIJOnhYaGxnhcNJN8Xh7hR8skRh2J2iIxJPnzY4ggTzQDieHRkX9PUS6RzO3hw4dR+4kmM9F3hIhiYo0IkZ4QF10x/LRx48bIkyePTOIlmkzWrFkjh4aK5pnImgBxoRbNFyI9uugYKfJniI6pGzdulENmBw4cKDOyiqGsDRo0kBdR8XxxQRX/gxdDc8WFUVzIxZBf0TFWXMxFx1hxYRXH+hkiv4kY7jp16lQ4OTnJgEh0II2rypUry+VbRNnF+bVt21YGXSKPiugfIgKA7du3y1oVkZ02sjzCr7/+KgMFETCI/TUxefJkOXxX5Dvp3Llz1PBdkUvl8/TxIkAUQ41Fh9eePXvK4btiP9ERV+RsIaIvxDKShoh0YOfOnXJobJ48eeSQVWtrayVHjhxKnz59lBcvXsTYf/369UqFChXkkFaxiOeJYao3btyItt+RI0eUmjVrKvb29nK/QoUKKbNmzYp6/PHjx3IIrhgKK4a9Nm/eXHn69KkcaiqG7H45fPfVq1fRjr9kyRK5XQyFjXT9+nWlUqVKip2dnXzsW0N5Px+++y1fDt+NdODAAcXZ2VmWXQybzZ49u9KhQwfl9OnTUfuIoczi75gqVSrFzMwsahjtt177y/MX9u7dq5QvX16el4ODg9KgQQM5NPdLhw4dUooXLy7fw2zZsinz5s2L+vsRUXRm4p8vgxMiIiKihMA+IkRERKQzDESIiIhIZxiIEBERkc4wECEiIiKdYSBCREREOsNAhIiIiHRGrxOaibkknj59KpM1/WyKZiIiIkoYIjOImLBTJDQUyRUNNhARQUjGjBl1XQwiIiL6AY8ePUKGDBkMNxARNSGRJyLSORMREZH+8/PzkxUJkddxgw1EIptjRBDCQISIiMiwxKVbBTurEhERkc4wECEiIiKdYSBCREREOsNAhIiIiHSGgQgRERHpDAMRIiIi0hkGIkRERKQzDESIiIhIZxiIEBERkc4wECEiIiKdYSBCREREOsNAhIiIiHSGgQgREZEJevQIqF4duHJFt+VgIEJERGRiFAXo0gXYvx/o2VO3ZWEgQkREZGIWLAC8vQFbW/W+LjEQISIiMiF37wK//abed3cHcufWbXkYiBAREZmIiAigY0cgMBCoVAn49Vddl4iBCBERkcmYORPw8QESJwaWLAHM9SAK0IMiEBERkbbduAEMG6be//tvIFs26AUGIkREREYuLAxo3x4ICgJq1QK6dYPeYCBCRERk5CZPBk6cABwdgUWLADMz6A0GIkREREbs0iVg1Cj1/owZQMaM0CsMRIiIiIxUSAjQrh0QGgo0bKje1zcMRIiIiIzUX38B588DyZMD8+frV5NMJAYiRERERuj0aTUQEebOBdKmhV5iIEJERGRkgoLUUTLh4YCbG+DqCr3FQISIiMjIjBwJXL0KpEkDzJkDvcZAhIiIyIj4+ABTpqj3xYR2KVJArzEQISIiMhJ+furIGEUBOnVSR8roOwYiRERERqJfP+DBAyBLFmDaNBgEBiJERERGYPNmdSI7MUTXwwNwcIBxByI+Pj5o0KABnJycYGZmhk2bNkV7XFEUjBw5EunSpYOdnR1q1KiBW7duxUeZiYiI6DMvXwJdu6r3Bw0CKlaEwfjhQCQwMBCFCxfGnK90x500aRJmzpyJefPm4cSJE0icODGcnZ0RJMYUERERUbwQ/UFEEPLqFVCoEDBmDAyK5Y8+sU6dOnKJjagNmT59Ov744w80atRIbvPw8ECaNGlkzUmLFi1ifV5wcLBcIvmJXjdERET0VaI5ZssWwNoaWL4csLGBQdFKH5F79+7h+fPnsjkmkqOjI0qXLo1jx4599Xnu7u5yv8glo77NzENERKRH7t4F+vZV748dq9aIGBqtBCIiCBFEDcjnxHrkY7EZNmwYfH19o5ZHjx5po3hEREQGLzxczZ4aEKD2CfntNxikH26a0QYbGxu5EBER0bf9/Tdw5AiQJAmwbBlgYQGDpJUakbT/n1nnxYsX0baL9cjHiIiI6MdcvAiMGKHenzEDyJoVBksrgUjWrFllwLFv375oHU/F6JmyZctq4yWJiIhMQnAw0KYNEBKiZk7t2BEG7YebZgICAnD79u1oHVTPnz+P5MmTI1OmTOjXrx/GjRuHnDlzysBkxIgRMueIi4tLfJWdiIjI5IiakEuXgFSpgIUL1QRmJhmInD59GlWrVo1aHzBggLxt3749li5disGDB8tcI926dcP79+9RoUIF7Nq1C7a2tvFTciIiIhNz8OCnCe1EEJI6NQyemSKSfugp0ZwjhvGKETQOhpKrloiISAvevVOH5z5+DHTuDCxaBBjD9ZtzzRAREek5RQF++UUNQnLkAKZPh9FgIEJERKTnVqwA1qxRh+iK+2LIrrFLine truncated
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"x = np.linspace(0, 4)\n",
"\n",
"f = lambda t: t**2 - 5\n",
"y = f(x)\n",
"\n",
"p = [0.5, 3.5]\n",
"\n",
"for _ in range(2):\n",
" p.append(p[-1] - f(p[-1]) * (p[-1] - p[-2]) / (f(p[-1]) - f(p[-2])))\n",
"\n",
"p = np.array(p)\n",
"plt.plot(\n",
" p,\n",
" np.zeros_like(p),\n",
" \"ro\",\n",
")\n",
"for i, p0 in enumerate(p):\n",
" plt.text(p0 + 0.05, 0.1, f\"$p_{i}$\", size=16, color=\"black\", va=\"bottom\")\n",
"\n",
"plt.plot(p, f(p), \"ro\")\n",
"\n",
"for pos in p:\n",
" _y = [0, f(pos)]\n",
" plt.vlines(pos, min(_y), max(_y), color=\"red\")\n",
"\n",
"for p0, p1 in zip(p[:-1], p[1:]):\n",
" plt.plot([p0, p1], [f(p0), f(p1)], color=\"green\")\n",
"\n",
"plt.title(\"Secant Method\")\n",
"plt.plot(x, y, color=\"blue\")\n",
"plt.hlines(0, 0, 4, color=\"black\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "17e94fbf",
"metadata": {},
"source": [
"## Fixed Point Iteration\n",
"\n",
"principle: $f(x) = 0 \\to x = g(x)$\n",
"\n",
"$$x_{k+1} = g(x_k)$$\n"
]
},
{
"cell_type": "markdown",
"id": "4cc731ad",
"metadata": {},
"source": [
"## Muller Method"
]
},
{
"cell_type": "markdown",
"id": "c3702bdd",
"metadata": {},
"source": [
"## Error Analysis"
]
},
{
"cell_type": "markdown",
"id": "c0e38d45",
"metadata": {},
"source": [
"## Accelerating Convergence\n"
]
},
{
"cell_type": "markdown",
"id": "1e7717a7",
"metadata": {},
"source": [
"## Fail-safe Methods\n"
]
}
],
"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.12.11"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
View File
Whitespace-only changes.
View File
Whitespace-only changes.
View File
Whitespace-only changes.
BIN
View File
Binary file not shown.
Binary file not shown.
Binary file not shown.
+11
View File
@@ -0,0 +1,11 @@
[project]
name = "2025-02-numerical"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.12"
dependencies = [
"jupyter>=1.1.1",
"matplotlib>=3.10.6",
"numpy>=2.3.2",
]
Generated
+1887
View File
File diff suppressed because it is too large. Load diff