猿问

使用 SymPy 查找数字的简单表示

我正在努力简化以下术语 sympy


(乳胶)$\sqrt 3 {8+3\sqrt{21}}+\sqrt 3 {8-3\sqrt{21}}$


from sympy import (

    init_printing,

    sqrt,

    cbrt,

    nsimplify,

    simplify,

)


init_printing(use_unicode=True)


value_plus = cbrt(8 + 3 * sqrt(21))

value_minus = cbrt(8 - 3 * sqrt(21))


value_both = value_plus + value_minus

在这里,我将表达式分别分为两部分value_plusvalue_minus

对于第一部分,我得到了想要的结果

nsimplify(value_plus)

这是 $1/2+\sqrt{21}/2$ 可以在wolfram alpha中看到。

然而,对于第二部分的期望结果($1/2-\sqrt{21}/2$),也可以在wolfram aplha中看到,以替代形式

nsimplify(value_minus)

我最终得到了一个复杂的表示,这也是正确的,但不完全是我想要得到的。

因此,我没有得到预期的结果,即 1。

value_both = value_plus + value_minus

如屏幕截图所示。所以我的问题是,

  1. 如何强制数字的其他表示?

  2. 如何将表示限制为仅实数?

Cats萌萌
浏览 172回答 1
1回答

Helenr

而不是cbrt你可以使用real_root:value_plus = real_root(8 + 3 * sqrt(21), 3)value_minus = real_root(8 - 3 * sqrt(21), 3)value_both = value_plus + value_minusprint(nsimplify(value_plus))print(nsimplify(value_minus))print(nsimplify(value_both))输出将是:1/2 + sqrt(21)/21/2 - sqrt(21)/21
随时随地看视频慕课网APP

相关分类

Python
我要回答