如何检查符号表达式是否合理?

时间:2019-12-30 11:55:23

标签: sympy

我正在使用Sympy,但还没有找到一种简单的方法来测试 x∈ Q

上下文:我有一组非常简单的2DoF特征值问题的解决方案(例如,

enter image description here

),我想检查这些解决方案之一是否合理(或者换句话说,如果解决方案不包含平方根)。

一种直接的检查方法是我最想要的,但是我也可以接受一个答案,该答案涉及在解决方案中找到(而不是找到)平方根。

2 个答案:

答案 0 :(得分:1)

函数rational = lambda x: all(i.exp.is_Integer for i in x.atoms(Pow))是您的条件的直接转换,如果所有幂(如果存在)都是整数,则返回True。

>>> from sympy import Pow, S, sqrt
>>> rational = lambda x: all(i.exp.is_Integer for i in x.atoms(Pow))
>>> rational(S.Half)
True
>>> rational(sqrt(3))
False
>>> rational(3/(1+sqrt(3)))
False

答案 1 :(得分:0)

我找到的一种可能的解决方案是

 my_expr = compute_my_expr(*args, **kwds)
 try:
     stuff = False
     Rational(my_expr)
     stuff = do_stuff_with_rationals(my_expr)
 except TypeError:
     pass
 if stuff: ...

可以封装在函数中

 def rational_p(expr):
     try:
         Rational(expr)
         return True
     except TypeError:
         return False

让我们写(相当晦涩)

  stuff = rational_p(my_expr) and do_stuff_with_rationals(my_expr)
  if stuff: ...

我仍然希望有一个更好的答案...