Как найти переменную из оператора Math.Round - PullRequest
0 голосов
/ 26 октября 2018

У нас есть код в коде, который вычисляет некоторое скорректированное значение, подобное этому

a = Math.Round(b, 3) + Math.Round(b * c1, 3) + Math.Round(b * c2, 3);

Проблема в том, что теперь мне нужно сделать обратный расчет. У меня есть значения для a, c1 & c2 и мне нужно найти значение b. Это возможно?

1 Ответ

0 голосов
/ 26 октября 2018

Предполагая, что b, c1 и c2 все положительные, у вас есть возрастающая функция, поэтому вы можете выполнить бинарный поиск по ней, чтобы найти b.Может существовать формула для непосредственного получения b, но она также должна работать достаточно быстро.Вот пример Python:

c1 = 0.0125
c2 = 0.0517
a = 0.155

def op(b, c1, c2):
    return round(b, 3) + round(b * c1, 3) + round(b * c2, 3) 

minb = 0
maxb = a

while (minb + 0.00001 < maxb):
    b = (minb + maxb) / 2
    estimate = op(b, c1, c2)

    if estimate > a:
        maxb = b
    elif estimate < a:
        minb = b
    else:
        break

print(b, op(b, c1, c2))
...