【问题标题】:sympy square roots: best way to do operations on rational numbers?sympy 平方根:对有理数进行运算的最佳方法?
【发布时间】:2021-04-19 16:00:38
【问题描述】:

因为我想简化平方根,所以我遇到了这个解决方法:

from sympy import sqrt, factor, simplify

_sqrt = sqrt
sqrt = lambda x: factor(simplify(_sqrt(x)))

# do maths operations with sqrt...

但它太慢了,我认为这不是最合适的方法 那么有没有其他方法可以处理平方根并简化它们 - 自动 -

【问题讨论】:

  • 您希望它们以何种方式简化? SymPy 已经将它们以最简单的形式呈现。
  • 不,它没有。检查here

标签: python sympy sqrt rational-number


【解决方案1】:

SymPy 会自动将有理参数简化为sqrt,但可以以不明确有理的方式编写有理数(如您之前的帖子中所述):

>>> eq
sqrt((-9/10 + 6*sqrt(3)/5)**2 + (6/5 + 9*sqrt(3)/10)**2)

sqrt 只会简化显式的Rational 参数。扩展参数的基础表明它是一个 Rational,sqrt 将简化它:

>>> eq.base.expand()
9
>>> sqrt(9) == 3
True

_mexpand 函数比 expand 在需要展平涉及幂的表达式的情况下更好:

>>> from sympy.core.function import _mexpand as flat
>>> flat(eq)
3

【讨论】:

  • 那么我应该用_mexpand(sqrt(x)) 替换factor(symplify(sqrt(x))) 吗?
  • 在你的 lambda 表达式中,是的。但是如果你的x 可能有表达式的比率,那么sqrt = lambda x: _sqrt(cancel(x)) 会更好。通过这样做,您基本上是在说,“每当我使用 sqrt 时,我想确保表达式中没有未取消的因子。”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-07
  • 2018-12-07
  • 1970-01-01
  • 1970-01-01
  • 2013-12-18
  • 1970-01-01
相关资源
最近更新 更多