2016-08-28 6 views
0

Хочу численно решить уравнениеTypeError: не может определить значение истинности Relational при использовании sympy.solver

beta.ppf(x,a,b)-c=0

где а, Ь, с известными константами. Когда я попытался

from sympy.solvers import solve 
from sympy import Symbol 
from scipy.stats import beta 
x=Symbol('x') 
solve(beta.ppf(x,a,b)-c,x) 

Он вернулся мне

TypeError: cannot determine truth value of Relational

Как я могу это исправить?

+0

ли 'beta' импортированы из' scipy.stats'? – Stelios

+0

@Stelios Да, я просто забыл добавить эту строчку к сообщению. – xzt

+0

Вы ищете символическое или числовое решение? В первом случае функции scipy не могут помочь, поскольку они обязательно требуют числового ввода (т. Е. Явно присваивают числовые значения 'a' и' b'). Если вы довольны численным решением, я бы предложил использовать численный решатель из [scipy.optimize] (http://docs.scipy.org/doc/scipy/reference/optimize.html). – Stelios

ответ

1

Scipy.optimize (раздел проверки: «Корневой поиск») предоставляет множество функций для численного решения уравнений.

В следующем примере я буду использовать функцию newton (другие доступные решатели могут быть более подходящими для вашей проблемы - вы также должны проверить их). Я использовал произвольные числовые значения для a, b и c.

from scipy.stats import beta 
from scipy.optimize import newton 

a = 1 
b = 2 
c = 0.4 

def f(x, a, b, c): 
    return beta.ppf(x, a, b) - c 

newton(f, x0 = 0.2, args = (a,b,c)) 

0.6399999999999999

+0

Это работает. Благодаря! – xzt

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