2016-10-11 6 views
9

Проблемы: Я пытаюсь решить неравенство, чтобы получить переменную coeff_rw, которая является значением символа rw, удовлетворяющего неравенству. Это значение должно быть в терминах других символов (переменных), которые определены в следующем коде. Я сначала решаю уравнения, а затем неравенство (используя решатели неравенства от this tutorial), однако я получаю PolynomialError каждый раз, когда я использую любой решатель для получения coeff_rw, как указано в tutorial.Python SymPy: Ошибка при решении неравенства

import sympy as sym 
#======= define variables as symbols 
r, c1, c2, c3, c4, rh, rg, rw, cg, cw, a = sym.symbols('r, c1 c2 c3 c4 rh rg rw cg cw a') # cg = nablaP_g/(4*mu_g); cw = nablaP_w/(4*mu_w); a = mu_g/mu_w 
#======= solve system of equations 
coeffs = sym.solve((c1*(sym.log(rh)) + c2 + cg*(rh**2), \ 
c1*(sym.log(rg)) + c2 - c3*(sym.log(rg)) - c4 - (cw - cg)*(rg**2), \ 
(a*c1) - c3 - 2*(rg**2)*(cw - a*cg), \ 
c3*(sym.log(rw)) + c4 + cw*(rw**2)), c1, c2, c3, c4) 
#======= solve qg and qw 
qg = sym.integrate((cg*(r**2) + coeffs[c1]*(sym.log(r)) + coeffs[c2])*(2*sym.pi*r), (r, rh, rg)) 
qw = sym.integrate((cw*(r**2) + coeffs[c3]*(sym.log(r)) + coeffs[c4])*(2*sym.pi*r), (r, rg, rw)) 
#======= substitute rg=rh in qw 
qwT = qw.subs(rg, rh) 
#======= solve the inequality (qw >= qwT) to obtain rw 
from sympy.solvers.inequalities import reduce_rational_inequalities 
coeff_rw = reduce_rational_inequalities([[qw - qwT >= 0]], rw)] 

Вопрос: Я хотел бы получить значение rw для неравенства qw >= qwT, как определено в приведенном выше коде.

+0

Количества 'qw' и' qwT' не являются полиномами w.r.t 'rw' (они содержат' log (rw) '). – Stelios

+0

Я понимаю, что ... Я также испробовал решение рациональной логики, но это также дает «PolynomialError» – Pupil

ответ

1

Рациональная функция является отношением двух полиномов, поэтому журнал все еще не разрешен. Попробуйте

solve_univariate_inequality 

но обратите внимание, что некоторые неравенства трудно решить.

+0

. Он работал более 10 минут, прежде чем дать следующую ошибку: «Файл» C: \ Anaconda \ lib \ site-packages \ SymPy \ ядро ​​\ mul.py», строка 975, в _eval_is_rational г = _fuzzy_group ((a.is_rational для в self.args), quick_exit = True) RuntimeError: максимальная глубина рекурсии превышено время вызова Python object' – Pupil

+0

Вот что я имею в виду, что некоторые неравенства трудно решить. Представьте команде SymPy ваш пример как ошибку, но вы должны быть готовы услышать от них, что они не могут решить ваше неравенство. Если вы можете сократить домен (это параметр функции), который может заставить его работать. Я предлагаю использовать численное решение или решить уменьшенную проблему. Если вы дадите всю картину (отредактируйте свой вопрос), могут быть предложения. Также, рассматривая попытку Mathematica как символического решателя, он довольно мощный. – kabanus

+0

Это не будет решаться с помощью симпы. Я ответил. – kabanus

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