我正在使用Sympy,但还没有找到一种简单的方法来测试 x∈ Q 。
上下文:我有一组非常简单的2DoF特征值问题的解决方案(例如,
),我想检查这些解决方案之一是否合理(或者换句话说,如果解决方案不包含平方根)。
一种直接的检查方法是我最想要的,但是我也可以接受一个答案,该答案涉及在解决方案中找到(而不是找到)平方根。
答案 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: ...
我仍然希望有一个更好的答案...