Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.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
scipy.optimize.minimize卡方python_Python_Scipy_Statistics_Chi Squared - Fatal编程技术网

scipy.optimize.minimize卡方python

scipy.optimize.minimize卡方python,python,scipy,statistics,chi-squared,Python,Scipy,Statistics,Chi Squared,所以我在做这个任务,我应该最小化卡方函数。我在互联网上看到有人这样做,所以我只是复制了它: 我做了一个卡方函数,它是三个变量(x,y,sigma)中的函数,其中sigma是随机的高斯波动随机的。高斯(0,sigma)。我没有在这里打印这些代码,因为乍一看可能会让人困惑(我使用了很多递归)。但是我可以向你保证这个函数是正确的 现在这段代码只是列出了计算出的最小值(由于随机高斯波动,每次都不同)。但主要问题来了。如果我的计算正确,我们应该得到一个平均值为2的列表(因为我有2个自由度,正如你在这个链

所以我在做这个任务,我应该最小化卡方函数。我在互联网上看到有人这样做,所以我只是复制了它:

我做了一个卡方函数,它是三个变量(x,y,sigma)中的函数,其中sigma是随机的高斯波动随机的。高斯(0,sigma)。我没有在这里打印这些代码,因为乍一看可能会让人困惑(我使用了很多递归)。但是我可以向你保证这个函数是正确的

现在这段代码只是列出了计算出的最小值(由于随机高斯波动,每次都不同)。但主要问题来了。如果我的计算正确,我们应该得到一个平均值为2的列表(因为我有2个自由度,正如你在这个链接中看到的:)

但是当我使用这个代码时,我得到了一个平均值为4的列表,但是如果我加上方法“Powell”,我得到的平均值是9

所以我的主要问题是,这些方法怎么可能如此不同,我如何知道使用哪种方法来获得最佳优化

因为我认为错误可能在我的平方函数中,所以我也将展示这个函数。这项任务背后的故事是,我们需要找到移动设备的位置,并且在位置(0,0)、(20,0)、(0,20)和(20,20)上有路由器。我们使用了很多递归,卡方图看起来很好(它在(5,5)上有一个最小值)


Kees

你能用一个额外的关键字参数调用optimize吗:options={'disp':True}?这将打开例程的调试消息传递。您将能够看到是否有任何隐藏的投诉。警告:由于精度损失,不一定会达到预期的错误。当前函数值:6.883043迭代次数:0函数评估:56梯度评估:11这是我所看到的:它将d比较4和9的结果是错误的,因为这两个结果都不收敛(就像你为至少一个问题指出的那样)。请记住,你的问题可能是非凸的,所有这些解算器只能给出一些局部最优解(没有关于全局解的信息)。它们也非常依赖于起点。我认为你应该展示你的
Chi
函数!如果你在优化一个函数时使用
exp
而不限制变量,则会出现数值错误,我认为这是非常可能的。更受约束的优化器可能在这方面遇到困难。我将展示我的Chi_平方代码:d是否可以使用其他关键字参数调用optimize:options={'disp':True}?这将打开例程的调试消息传递。您将能够看到是否有任何隐藏的投诉。警告:由于精度损失,不一定会达到预期的错误。当前函数值:6.883043迭代次数:0函数评估:56梯度评估:11这是我所看到的:它将d比较4和9的结果是错误的,因为这两个结果都不收敛(就像你为至少一个问题指出的那样)。请记住,你的问题可能是非凸的,所有这些解算器只能给出一些局部最优解(没有关于全局解的信息)。它们也非常依赖于起点。我认为你应该展示你的
Chi
函数!如果你在优化一个函数时使用
exp
而不限制变量,则会出现数值错误,我认为这是非常可能的。更受约束的优化器可能在这方面遇到困难。我将展示我的Chi_平方代码:D
def Chi2(pos):
    return Chi(pos[0],pos[1],1) 

x_list= []
y_list= []  
chi_list = []
    for i in range(1000):
        result = scipy.optimize.minimize(Chi2,[5,5]).x
        x_list.append(result[0])
        y_list.append(result[1])
        chi_list.append(Chi2(result))
def perfectsignal(x_m,y_m,x_r,y_r):
    return 20*np.log10(c / (4 * np.pi * f)) - 10 * np.log((x_m-x_r)**2 + (y_m-y_r)**2 + 2**2)

def signal(x_m,y_m,x_r,y_r,sigma):
    return perfectsignal(x_m,y_m,x_r,y_r) + random.gauss(0,sigma)

def res(x_m,y_m,x_r,y_r,sigma,sigma2):
    x = (signal(x_m,y_m,x_r,y_r,sigma) -   perfectsignal(x_m,y_m,x_r,y_r))/float(sigma2);
    return x

def Chi(x,y,sigma):
    return(res(x,y,0,0,sigma,1)**2+res(x,y,20,0,sigma,1)**2+res(x,y,0,20,sigma,1)**2+res(x,y,20,20,sigma,1)**2)