Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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 Scipy LeastSq错误条_Python_Scipy_Least Squares - Fatal编程技术网

Python Scipy LeastSq错误条

Python Scipy LeastSq错误条,python,scipy,least-squares,Python,Scipy,Least Squares,我正在使用SciPy的LeastSq将实验光谱与理论预期进行拟合。当然,存在与实验值相关的误差。我怎样才能把这些喂给Leatsq,或者我需要一个不同的程序?我在文档中找不到任何内容。该函数没有内置的合并权重的方法。但是,该函数确实有一个sigma参数,可用于指示每个y数据点的方差 curve\u fit使用1.0/sigma作为权重,其中sigma可以是长度N的数组(与ydata长度相同) 因此,您必须根据误差条的大小推测每个ydata点的方差,并使用该方差确定sigma 例如,如果您声明错误条

我正在使用SciPy的LeastSq将实验光谱与理论预期进行拟合。当然,存在与实验值相关的误差。我怎样才能把这些喂给Leatsq,或者我需要一个不同的程序?我在文档中找不到任何内容。

该函数没有内置的合并权重的方法。但是,该函数确实有一个
sigma
参数,可用于指示每个y数据点的方差

curve\u fit
使用
1.0/sigma
作为权重,其中
sigma
可以是长度
N
的数组(与
ydata
长度相同)

因此,您必须根据误差条的大小推测每个ydata点的方差,并使用该方差确定
sigma

例如,如果您声明错误条长度的一半表示1个标准偏差,则方差(即
曲线拟合
调用的
σ
)将是标准偏差的平方

sigma = (length_of_error_bar/2)**2
参考:


  • 我自己在做这件事的中间,所以我将分享我所做的事情,也许我们可以从社区得到一些评论。我有一个数据点的集合,这些数据点以一定的时间间隔获取,从中我计算出了标准偏差。我想用sin函数来拟合这些点。Leastsq通过最小化残差,或者基于一组参数p的数据点和拟合函数之间的差异来实现这一点。我们可以通过将残差除以方差或标准偏差的平方来加权残差

    sigma = (length_of_error_bar/2)**2
    
    详情如下:

    from scipy.optimize import leastsq
    import numpy as np
    from matplotlib import pyplot as plt
    def sin_func(t, p):
        """ Returns the sin function for the parameters:
            p[0] := amplitude
            p[1] := period/wavelength
            p[2] := phase offset
            p[3] := amplitude offset
        """
        y = p[0]*np.sin(2*np.pi/p[1]*t+p[2])+p[3]
        return y
    
    def sin_residuals(p, y, t, std):
        err = (y - p[0]*np.sin(2*np.pi/p[1]*t+p[2])-p[3])/std**2
        return err
    
    def sin_fit(t, ydata, std, p0):
    """ Fits a set of data, ydata, on a domain, t, with individual standard 
    deviations, std, to a sin curve given the initial parameters, p0, of the form:
            p[0] := amplitude
            p[1] := period/wavelength
            p[2] := phase offset
            p[3] := amplitude offset
        """
        # optimization # 
        pbest = leastsq(sin_residuals, p0, args=(ydata, t, std), full_output=1)
        p_fit = pbest[0]
    
        # fit to data #
        fit = p_fit[0]*np.sin(2*np.pi/p_fit[1]*t+p_fit[2])+p_fit[3]
    
        return p_fit
    

    它们是数据格式错误(例如“null”)还是?在后一种情况下,没有标准的方法来处理它。你能提供更多关于错误内容和错误分布的详细信息吗?错误基本上是通道中计数数的平方比。我在残差函数中加入了权重函数,效果很好。我可能会看一看曲线拟合例程,但由于我实际上使用的是lmfit(它处理的参数非常棒),我的第一种方法是加权。哦,是的,我想你可以这样做——在这种情况下,你可以使用
    leastsq