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

90 lines
62 KiB
Plaintext
Raw Normal View History

2025-10-21 11:20:44 +08:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"# Fitting in Chebyshev basis\n",
"\n",
"Plot noisy data and their polynomial fit in a Chebyshev basis\n"
]
},
{
"cell_type": "code",
"execution_count": 2,
"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",
"# 创建随机数生成器并固定种子 27446968保证每次运行结果可复现\n",
"rng = np.random.default_rng(27446968)\n",
"\n",
"# 在 [-1, 1] 区间均匀生成 2000 个横坐标点\n",
"x = np.linspace(-1, 1, 2000)\n",
"\n",
"# 生成纵坐标:基础信号为 cos(x),再叠加 [-0.3, 0.3] 区间的均匀随机噪声\n",
"y = np.cos(x) + 0.3 * rng.random(2000)\n",
"\n",
"# 用 90 阶 Chebyshev 多项式对带噪数据进行最小二乘拟合,返回可调用多项式对象 p\n",
"p = np.polynomial.Chebyshev.fit(x, y, 90)\n",
"\n",
"# 绘制原始数据散点图,红色圆点\n",
"plt.plot(x, y, \"r.\")\n",
"\n",
"# 在同一张图上绘制拟合曲线,黑色实线,线宽 3 像素\n",
"plt.plot(x, p(x), \"k-\", lw=3)\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
}