Files
jupyter-collection/scientific-computing-2/auto_examples_jupyter_3/plot_interpolation.ipynb

132 lines
134 KiB
Plaintext
Raw Normal View History

2025-10-21 11:20:44 +08:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"# A demo of 1D interpolation\n"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 600x400 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 600x400 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 600x400 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Generate data\n",
"import numpy as np\n",
"\n",
"rng = np.random.default_rng(27446968)\n",
"measured_time = np.linspace(0, 2 * np.pi, 20)\n",
"function = np.sin(measured_time)\n",
"noise = rng.normal(loc=0, scale=0.1, size=20)\n",
"measurements = function + noise\n",
"\n",
"# Smooth the curve and interpolate at new times\n",
"import scipy as sp\n",
"\n",
"smoothing_spline = sp.interpolate.make_smoothing_spline(measured_time, measurements)\n",
"interpolation_time = np.linspace(0, 2 * np.pi, 200)\n",
"smooth_results = smoothing_spline(interpolation_time)\n",
"\n",
"# Plot the data, the interpolant, and the original function\n",
"import matplotlib.pyplot as plt\n",
"\n",
"plt.figure(figsize=(6, 4))\n",
"plt.plot(measured_time, measurements, \".\", ms=6, label=\"measurements\")\n",
"plt.plot(interpolation_time, smooth_results, label=\"smoothing spline\")\n",
"plt.plot(interpolation_time, np.sin(interpolation_time), \"--\", label=\"underlying curve\")\n",
"plt.legend()\n",
"plt.show()\n",
"\n",
"# Fit the data exactly\n",
"interp_spline = sp.interpolate.make_interp_spline(measured_time, function)\n",
"interp_results = interp_spline(interpolation_time)\n",
"\n",
"# Plot the data, the interpolant, and the original function\n",
"plt.figure(figsize=(6, 4))\n",
"plt.plot(measured_time, function, \".\", ms=6, label=\"measurements\")\n",
"plt.plot(interpolation_time, interp_results, label=\"interpolating spline\")\n",
"plt.plot(interpolation_time, np.sin(interpolation_time), \"--\", label=\"underlying curve\")\n",
"plt.legend()\n",
"plt.show()\n",
"\n",
"# Plot interpolant, its derivative, and its antiderivative\n",
"plt.figure(figsize=(6, 4))\n",
"t = interpolation_time\n",
"plt.plot(t, interp_spline(t), label=\"spline\")\n",
"plt.plot(t, interp_spline.derivative()(t), label=\"derivative\")\n",
"plt.plot(t, interp_spline.antiderivative()(t) - 1, label=\"antiderivative\")\n",
"\n",
"plt.legend()\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"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": 4
}