使用 SymPy 找到数字的简单表示
Find a simple representation for a number with SymPy
我正在努力用 sympy
简化以下术语
(乳胶)$\sqrt3{8+3\sqrt{21}}+\sqrt3{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_plus
和value_minus
。
对于第一部分,我得到了想要的结果
nsimplify(value_plus)
这是 $1/2+\sqrt{21}/2$ 可以在 wolfram alpha.
中看到
但是,对于第二部分,我们也可以在 wolfram aplha 中看到想要的结果($1/2-\sqrt{21}/2$),在替代形式下
nsimplify(value_minus)
我最终得到了一个复杂的表示,这也是正确的,但不是我想要得到的。
因此,我没有得到预期的结果,即 1。
value_both = value_plus + value_minus
如屏幕截图所示。
所以我的问题是,
- 如何强制数字的其他表示形式?
- 如何将表示限制为仅实数?
您可以使用 real_root:
而不是 cbrt
value_plus = real_root(8 + 3 * sqrt(21), 3)
value_minus = real_root(8 - 3 * sqrt(21), 3)
value_both = value_plus + value_minus
print(nsimplify(value_plus))
print(nsimplify(value_minus))
print(nsimplify(value_both))
输出将是:
1/2 + sqrt(21)/2
1/2 - sqrt(21)/2
1
我正在努力用 sympy
(乳胶)$\sqrt3{8+3\sqrt{21}}+\sqrt3{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_plus
和value_minus
。
对于第一部分,我得到了想要的结果
nsimplify(value_plus)
这是 $1/2+\sqrt{21}/2$ 可以在 wolfram alpha.
中看到但是,对于第二部分,我们也可以在 wolfram aplha 中看到想要的结果($1/2-\sqrt{21}/2$),在替代形式下
nsimplify(value_minus)
我最终得到了一个复杂的表示,这也是正确的,但不是我想要得到的。
因此,我没有得到预期的结果,即 1。
value_both = value_plus + value_minus
如屏幕截图所示。 所以我的问题是,
- 如何强制数字的其他表示形式?
- 如何将表示限制为仅实数?
您可以使用 real_root:
而不是cbrt
value_plus = real_root(8 + 3 * sqrt(21), 3)
value_minus = real_root(8 - 3 * sqrt(21), 3)
value_both = value_plus + value_minus
print(nsimplify(value_plus))
print(nsimplify(value_minus))
print(nsimplify(value_both))
输出将是:
1/2 + sqrt(21)/2
1/2 - sqrt(21)/2
1