如何利用曲线拟合所得标准差误差绘制误差棒?
关于用curve_fit参数标准差绘制带误差拟合曲线的解答
你的理解完全正确——curve_fit返回的协方差矩阵确实可以用来计算拟合参数的标准差,并且你完全可以利用这些标准差来展示拟合曲线的不确定性(比如绘制误差棒或误差区间)。
原理简单说明
pcov是拟合参数的协方差矩阵,它的对角元素代表每个参数自身的方差,对这些元素开平方得到的perr就是对应参数的标准差,反映了参数估计的不确定性。- 参数的不确定性会传递到拟合结果上,我们可以通过让每个参数在
参数值±标准差的范围内变动,计算出拟合曲线的上下边界,以此展示拟合结果的误差范围。
修改后的示例代码(实现带误差区间的拟合曲线)
下面是基于你的代码修改后的版本,生成光滑的拟合曲线并填充误差区间:
import numpy as np import matplotlib.pyplot as plt from scipy.optimize import curve_fit # 原始数据 x = np.arange(0,10) y = np.array([5,4.8,4.7,4.5,4.4,4.5,4.8,4.9,5,5.1]) # 定义拟合函数 def function(x,a,b,c): return a*x**2 + b*x + c # 绘制原始散点 plt.scatter(x, y, label='原始数据', color='blue') # 曲线拟合 parameters, pcov = curve_fit(function, x, y) perr = np.sqrt(np.diag(pcov)) print("各参数标准差:", perr) # 生成更密集的x值,让拟合曲线更光滑 x_fit = np.linspace(x.min(), x.max(), 100) # 基准拟合曲线 y_fit = function(x_fit, *parameters) # 计算参数+标准差对应的拟合曲线上限 y_upper = function(x_fit, *(parameters + perr)) # 计算参数-标准差对应的拟合曲线下限 y_lower = function(x_fit, *(parameters - perr)) # 绘制基准拟合曲线 plt.plot(x_fit, y_fit, label='拟合曲线', color='red') # 填充误差区间(半透明) plt.fill_between(x_fit, y_lower, y_upper, color='red', alpha=0.2, label='误差区间') # 美化图表 plt.xlabel('x') plt.ylabel('y') plt.legend() plt.show()
补充说明
- 如果想给离散拟合点加误差棒,可使用
plt.errorbar,但对于连续曲线来说,填充误差区间的展示效果更直观。 - 这里的误差区间基于参数的1σ标准差计算,意味着大约68%的概率下,真实曲线会落在这个区间内。
内容的提问来源于stack exchange,提问作者TryingLearning
相关产品推荐
相关产品推荐

