2016-10-11 7 views
9

문제를 해결하는 동안 : 나는 부등식을 만족하는 기호 rw의 값을하는 변수 coeff_rw을 얻기 위해 불평등을 해결하기 위해 노력하고 있습니다. 이 값은 다음 코드에서 정의 된 다른 기호 (변수)로 표시되어야합니다. 먼저 방정식을 풀고 불평등 (this tutorial의 부등식 해결사 사용)을 풀고 있는데 tutorial에 주어진대로 coeff_rw을 얻으려고 솔버를 사용할 때마다 PolynomialError이 나옵니다.파이썬 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)] 

질문 : 내가 위의 코드에 정의 된 불평등 qw >= qwT에 대한 rw의 값을 얻을 싶습니다.

+0

수량 'qw'와'qwT'는 다항식이 아니며'log (rw)'를 포함합니다. – Stelios

+0

나는 이해했다 ... rational_inequality 해결사도 시도했지만'PolynomialError'도 제공한다 – Pupil

답변

1

합리적인 함수는 두 다항식의 비율이므로 로그는 여전히 허용되지 않습니다. 시도해보십시오.

solve_univariate_inequality 

그러나 일부 부등식은 해결하기 어렵습니다.

+0

다음 오류를 내기 전에 10 분 이상 실행했다.'File "C : \ Anaconda \ lib \ site-packages \ _eval_is_rational R = _fuzzy_group에서 sympy \ 코어 \의 mul.py ", 라인 975 (self.args의)에 대한 (a.is_rational는 quick_exit는 = 참) RuntimeError에 : 최대 재귀 깊이는 파이썬이 – Pupil

+0

을 object' 호출하는 동안 초과 그것이 바로 몇 가지 불평등이 해결하기 어렵다는 것을 의미합니다. SymPy 팀에 사례를 버그로 제출하지만, 불평등을 해결할 수 없다는 의견을들을 준비를해야합니다. 도메인을 단축 할 수 있다면 (기능에 대한 매개 변수 임) 도메인을 작동시킬 수 있습니다. 내가 제안한 것은 수치 해법을 사용하거나 축소 된 문제를 해결하는 것이다. 전체 사진을 주면 (질문을 편집하십시오) 제안이있을 수 있습니다. 또한 Mathematica를 상징적 인 솔버로 생각하면서 꽤 강력합니다. – kabanus

+0

그건 분명히 sympy에 의해 해결되지 않습니다. 나는 거기에 대답했다. – kabanus