二元搜索:方程求解

问题描述 投票:0回答:1

如何在二进制方程中求解x最多6个小数位:n ** x + x = 0使用二进制搜索?

我用下面的代码在类似的问题中得到正整数n的平方根:

n=int(input())

#find square root of n here
def sqroot(n):
    l = 0
    r = n
    while abs(l-r) > 10**(-5):
        mid = (l+r)/2
        if mid**2 > n:
            r = mid
        else:
            l = mid
    return round(mid,4)
print('%.4f' % sqroot(n))
python if-statement while-loop binary-search equation-solving
1个回答
0
投票

平方根方法利用平方根的特定属性。您应该尝试使用牛顿-拉夫森方法[]

def findOrigin(fn,x0=-1,x1=1,precision=0.00001):    
    while abs(x1-x0)>precision:
        f0,f1 = fn(x0),fn(x1)
        x0,x1 = x1,x1 - f1*(x1-x0)/(f1-f0)
    return x1

输出:

r = findOrigin(lambda x:2**x-x)

print(r) # -0.06667246267859094
© www.soinside.com 2019 - 2024. All rights reserved.