Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何打印高斯曲线拟合结果?_Python_Scipy_Curve Fitting_Data Fitting_Gauss - Fatal编程技术网

Python 如何打印高斯曲线拟合结果?

Python 如何打印高斯曲线拟合结果?,python,scipy,curve-fitting,data-fitting,gauss,Python,Scipy,Curve Fitting,Data Fitting,Gauss,我花了一些时间,但我使用下面的代码为我的x,y数据集创建了一个高斯拟合 import matplotlib.pyplot as plt import numpy as np from scipy.optimize import curve_fit def Gauss(x, a, x0, sigma, offset): return a * np.exp(-(x - x0)**2 / (2 * sigma**2)) + offset x, y = np.random.random(100)

我花了一些时间,但我使用下面的代码为我的x,y数据集创建了一个高斯拟合

import matplotlib.pyplot as plt
import numpy as np
from scipy.optimize import curve_fit
def Gauss(x, a, x0, sigma, offset):
    return a * np.exp(-(x - x0)**2 / (2 * sigma**2)) + offset
x, y = np.random.random(100), np.random.random(100)
popt, pcov = curve_fit(Gauss, x, y, p0=[np.max(y), np.median(x), np.std(x), np.min(y)])
plt.plot(x, y, 'b+:', label='data')
x_fit = np.linspace(np.min(x), np.max(x), 1000)
plt.plot(x_fit, Gauss(x_fit, *popt), 'r-', label='fit')
plt.legend()
plt.title('Something')
plt.xlabel('Anotherthing')
plt.ylabel('Athing')
plt.show()
我可以看到我的身体做得很好,可以看到图表和一切

我现在想知道的是,如何在屏幕上打印此拟合的结果,例如拟合的最大点x处的最大值、估计误差等


这些信息可以访问吗?如果是,有没有办法打印出这些信息?如果没有,是否有人能为我指出正确的方向来查找拟合误差?

相关信息包含在变量
popt
pcov
中。看见将为这些变量中的每一个返回一个数组。

查看此处:[查看函数result.fit\u report()]。
您还可以将最终参数添加到绘图标签。

正如tagoma指出的,拟合的所有相关信息都包含在popt(最佳参数)和pcov(协方差矩阵)中。在这种情况下,给定一组参数(a、x0、sigma、offset),您可以将其解包为:

a, x0, sigma, offset = popt;
要解开其不确定性,类似地:

ua, ux0, usigma, uoffset = np.sqrt(np.diag(pcov));
(它们由各自的协方差给出)

据我所知,曲线拟合不提供卡方或标准偏差等更多信息,我通常在拟合完成后执行所需的计算,只需将所有的平方偏差相加,然后除以原始值(但这更像是一个统计学问题)


希望有帮助。

您能添加您看到的图像吗?或者更好——让它成为一个可复制的示例?@VladimírKunc我已经添加了这个数字。我调用的数据文件只包含x和y数字。@VladimírKunc您只需将第6行替换为x,y=np.random.random(100),np.random.random(100)这样的代码即可。