【问题标题】:Python SymPy: Error while solving inequalityPython SymPy:解决不等式时出错
【发布时间】:2017-02-20 05:16:44
【问题描述】:

问题:我正在尝试解决一个不等式以获得一个变量coeff_rw,它是满足不等式的符号rw 的值。该值应根据以下代码中定义的其他符号(变量)。我首先求解方程,然后求解不等式(使用来自this tutorial 的不等式求解器),但是,每次我使用任何求解器来获得coeff_rw 时,我都会得到一个coeff_rw,如tutorial 中给出的那样。

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 >= qwTrw 的值。

【问题讨论】:

  • 数量 qwqwT 不是多项式 w.r.t rw(它们包含 log(rw))。
  • 我明白...我也尝试了rational_inequality 求解器,但这也给出了PolynomialError

标签: python sympy symbolic-math inequality


【解决方案1】:

有理函数是两个多项式的比率,因此仍然不允许使用对数。试试

solve_univariate_inequality

但请注意,有些不等式很难解决。

【讨论】:

  • 运行了 10 多分钟后出现以下错误:File "C:\Anaconda\lib\site-packages\sympy\core\mul.py", line 975, in _eval_is_rational r = _fuzzy_group((a.is_rational for a in self.args), quick_exit=True) RuntimeError: maximum recursion depth exceeded while calling a Python object
  • 这就是我的意思,有些不平等很难解决。将您的示例作为错误提交给 SymPy 团队,但您应该准备好听到他们说他们无法解决您的不等式。如果您可以缩短可以使其工作的域(它是函数的参数)。我的建议是使用数值解决方案,或解决简化的问题。如果您提供整个图片(编辑您的问题),可能会有建议。还考虑尝试将 Mathematica 作为符号求解器,它非常强大。
  • 这肯定不会靠同情来解决。我在那里回答。
  • 对不起,现在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-10-08
  • 2021-09-28
  • 1970-01-01
  • 2021-11-25
  • 1970-01-01
  • 1970-01-01
  • 2021-06-20
相关资源
最近更新 更多