Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.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中的Newton-Raphson算法不起作用;只有一个方向的估计_Python_R_Approximation - Fatal编程技术网

Python中的Newton-Raphson算法不起作用;只有一个方向的估计

Python中的Newton-Raphson算法不起作用;只有一个方向的估计,python,r,approximation,Python,R,Approximation,首先阅读:问题只是绝对值的括号应该在实际分数附近。现在的问题是它实际上不够精确,它忽略了0.000001,而more更喜欢0.0001作为公差(当我要求它接近55时,它停在54.99439921372205)。我将容忍度增加到一个疯狂的0,然后是1,但例如大约50,它估计为49.14!!可怕的!为什么会发生这种情况 更新:它必须是一个float() 我试图找到θ,它属于一个基于向量的函数。我在R中运行了这段代码,我试图将它从R翻译成Python 当格伦斯分数等于50时,我想要近似θ的值。 我有一

首先阅读:问题只是绝对值的括号应该在实际分数附近。现在的问题是它实际上不够精确,它忽略了0.000001,而more更喜欢0.0001作为公差(当我要求它接近55时,它停在54.99439921372205)。我将容忍度增加到一个疯狂的0,然后是1,但例如大约50,它估计为49.14!!可怕的!为什么会发生这种情况

更新:它必须是一个
float()

我试图找到θ,它属于一个基于向量的函数。我在R中运行了这段代码,我试图将它从R翻译成Python

当格伦斯分数等于50时,我想要近似θ的值。 我有一个θ=0.5的起始值,然后它在R中迭代。 在R中只需要大约11次迭代就可以达到这一点

不幸的是,这在Python中不起作用,我将其隔离了这么多:出于某种原因,这些值只能低于0.5,但不能高于0.5。在这些地方使用打印甚至表明它没有运行代码中的
#a
部分,而
#b
部分运行。这表明该值永远不会上升,因此我永远找不到像0.4这样的值(因为它必须上升0.5、0.25、0.37.5、0.4375等,但它只能下降;0.5、0.25、0.125,然后迟早会停止)

我可以看到它运行着#b。当它不得不下降时,它会分开很多次,但它永远不会上升。我也把它们调换了一下,看看是否有顺序效应,但实际上没有:它根本就不认为它是真的(即使我知道它是真的) 有人能看到出了什么问题吗,因为这是在R工作

def CalcTheta(grensscore, alpha, beta):
    theta = 0.5
    estimate = [10000]   # I just set this to not error on the check
    up = 1
    down = 0

    while((math.fabs(sum(estimate)) - grensscore) > 0.00001):

        if estimate == [10000]:     # I set it like this, 
            estimate = [grensscore] # so it will skip the first run

        # a.
        if (sum(estimate) - grensscore) < 0:
            down = theta
            print(down)
            theta = (theta + up) / 2
            print(theta)

        #b.
        if (sum(estimate) - grensscore) > 0:
            print(up, down, theta)
            up = theta
            theta = (theta + down) / 2
            print(up, down, theta)

        for x in range(len(beta)):
            if x == 0:
                estimate = []

            estimate.append(math.exp(alpha[x] * (theta - beta[x]))  / (1 + math.exp(alpha[x] * (theta - beta[x]))))

    return(theta)

CalcTheta(50, data[:,1], data[:,2])
def CalcTheta(Grenscore、alpha、beta):
θ=0.5
estimate=[10000]#我只是在检查时将其设置为not error
up=1
向下=0
而((数学fabs(总和(估计))-grensscore)>0.00001):
如果估算==[10000]:#我这样设置,
estimate=[grensscore]#因此它将跳过第一次运行
#a。
如果(总和(估计)-格伦斯得分)<0:
向下=θ
打印(向下)
θ=(θ+向上)/2
打印(θ)
#b。
如果(总和(估计)-grensscore)>0:
打印(向上、向下、θ)
向上=θ
θ=(θ+向下)/2
打印(向上、向下、θ)
对于范围内的x(len(beta)):
如果x==0:
估计数=[]
append(math.exp(alpha[x]*(theta-beta[x])/(1+math.exp(alpha[x]*(theta-beta[x]))
返回(θ)
CalcTheta(50,数据[:,1],数据[:,2])

有一些库可以为您做到这一点。我建议(
scipy.optimize.newton
)。可在此处找到配方:


有一些库可以为您做到这一点。我建议(
scipy.optimize.newton
)。可在此处找到配方:

问题是

while(math.fabs(总和(估计))-grenscore>0.00001):

应该是

while(math.fabs(总和(估计值)-grenscore))>0.00001:

对于另一个部分,它不是一个浮动,因此它不是真正精确的

while(math.fabs(总和(估计))-grenscore>0.00001):

应该是

while(math.fabs(总和(估计值)-grenscore))>0.00001:


对于另一部分,它不是一个浮点,因此它没有真正精确。

我不知道函数的素数;我不知道怎么做。
fprime
是可选的,您只需要提供函数本身和零值的第一个估计值。(实际文档在这里:)我不知道函数的素数在这里;我不知道怎么做。
fprime
是可选的,您只需要提供函数本身和零值的第一个估计值。(实际文档在这里:)我不清楚您是否自己解决了这个问题。如果你已经解决了这个问题,如果你能为自己的问题写一个答案就好了。我不确定这是否只是一个打字错误,实际代码是corerct,但是带有
while
语句的行关闭的括号多于打开的括号。我很确定这会导致语法错误。我不清楚你是否自己解决了这个问题。如果你已经解决了这个问题,如果你能为自己的问题写一个答案就好了。我不确定这是否只是一个打字错误,实际代码是corerct,但是带有
while
语句的行关闭的括号多于打开的括号。我很确定这会导致语法错误。