Files
jupyter-collection/scientific-computing-2/auto_examples_jupyter/plot_polyfit.ipynb

90 lines
23 KiB
Plaintext
Raw Normal View History

2025-10-21 11:20:44 +08:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"# Fitting to polynomial\n",
"\n",
"Plot noisy data and their polynomial fit\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 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
"# 创建随机数生成器并固定种子,保证每次运行结果一致\n",
"rng = np.random.default_rng(27446968)\n",
"\n",
"# 在 [0, 1] 区间生成 20 个等距点,作为自变量\n",
"x = np.linspace(0, 1, 20)\n",
"\n",
"# 生成因变量:基础信号为 cos(x),并叠加 [-0.3, 0.3] 区间的随机噪声\n",
"y = np.cos(x) + 0.3 * rng.random(20)\n",
"\n",
"# 用 3 次多项式对带噪数据进行最小二乘拟合,返回多项式对象 p\n",
"p = np.poly1d(np.polyfit(x, y, 3))\n",
"\n",
"# 构造更密集的横坐标,用于绘制光滑拟合曲线\n",
"t = np.linspace(0, 1, 200)\n",
"\n",
"# 绘制原始数据点(圆点)和拟合曲线(实线)\n",
"plt.plot(x, y, \"o\", t, p(t), \"-\")\n",
"\n",
"# 显示图形\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
}