2017-01-19 7 views
2

У меня есть KDE, представляющий функцию плотности вероятности (PDF). Теперь я хочу, чтобы получить значение переменной lower, которая удовлетворяет следующее условие:Python, как найти конкретное значение при интеграции KDE?

kde.integrate_box_1d(lower, 2.0) == 0.05

где 0.05 такое «критическое значение». 2.0 - верхний предел.

До сих пор я решить ее с помощью кода последующего:

def finder(KDE, critical, lower, upper): 
    stop = True 
    search = lower 
    while stop: 
     if KDE.integrate_box_1d(search+0.00001,upper) > critical: 
      search += 0.0001 
     else: stop = False 
    return search, KDE.integrate_box_1d(search,upper) 

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

ответ

1

это похоже на поиск 1d root. Посмотрите на

scipy.optimize

Чтобы быть более конкретным, вы можете попробовать что-то вроде

solver = scipy.optimize.brentq # or brenth or ridder or bisect 
def finder(KDE, critical, lower, upper): 
    def f(search): 
     return KDE.integrate_box_1d(search, upper) - critical 
    x, r = solver(f, lower, upper, full_output=True) 
    assert r.converged 
    return x 

HTH, Пол

+0

Эффективно. Тесный ответ найден в книге «Численный питон: практический подход к технике для промышленности» стр. 331 –

+0

@ IvánCastro Боюсь, у меня нет этой книги. Я добавил код в ответ. Не могли бы вы проверить, делает ли он то, что вы хотите? –

 Смежные вопросы

  • Нет связанных вопросов^_^