Решите для x: n ** x + x = 0, используя бинарный поиск - PullRequest
0 голосов
/ 17 апреля 2020

Я хочу вычислить для x (до 6 десятичных знаков) в уравнении: n ** x + x = 0. Я хочу сделать это с помощью двоичного поиска.

Я использовал приведенный ниже код для получить квадрат root положительного целого числа, 'n'. Нужно применить тот же лог c, чтобы как-то решить вышеуказанную проблему.

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))

1 Ответ

1 голос
/ 17 апреля 2020

Эта функция, по-видимому, монотонно увеличивается, поэтому двоичный поиск можно применять так же, как для квадрата root.

В вашей функции n была цель, теперь она равна 0 и n - это параметр.

Обратите внимание, что эта функция имеет нулевое отрицательное значение, поэтому не забывайте расширять область поиска.

n = int(input())

def binarySearch(n):
    # n is the parameter
    l = -10
    r = 10

    while abs(l - r) > 10**(-5):
        mid = (l + r) / 2
        # Compute the value of the function and compare against 0.0
        if (n**mid + mid) > 0.0:
            r = mid
        else:
            l = mid
    return round(mid, 4)

print('%.4f' % binarySearch(n))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...