首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用SymPy为数字找到一个简单的表示

用SymPy为数字找到一个简单的表示
EN

Stack Overflow用户
提问于 2019-04-22 12:44:10
回答 1查看 62关注 0票数 1

我很难用sympy简化下一个术语

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

代码语言:javascript
复制
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两部分中区分了这个表达式。

对于第一部分,我得到了一个期望的结果。

代码语言:javascript
复制
nsimplify(value_plus)

它是$1/2+\sqrt{21}/2$,可以在wolframα中看到。

但是,对于所需结果的第二部分整数($1/2-\sqrt{21}/2$),也可以在wolfram aplha中看到,形式为交替形式。

代码语言:javascript
复制
nsimplify(value_minus)

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

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

代码语言:javascript
复制
value_both = value_plus + value_minus

从截图上可以看到。所以我的问题是,

  1. 如何强制一个数字的其他表示?
  2. 如何将表示法仅限于实数?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-22 13:53:28

您可以使用cbrt代替根部

代码语言:javascript
复制
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))

产出将是:

代码语言:javascript
复制
1/2 + sqrt(21)/2
1/2 - sqrt(21)/2
1
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55794641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档