Python二次曲线拟合并绘图

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
 
# 二次函数定义
def func(x, a, b, c):
    return a * x ** 2 + b * x + c
 
# 生成数据
x_data = np.linspace(-10, 10, 100)
y_data = func(x_data, 5, 3, 1) + np.random.normal(0, 2, 100)
 
# 拟合二次函数
popt, pcov = curve_fit(func, x_data, y_data)
a, b, c = popt
 
# 绘制原始数据和拟合曲线
plt.scatter(x_data, y_data)
plt.plot(x_data, func(x_data, *popt), color='red')
plt.xlabel('x')
plt.ylabel('y')
plt.title('二次函数拟合示例')
plt.show()

### Python 曲线拟合方法 #### 使用 `numpy.polyfit` 进行多项式拟合 对于简单的多项式拟合,可以使用 NumPy 提供的 `polyfit` 函数。该函数通过最小二乘法来寻找最佳拟合系数。 ```python import numpy as np import matplotlib.pyplot as plt # 原始数据点 x = np.array([0, 1, 2, 3, 4]) y = np.array([1, 3, 2, 5, 8]) # 执行二次多项式拟合 coefficients = np.polyfit(x, y, deg=2) # 构建用于绘图的新 x 轴坐标 x_new = np.linspace(min(x), max(x), num=len(x)*10) # 计算对应的 y 值 y_new = np.polyval(coefficients, x_new) plt.scatter(x, y, label="原始数据", color='blue') plt.plot(x_new, y_new, label=f"{int(coefficients[0])}x² + {int(coefficients[1])}x + {int(coefficients[2])}", color='red') plt.legend() plt.show() ``` 此代码片段展示了如何利用 `np.polyfit()` 对给定的数据集执行二次项拟合并绘制结果图表[^1]。 #### 使用 `scipy.optimize.curve_fit` 自定义模型拟合 当需要更复杂的非线性关系时,则可借助 SciPy 的 `curve_fit` 功能来进行参数估计。下面是一个关于高斯分布的例子: ```python from scipy.optimize import curve_fit import math def gaussian(x, a, b, c): """ 高斯函数 """ return a * np.exp(-(x-b)**2 / (2*c**2)) # 测试用的数据点 test_x = np.linspace(-10, 10, 100) test_y = gaussian(test_x, 2.5, 1., 1.) + np.random.normal(size=test_x.size)/10. popt, pcov = curve_fit(gaussian, test_x, test_y) print(f"最优参数: {popt}") plt.figure(figsize=(8,6)) plt.scatter(test_x, test_y, s=10, alpha=.5, marker='o', label="带噪声的数据") plt.plot(test_x, gaussian(test_x,*popt),'g--',label="拟合后的曲线") plt.title('Gaussian Fit Example') plt.xlabel('X Axis Label') plt.ylabel('Y Axis Label') plt.legend() plt.grid(True) plt.show() ``` 上述例子说明了怎样应用 `curve_fit` 来调整预设形式的概率密度函数至实际观测值上,并展示最终效果[^2]。 #### 注意事项与常见问题解决办法 有时可能会遇到拟合失败的情况,这可能是由于初始猜测不合理或者目标方程不适合当前数据等原因造成的。此时应该仔细检查输入数据的质量以及所选模型是否恰当[^3]。 另外,在配置开发环境过程中也需要注意版本兼容性和路径设置等问题,确保正确加载所需的第三方库文件[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

piaopiaolanghua

感谢老板鼓励~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值